lemon-engine
Version:
Lemon Engine Module to Synchronize Node over DynamoDB + ElastiCache + Elasticsearch by [lemoncloud](https://lemoncloud.io)
224 lines • 10 kB
JavaScript
"use strict";
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var utilities_1 = require("./core/utilities");
var _ = __importStar(require("lodash"));
//! load common services....
var lemon_engine_model_1 = __importDefault(require("./core/lemon-engine-model"));
var http_proxy_1 = __importDefault(require("./plugins/http-proxy"));
var web_proxy_1 = __importDefault(require("./plugins/web-proxy"));
var mysql_proxy_1 = __importDefault(require("./plugins/mysql-proxy"));
var dynamo_proxy_1 = __importDefault(require("./plugins/dynamo-proxy"));
var redis_proxy_1 = __importDefault(require("./plugins/redis-proxy"));
var elastic6_proxy_1 = __importDefault(require("./plugins/elastic6-proxy"));
var s3_proxy_1 = __importDefault(require("./plugins/s3-proxy"));
var sqs_proxy_1 = __importDefault(require("./plugins/sqs-proxy"));
var sns_proxy_1 = __importDefault(require("./plugins/sns-proxy"));
var ses_proxy_1 = __importDefault(require("./plugins/ses-proxy"));
var cognito_proxy_1 = __importDefault(require("./plugins/cognito-proxy"));
var lambda_proxy_1 = __importDefault(require("./plugins/lambda-proxy"));
var protocol_proxy_1 = __importDefault(require("./plugins/protocol-proxy"));
var cron_proxy_1 = __importDefault(require("./plugins/cron-proxy"));
var agw_proxy_1 = __importDefault(require("./plugins/agw-proxy"));
/**
* initialize as EngineInterface
*
* ```ts
* import engine from 'lemon-engine';
* const $engine = engine(global, { env: process.env });
* ```
*
* @param scope main scope like global, browser, ...
* @param options configuration.
*/
function initiate(scope, options) {
if (scope === void 0) { scope = null; }
if (options === void 0) { options = {}; }
scope = scope || {};
//! load configuration.
var ROOT_NAME = options.name || 'lemon';
var STAGE = _environ('STAGE', '');
var LS = (_environ('LS', '0') === '1'); // LOG SILENT (NO PRINT LOG)
var TS = (_environ('TS', '1') === '1'); // PRINT TIME-STAMP.
var LC = (_environ('LC', STAGE === 'local' || STAGE === 'express' ? '1' : '') === '1'); // COLORIZE LOG
// console.log('!!!!!!! LS,TS,LC =', LS, TS, LC);
var LEVEL_LOG = '-';
var LEVEL_INF = 'I';
var LEVEL_ERR = 'E';
var RED = "\x1b[31m";
var BLUE = "\x1b[32m";
var YELLOW = "\x1b[33m";
var RESET = "\x1b[0m";
function _environ(name, defVal) {
// as default, load from proces.env.
var env = options.env || (process && process.env) || {};
var val = env[name];
// throw Error if value is not set.
if (defVal && defVal instanceof Error && val === undefined)
throw defVal;
// returns default.
return val === undefined ? defVal : val;
}
// timestamp like 2016-12-08 13:30:44
function _ts(date, timeZone) {
return utilities_1.Utilities.timestamp(date, timeZone);
}
//! common function for logging.
var silent = function () { };
var $console = {
thiz: console,
log: LS ? silent : console.log,
error: LS ? silent : console.error,
auto_ts: TS,
auto_color: LC
};
var _log = function () {
var arg = [];
for (var _i = 0; _i < arguments.length; _i++) {
arg[_i] = arguments[_i];
}
var args = !Array.isArray(arguments) && Array.prototype.slice.call(arguments) || arguments;
if ($console.auto_color)
args.unshift(RESET), $console.auto_ts && args.unshift(_ts(), LEVEL_LOG) || args.unshift(LEVEL_LOG), args.unshift(BLUE);
else
$console.auto_ts && args.unshift(_ts(), LEVEL_LOG);
return $console.log.apply($console.thiz, args);
};
var _inf = function () {
var arg = [];
for (var _i = 0; _i < arguments.length; _i++) {
arg[_i] = arguments[_i];
}
var args = !Array.isArray(arguments) && Array.prototype.slice.call(arguments) || arguments;
if ($console.auto_color)
args.unshift(""), args.push(RESET), $console.auto_ts && args.unshift(_ts(), LEVEL_INF) || args.unshift(LEVEL_INF), args.unshift(YELLOW);
else
$console.auto_ts && args.unshift(_ts(), LEVEL_INF);
return $console.log.apply($console.thiz, args);
};
var _err = function () {
var arg = [];
for (var _i = 0; _i < arguments.length; _i++) {
arg[_i] = arguments[_i];
}
var args = !Array.isArray(arguments) && Array.prototype.slice.call(arguments) || arguments;
if ($console.auto_color)
args.unshift(""), args.push(RESET), $console.auto_ts && args.unshift(_ts(), LEVEL_ERR) || args.unshift(LEVEL_ERR), args.unshift(RED);
else
$console.auto_ts && args.unshift(_ts(), LEVEL_ERR);
return $console.error.apply($console.thiz, args);
};
var _extend = function (opt, opts) {
for (var k in opts) {
var v = opts[k];
if (v === undefined)
delete opt[k];
else
opt[k] = v;
}
return opt;
};
//! create root instance to manage global objects.
var $engineBuilder = function () {
//! engine base function.
var $engineBase = function (name, service) {
if (!name)
return;
var thiz = $engine;
var org = typeof thiz.$plugins[name] !== 'undefined' ? thiz.$plugins[name] : undefined;
if (!service)
return org;
if (org === undefined) {
_log("INFO! service[" + name + "] registered");
thiz.$plugins[name] = service;
return service;
}
else if (true) {
//! ignore if duplicated >2.2.3
// _log(`WARN! service[${name}] duplicated!`);
return org;
}
else {
//! extends options.
_inf("WARN! service[" + name + "] extended.");
org = _extend(org, service);
thiz.$plugins[name] = org;
return org;
}
};
//! avoid type check error.
var $engine = $engineBase;
//! register into _$(global instance manager).
$engine.STAGE = STAGE;
$engine.id = ROOT_NAME;
$engine.log = _log;
$engine.inf = _inf;
$engine.err = _err;
$engine.extend = _extend;
$engine.ts = _ts;
$engine.dt = utilities_1.Utilities.datetime;
$engine._ = _;
$engine.environ = _environ;
$engine.$console = $console; // '$' means object. (change this in order to override log/error message handler)
$engine.$plugins = {};
$engine.toString = function () { return "" + ROOT_NAME; };
var $U = new utilities_1.Utilities($engine);
$engine.U = $U;
//! make http-proxy.
$engine.createHttpProxy = function (name, options) {
return http_proxy_1.default($engine, name, options);
};
//! make web-proxy
$engine.createWebProxy = function (name, options) {
return web_proxy_1.default($engine, name, options);
};
//! model builder.
$engine.createModel = function (name, option) {
return lemon_engine_model_1.default($engine, name, option);
};
//! start initialization only if making $engine.
STAGE && _inf('#STAGE =', STAGE);
//! use base BACKBONE endpoint.
var BACKBONE = $engine.environ('BACKBONE_API', $engine.environ('BACKBONE-API', ''));
BACKBONE && _inf('#BACKBONE =', BACKBONE);
var ep = function (name) { return (BACKBONE && BACKBONE + "/" + name) || ''; };
//! load common services....
mysql_proxy_1.default($engine, 'MS', ep('mysql')); // load service, and register as 'MS'
dynamo_proxy_1.default($engine, 'DS', ep('dynamo')); // load service, and register as 'DS'
redis_proxy_1.default($engine, 'RS', ep('redis')); // load service, and register as 'RS'
elastic6_proxy_1.default($engine, 'ES6', ep('elastic6')); // load service, and register as 'ES6'
s3_proxy_1.default($engine, 'S3', ep('s3')); // load service, and register as 'S3'
sqs_proxy_1.default($engine, 'SS', ep('sqs')); // load service, and register as 'SS'
sns_proxy_1.default($engine, 'SN', ep('sns')); // load service, and register as 'SN'
ses_proxy_1.default($engine, 'SE', ep('ses')); // load service, and register as 'SE'
web_proxy_1.default($engine, 'WS', ep('web')); // load service, and register as 'WS'
cognito_proxy_1.default($engine, 'CS', ep('cognito')); // load service, and register as 'CS'
lambda_proxy_1.default($engine, 'LS', ep('lambda')); // load service, and register as 'LS'
protocol_proxy_1.default($engine, 'PR', ep('protocol')); // load service, and register as 'PR'
cron_proxy_1.default($engine, 'CR', ep('cron')); // load service, and register as 'CR'
agw_proxy_1.default($engine, 'AG', ep('agw')); // load service, and register as 'AG'
_inf("! engine[" + ROOT_NAME + "] service ready !");
//! returns.
return $engine;
};
//! reuse via scope or build new.
var $engine = scope._$ || $engineBuilder();
//! register as global instances.
scope._log = scope._log || _log;
scope._inf = scope._inf || _inf;
scope._err = scope._err || _err;
scope._$ = $engine;
//! returns finally.
return $engine;
}
exports.default = initiate;
//# sourceMappingURL=index.js.map