lemon-engine
Version:
Lemon Engine Module to Synchronize Node over DynamoDB + ElastiCache + Elasticsearch by [lemoncloud](https://lemoncloud.io)
344 lines • 15.2 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var http_proxy_1 = __importDefault(require("./http-proxy"));
var maker = function (_$, name, options) {
name = name || 'DS';
var $U = _$.U; // re-use global instance (utils).
var $_ = _$._; // re-use global instance (_ lodash).
if (!$U)
throw new Error('$U is required!');
if (!$_)
throw new Error('$_ is required!');
var NS = $U.NS(name, 'magenta'); // NAMESPACE TO BE PRINTED.
//! load common functions
var _log = _$.log;
var _inf = _$.inf;
var _err = _$.err;
/** ****************************************************************************************************************
* Internal Proxy Function
** ****************************************************************************************************************/
var ENDPOINT = $U.env('DS_ENDPOINT', typeof options == 'string' ? options : '');
// const httpProxy = require('./http-proxy');
var $proxy = function () {
if (!ENDPOINT)
throw new Error('env:DS_ENDPOINT is required!');
var SVC = 'X' + name;
var $SVC = _$(SVC, null);
return $SVC ? $SVC : http_proxy_1.default(_$, SVC, ENDPOINT); // re-use proxy by name
};
/** ****************************************************************************************************************
* Main Implementation.
** ****************************************************************************************************************/
var thiz = new (/** @class */ (function () {
function class_1() {
this.name = function () { return "dynamo-proxy:" + name; };
/**
* get the current endpoint address.
*/
this.endpoint = function () { return ENDPOINT; };
}
/**
* Create Table by table-name
* see: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html
*]
* @param table
* @param id_name
* @param id_type default 'Number'
* @returns {Promise.<*>}
*/
class_1.prototype.do_create_table = function (table, id_name, id_type) {
if (!table)
return Promise.reject(new Error(NS + 'parameter:table is required'));
var $param = { idName: id_name, idType: id_type };
return $proxy()
.do_get(table, '0', 'create-table', $param)
.then(function (_) { return _.result; });
};
/**
* Delete the target table by Name.
*
* @param table
* @returns {*}
*/
class_1.prototype.do_delete_table = function (table) {
if (!table)
return Promise.reject(new Error(NS + 'parameter:table is required'));
var $param = undefined;
return $proxy()
.do_get(table, '0', 'delete-table', $param)
.then(function (_) { return _.result; });
};
/**
* List Tables
*
* @param table table
* @param limit default 100
* @returns {Promise.<*>}
*/
class_1.prototype.do_list_tables = function (table, limit) {
return __awaiter(this, void 0, void 0, function () {
var $param;
return __generator(this, function (_a) {
// if (!table) return Promise.reject(new Error(NS + 'parameter:table is required'));
table = table || '#'; // prevent ''.
$param = { limit: limit };
return [2 /*return*/, $proxy()
.do_get(table, '0', 'list-table', $param)
.then(function (_) { return _.result; })];
});
});
};
/**
* read stream buffer.
*
* @param {*} param
*/
class_1.prototype.do_read_stream = function (param) {
var $param = param || {};
var table = $param.table;
delete $param.table;
return $proxy().do_get(table, '0', 'stream', $param);
// .then((_: any) => _.result); //WARN! pass the original body.
};
/**
* Create Item in Table
*
* example:
* do_create_item('PetTable', 1, {name:'cat'})
* do_create_item('PetTable', {id: 1}, {name:'cat'})
*
* @param table table-name.
* @param id id of item.
* @param data data as object.
*/
class_1.prototype.do_create_item = function (table, id, data) {
if (!table)
return Promise.reject(new Error(NS + 'parameter:table is required'));
if (!id)
return Promise.reject(new Error(NS + 'parameter:id is required'));
if (!data)
return Promise.reject(new Error(NS + 'parameter:data is required'));
if (typeof data !== 'object')
return Promise.reject(new Error(NS + 'parameter:data must be object'));
//! additional parameters.
var $param = {};
//! decode idName, idType.
if (id && typeof id === 'object') {
var $id = id;
var idType = $id.idType;
delete $id.idType;
var keys = Object.keys($id);
if (keys.length !== 1)
return Promise.reject(new Error(NS + ':id is un-expected keys.'));
var idName = keys.pop() || '';
id = $id[idName];
// _log(NS,'> idName =', idName,' id = ', id);
$param.idName = idName;
$param.idType = idType || (typeof id === 'number' ? 'Number' : 'String');
}
return $proxy()
.do_post(table, id, undefined, $param, data)
.then(function (_) { return _.result; });
};
/**
* Get Item from Table
*
* @param table
* @param id
* @returns {Promise.<*>}
*/
class_1.prototype.do_get_item = function (table, id) {
if (!table)
return Promise.reject(new Error(NS + 'parameter:table is required'));
if (!id)
return Promise.reject(new Error(NS + 'parameter:id is required'));
//! additional parameters.
var $param = {};
//! decode idName, idType.
if (id && typeof id === 'object') {
var $id = id;
var idType = $id.idType;
delete $id.idType;
var keys = Object.keys($id);
if (keys.length !== 1)
return Promise.reject(new Error(NS + ':id is un-expected keys.'));
var idName = keys.pop() || '';
id = $id[idName];
// _log(NS,'> idName =', idName,' id = ', id);
$param.idName = idName;
$param.idType = idType || (typeof id === 'number' ? 'Number' : 'String');
}
return $proxy()
.do_get(table, id, undefined, $param)
.then(function (_) { return _.result; });
};
/**
* Delete Item from Table
*
* @param table
* @param id
* @returns {Promise.<*>}
*/
class_1.prototype.do_delete_item = function (table, id) {
if (!table)
return Promise.reject(new Error(NS + 'parameter:table is required'));
if (!id)
return Promise.reject(new Error(NS + 'parameter:id is required'));
//! additional parameters.
var $param = {};
//! decode idName, idType.
if (id && typeof id === 'object') {
var $id = id;
var idType = $id.idType;
delete $id.idType;
var keys = Object.keys($id);
if (keys.length !== 1)
return Promise.reject(new Error(NS + ':id is un-expected keys.'));
var idName = keys.pop() || '';
id = $id[idName];
// _log(NS,'> idName =', idName,' id = ', id);
$param.idName = idName;
$param.idType = idType || (typeof id === 'number' ? 'Number' : 'String');
}
return $proxy()
.do_delete(table, id, undefined, $param)
.then(function (_) { return _.result; });
};
/**
* Update Item in Table
*
* @param table table-name.
* @param id id of item.
* @param data data as object.
* @param incset additional increment set.
* @returns {Promise.<*>}
*/
class_1.prototype.do_update_item = function (table, id, data, incset) {
if (!table)
return Promise.reject(new Error(NS + 'parameter:table is required'));
if (!id)
return Promise.reject(new Error(NS + 'parameter:id is required'));
if (!data)
return Promise.reject(new Error(NS + 'parameter:data is required'));
if (typeof data !== 'object')
return Promise.reject(new Error(NS + 'parameter:data must be object'));
//! additional parameters.
var $param = {};
//! decode idName, idType.
if (id && typeof id === 'object') {
var $id = id;
var idType = $id.idType;
delete $id.idType;
var keys = Object.keys($id);
if (keys.length !== 1)
return Promise.reject(new Error(NS + ':id is un-expected keys.'));
var idName = keys.pop() || '';
id = $id[idName];
// _log(NS,'> idName =', idName,' id = ', id);
$param.idName = idName;
$param.idType = idType || (typeof id === 'number' ? 'Number' : 'String');
}
var $body = data || {};
if (incset)
$body.$I = incset;
return $proxy()
.do_put(table, id, undefined, $param, $body)
.then(function (_) { return _.result; });
};
/**
* Use Increment (+ operator) operation.
*
* @param table table-name.
* @param id id of item.
* @param data data as object.
* @param incset additional increment set.
* @returns {Promise.<*>}
*/
class_1.prototype.do_increment_item = function (table, id, data, incset) {
if (!table)
return Promise.reject(new Error(NS + 'parameter:table is required'));
if (!id)
return Promise.reject(new Error(NS + 'parameter:id is required'));
if (!data)
return Promise.reject(new Error(NS + 'parameter:data is required'));
if (typeof data !== 'object')
return Promise.reject(new Error(NS + 'parameter:data must be object'));
//! additional parameters.
var $param = {};
//! decode idName, idType.
if (id && typeof id === 'object') {
var $id = id;
var idType = $id.idType;
delete $id.idType;
var keys = Object.keys($id);
if (keys.length !== 1)
return Promise.reject(new Error(NS + ':id is un-expected keys.'));
var idName = keys.pop() || '';
id = $id[idName];
// _log(NS,'> idName =', idName,' id = ', id);
$param.idName = idName;
$param.idType = idType || (typeof id === 'number' ? 'Number' : 'String');
}
var $body = data || {};
if (incset)
$body.$I = incset;
return $proxy()
.do_put(table, id, 'increment', $param, $body)
.then(function (_) { return _.result; });
};
/**
* Self Test Functions.
*
* @param param
*/
class_1.prototype.do_test_self = function (param) {
var $param = param || {};
return $proxy()
.do_get('#', '0', 'test-self', $param)
.then(function (_) { return _.result; });
};
return class_1;
}()))();
//! create & register service.
return _$(name, thiz);
};
exports.default = maker;
//# sourceMappingURL=dynamo-proxy.js.map
;