UNPKG

sql-to-nosql

Version:

Run SQL quries on your Mongodb database.

55 lines 2.53 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { parseQuery, parsedQueryToMongoQuery } from "./utils/parser.mjs"; import { connect } from "./utils/database.mjs"; export class SqlToNoSql { constructor(config) { this.config = config; } run(query) { return __awaiter(this, void 0, void 0, function* () { if (!query) { throw new Error("missing query!"); } // // TODO: add better validation! // if ([";", "(", ")"].some((char) => query.includes(char))) { // throw new Error("Invalid query, your query contains invalid characters!"); // } const parsedQuery = parseQuery(query); if (parsedQuery.command !== "select") { throw new Error("Only select queries are supported"); } const mongoQuery = parsedQueryToMongoQuery(parsedQuery); if (query !== "select") { throw new Error("Only select queries are supported"); } try { if (!this.client) { this.client = yield connect(this.config.connection); yield this.client.connect(); } const db = this.client.db(); const collection = db.collection(mongoQuery.collection); const data = yield collection[mongoQuery[parsedQuery.command]](mongoQuery.query, { projection: mongoQuery.fields, sort: mongoQuery.sort, limit: mongoQuery.limit || 0, skip: mongoQuery.skip || 0, }).toArray(); return data; } catch (err) { console.error(err); throw Error("Something went wrong!"); } }); } } //# sourceMappingURL=index.mjs.map