lemoncloud-engine-js
Version:
lemoncloud.io - Lemon Engine Modle of Node for Robust Micro-service based on DynamoDB + ElastiCache + Elasticsearch.
1 lines • 6.99 kB
JavaScript
var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};module.exports=function(e,r,t){r=r||"MMS";var n=["id","type","parent","name","group","refid","nick","stereo","message","description","image","source","target","state"],i=n.reduce(function(e,r){return(r=r||"").startsWith("desc")||e.push(r),e},[]),o=e.U,d=e.LEM;if(!o)throw new Error("$U is required!");if(!d)throw new Error("LEM is required!");var _=e.log,a=e.inf,u=e.err,c=o.NS(r),s=d(e,"_"+r,{ID_TYPE:"LemonMessagesSeq",ID_NEXT:1e3,FIELDS:n,DYNA_TABLE:"Messages",REDIS_PKEY:"CMMS",ES_INDEX:"messages-v1",ES_TYPE:"messages",ES_FIELDS:i,NS_NAME:r,ES_MASTER:1,CLONEABLE:!0,PARENT_IMUT:!1});if(!s)throw new Error(c+"$LEM is required!");function f(e){throw new Error("NOT_IMPLEMENTED - "+c+":"+JSON.stringify(e))}var E=t||{};E.$LEM=s,E.do_prepare=f,E.do_create=f,E.do_clone=f,E.do_update=f,E.do_increment=f,E.do_read=f,E.do_delete=f,E.do_destroy=f,E.do_search=f,E.on_records=f,E.do_notify=s.do_notify,E.do_subscribe=s.do_subscribe,E.do_initialize=f,E.do_terminate=f,E.do_test_self=f,e(r,E);function p(e,r,t){return s.do_prepare_chain(e,r,t)}function h(e){return s.do_finish_chain(e)}function m(e){var r=((""+e.type).trim()+":"+(""+e.name).trim()).toLowerCase();return"MD5"+o.md5(r)}E.calculate_refid=m;function l(e){var r=e._node||{},t=(e._id||r.id,r.refid),n=e.type||r.type||"",i=e.name||r.name||"",o=(n.trim()+":"+i.trim()).toLowerCase(),d=":"==o?"":m({type:n,name:i});if(d&&t!=d){if(a(c,">> refid := ",d," (",o,")"),r.id)return p(r.id,{refid:d},"update").then(s.do_update).then(h).then(function(){return e});e.refid=d}return e}return E.do_prepare=function(e,r){var t=e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e;return _(c,"do_prepare()... id=",t),p(e,r,"prepare").then(s.do_prepare).then(h)},E.do_create=function(e,r){var t=e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e;return t?(_(c,"do_create()... id=",t),p(e,r,"create").then(function(e){return e.type?e.name?e:Promise.reject(new Error("name is required!")):Promise.reject(new Error("type is required!"))}).then(l).then(s.do_create).then(h)):Promise.reject(new Error("id is required!"))},E.do_search_refid=function(e){var t=e.refid;return t?s.do_search(0,{refid:t}).then(function(e){var r=e.list||[];return 0<r.length?r[0]:Promise.reject(new Error("404 NOT FOUND - refid:"+t))}):Promise.reject(new Error("refid is required!"))},E.do_create_safe=function(e,r){var t=e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e;return t?Promise.reject(new Error("id is invalid")):(_(c,"do_create_safe()... id=",t),p(e,r,"create").then(function(e){return e.type?e.name?e:Promise.reject(new Error("name is required!")):Promise.reject(new Error("type is required!"))}).then(l).then(function(t){if((""+(t.name||"")).startsWith("#"))return s.do_prepare(0).then(function(e){return a(c,"! prepared-id =",e._id),t._id=e._id,t._prepared=1,t});var n=t.refid;return n?s.do_search(0,{refid:n}).then(function(e){var r=e.list||[];return r.length<1?s.do_prepare(0).then(function(e){return a(c,"! prepared-id =",e._id),t._id=e._id,t._prepared=1,t}):1!==r.length?(u(c,"TOO MANY RESULT BY REFID:"+n+" = ",r),Promise.reject(new Error("Invalid refid@1:"+n))):(t._id=r[0].id,t)}):Promise.reject(new Error("refid is invalid"))}).then(function(e){return e._id&&!e._prepared?s.do_update(e):s.do_create(e)}).then(function(e){return e.id=e._id,e}).then(h))},E.do_clone=function(e,r){var t=e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e;return t?(_(c,"do_clone()... id=",t),p(e,r,"clone").then(s.do_clone).then(l).then(h)):Promise.reject(new Error("id is required!"))},E.do_update=function(e,r){var t=e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e;return t?(_(c,"do_update()... id=",t),p(e,r,"update").then(function(e){return e.type?Promise.reject(new Error("type is imutable")):e}).then(s.do_update).then(l).then(h)):Promise.reject(new Error("id is required!"))},E.do_increment=function(e,r){var t=e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e;return t?(_(c,"do_increment()... id=",t),p(e,r,"increment").then(function(e){return e.type?e:Promise.reject(new Error("type is imutable"))}).then(s.do_increment).then(h)):Promise.reject(new Error("id is required!"))},E.do_read=function(e,r){return(e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e)?p(e,r,"read").then(s.do_read).then(h):Promise.reject(new Error("id is required!"))},E.do_delete=function(e,r){return(e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e)?p(e,r,"delete").then(s.do_delete).then(h):Promise.reject(new Error("id is required!"))},E.do_destroy=function(e,r){var t=e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e;return t?(_(c,"do_destroy()... id=",t),p(e,r,"destroy").then(s.do_destroy).then(h)):Promise.reject(new Error("id is required!"))},E.do_search=function(e,r){var t=e&&"object"===(void 0===e?"undefined":_typeof(e))?e._id:e;return _(c,"do_search()... id=",void 0===e?"undefined":_typeof(e),t),p(e,r,"search").then(s.do_search).then(h)},E.on_records=function(e){return _(c,"on_records()... records.len=",e&&e.records&&e.records.length||0),s.on_records(e||{})},E.do_initialize=function(e){return _(c+"do_initialize()... params=",o.json(e)),s.do_initialize(e||{})},E.do_terminate=function(e){return _(c+"do_terminate()... params=",o.json(e)),s.do_terminate(e||{})},E.do_test_self=function(e,r){return _(c+"do_test_self()... params=",o.json(r)),function(e,r){_(c,"- do_test_self()... that=",o.json(e));var t=o.promise(e);return t=t.then(function(e){_(c,"------------- STEP1 ");var t=Object.assign({_id:0,type:"TEST",name:"test-name",nick:"hello",description:"test description (invisible in ES)",meta:'{"hello":1}'},r||{});return void 0!==e.id&&(t._id=e.id),_(c,"! ID =",t._id),Promise.resolve(t).then(function(e){return _(c,"======== PREPARE"),e._id?e:E.do_prepare(0)}).then(function(e){_(c,"======== CREATE"),_(c,"> do_create =",o.json(e));var r=e._id;return E.do_create(r,t).then(function(e){_(c,"======== VALIDATE-CREATE"),_(c,">> do_create = ",o.json(e));var r=e._node||{},t=r.id,n=r.created_at&&r.updated_at&&!r.deleted_at&&r.id===t;if(n&&_(c,">> CREATE TEST RESULT: OK"),n||u(c,">> CREATE TEST RESULT: FAIL"),!t)throw new Error("invalid id after creation");return e})}).then(function(e){_(c,"======== UPDATE"),_(c,"> do_update =",o.json(e));var r=e._node||{},t=r.id,n={name:(r.name||"!")+"+"};return E.do_update(t,n).then(function(e){return _(c,"======== VALIDATE-UPDATE"),_(c,">> do_update = ",o.json(e)),e})}).catch(function(e){if(u(c,"ERR =",e),0<(e.message||"").indexOf("INVALID STATE.")){_(c,"======== DELETE");var n=t._id;return E.do_delete(n,t).then(function(e){_(c,">> do_delete = ",o.json(e));var r=e._node||{},t=r.created_at&&r.updated_at&&r.deleted_at&&r.id===n;return t&&_(c,">> DELETE TEST RESULT: OK"),t||u(c,">> DELETE TEST RESULT: FAIL"),e})}throw e})})}(e,r)},E};
;