quran-promise
Version:
ES2016 async/await (promise) enabled node module for the Holy Quran.
325 lines (256 loc) • 10.8 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('babel-runtime/core-js/object/keys'), require('babel-runtime/regenerator'), require('babel-runtime/helpers/asyncToGenerator'), require('babel-runtime/helpers/classCallCheck'), require('babel-runtime/helpers/createClass'), require('sqlite'), require('util')) :
typeof define === 'function' && define.amd ? define(['babel-runtime/core-js/object/keys', 'babel-runtime/regenerator', 'babel-runtime/helpers/asyncToGenerator', 'babel-runtime/helpers/classCallCheck', 'babel-runtime/helpers/createClass', 'sqlite', 'util'], factory) :
(global.quran-promise = factory(global._Object$keys,global._regeneratorRuntime,global._asyncToGenerator,global._classCallCheck,global._createClass,global.db,global.util));
}(this, function (_Object$keys,_regeneratorRuntime,_asyncToGenerator,_classCallCheck,_createClass,db,util) { 'use strict';
_Object$keys = 'default' in _Object$keys ? _Object$keys['default'] : _Object$keys;
_regeneratorRuntime = 'default' in _regeneratorRuntime ? _regeneratorRuntime['default'] : _regeneratorRuntime;
_asyncToGenerator = 'default' in _asyncToGenerator ? _asyncToGenerator['default'] : _asyncToGenerator;
_classCallCheck = 'default' in _classCallCheck ? _classCallCheck['default'] : _classCallCheck;
_createClass = 'default' in _createClass ? _createClass['default'] : _createClass;
db = 'default' in db ? db['default'] : db;
util = 'default' in util ? util['default'] : util;
// Defines file paths
var databaseFilePath = __dirname + '/db.sqlite';
var Quran = function () {
function Quran() {
_classCallCheck(this, Quran);
}
_createClass(Quran, [{
key: 'get',
// Helper method to get arabic verses from a chapter
value: function () {
var _ref = _asyncToGenerator(_regeneratorRuntime.mark(function _callee(chapterId) {
var verseId = arguments.length <= 1 || arguments[1] === undefined ? undefined : arguments[1];
var response, verses;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return this.select({ chapter: chapterId, verse: verseId });
case 2:
response = _context.sent;
// return arabic strings only (map from array)
verses = void 0;
if (!!response && response.length > 0) {
verses = response.map(function (x) {
return x.ar;
});
}
return _context.abrupt('return', verses);
case 6:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function get(_x, _x2) {
return _ref.apply(this, arguments);
}
return get;
}()
// Helper method to get information about chapters
// Note: If no chapterId is specified then this method returns information
// about all chapters.
}, {
key: 'chapters',
value: function () {
var _ref2 = _asyncToGenerator(_regeneratorRuntime.mark(function _callee2(chapterId) {
var query;
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
query = 'SELECT * FROM chapters ';
// sanitize inputs
if (!chapterId) {
_context2.next = 7;
break;
}
if (!(chapterId > 114)) {
_context2.next = 4;
break;
}
throw new Error('chapterId specified is out of bounds: ' + chapterId + '.');
case 4:
if (!isNaN(chapterId)) {
_context2.next = 6;
break;
}
throw new Error('Invalid chapterId: ' + chapterId);
case 6:
query += 'WHERE id=' + chapterId;
case 7:
_context2.next = 9;
return db.open(databaseFilePath);
case 9:
_context2.next = 11;
return db.all(query);
case 11:
return _context2.abrupt('return', _context2.sent);
case 12:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
function chapters(_x4) {
return _ref2.apply(this, arguments);
}
return chapters;
}()
// Helper method to get information about a juz
// Note: If no juzId is specified then this method returns information
// about all juz.
}, {
key: 'juz',
value: function () {
var _ref3 = _asyncToGenerator(_regeneratorRuntime.mark(function _callee3(juzId) {
var query;
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
query = 'SELECT * FROM juz ';
// sanitize inputs
if (!juzId) {
_context3.next = 7;
break;
}
if (!(juzId > 30)) {
_context3.next = 4;
break;
}
throw new Error('juzId specified is out of bounds: ' + juzId + '.');
case 4:
if (!isNaN(juzId)) {
_context3.next = 6;
break;
}
throw new Error('Invalid juzId: ' + juzId);
case 6:
query += 'WHERE id=' + juzId;
case 7:
_context3.next = 9;
return db.open(databaseFilePath);
case 9:
_context3.next = 11;
return db.all(query);
case 11:
return _context3.abrupt('return', _context3.sent);
case 12:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
function juz(_x5) {
return _ref3.apply(this, arguments);
}
return juz;
}()
// Helper method to do a free-form text search of the Quran
}, {
key: 'search',
value: function () {
var _ref4 = _asyncToGenerator(_regeneratorRuntime.mark(function _callee4(language, text) {
var query;
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
query = 'SELECT chapter, verse, ' + language + ' FROM ' + language + ('WHERE ' + language + ' LIKE "%' + text + '%";');
_context4.next = 3;
return db.open(databaseFilePath);
case 3:
_context4.next = 5;
return db.all(query);
case 5:
return _context4.abrupt('return', _context4.sent);
case 6:
case 'end':
return _context4.stop();
}
}
}, _callee4, this);
}));
function search(_x6, _x7) {
return _ref4.apply(this, arguments);
}
return search;
}()
// Full low level select method. Allows you to specify:
// 1. Filters: Any array to filter on, e.g. { verse: 2, chapter: 5 }
// 2. Options for offset and limit, e.g. { limit: 10, offset: 5 }
// 3. Translations: An array of translations to return, e.g. ['en', 'hi']
}, {
key: 'select',
value: function () {
var _ref5 = _asyncToGenerator(_regeneratorRuntime.mark(function _callee5(filters, options) {
var translations = arguments.length <= 2 || arguments[2] === undefined ? ['ar'] : arguments[2];
var query, params;
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
query = 'SELECT * FROM ar a ';
params = [];
// join translations from other tables, if any are requested
// beyond arabic
if (!(translations.length === 1 && translations[0] === 'ar')) {
translations.forEach(function (l) {
query += 'JOIN ' + l + ' USING(chapter, verse) ';
});
}
// add filters (where clauses)
if (!!filters) {
_Object$keys(filters).forEach(function (k) {
var f = filters[k];
if (!!f) {
if (util.isArray(f)) {
params.push('a.' + k + ' IN (' + f.join(',') + ')');
} else {
params.push('a.' + k + '=' + f);
}
}
});
query += 'WHERE ' + params.join(' AND ');
}
// apply sorting, offset and limit options
query += ' ORDER BY chapter, verse ';
if (!!options) {
['limit', 'offset'].forEach(function (x) {
if (options[x]) {
query += x + ' ' + options[x] + ' ';
}
});
}
_context5.next = 8;
return db.open(databaseFilePath);
case 8:
_context5.next = 10;
return db.all(query);
case 10:
return _context5.abrupt('return', _context5.sent);
case 11:
case 'end':
return _context5.stop();
}
}
}, _callee5, this);
}));
function select(_x8, _x9, _x10) {
return _ref5.apply(this, arguments);
}
return select;
}()
}]);
return Quran;
}();
return Quran;
}));
//# sourceMappingURL=index.umd.js.map