UNPKG

babelute

Version:

Internal Domain Specific (Multi)Modeling javascript framework

1 lines 8.94 kB
(function(e,t){typeof exports==="object"&&typeof module!=="undefined"?module.exports=t():typeof define==="function"&&define.amd?define(t):e.Babelute=t()})(this,function(){"use strict";var e=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol==="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};var t=function(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}};var n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||false;r.configurable=true;if("value"in r)r.writable=true;Object.defineProperty(e,r.key,r)}}return function(t,n,r){if(n)e(t.prototype,n);if(r)e(t,r);return t}}();var r=function(e,t){if(typeof t!=="function"&&t!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof t)}e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:false,writable:true,configurable:true}});if(t)Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t};var i=function(e,t){if(!e){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return t&&(typeof t==="object"||typeof t==="function")?t:e};var o=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}else{return Array.from(e)}};var u=function e(n,r,i){t(this,e);this.lexicon=n;this.name=r;this.args=i};function a(e){var t=function t(){for(var n=arguments.length,r=Array(n),i=0;i<n;i++){r[i]=arguments[i]}e.apply(this,r)};t.prototype=Object.create(e.prototype);t.prototype.constructor=t;for(var n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++){r[i-1]=arguments[i]}r.forEach(function(e){for(var n in e){t.prototype[n]=e[n]}});return t}var l=function(){function e(){var n=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;t(this,e);this._lexems=n||[];this.__babelute__=true}n(e,[{key:"_append",value:function e(t,n,r){this._lexems.push(new u(t,n,r));return this}},{key:"_if",value:function e(t,n){var r=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;if(t)this._lexems=this._lexems.concat(n._lexems);else if(r)this._lexems=this._lexems.concat(r._lexems);return this}},{key:"_each",value:function e(t,n){var r=this;if(t)t.forEach(function(e,t){var i=n(e,t);r._lexems.push.apply(r._lexems,i._lexems)});return this}},{key:"_use",value:function e(t){}},{key:"_lexicon",value:function e(t){}},{key:"_transform",value:function e(t){return t(this)}},{key:"_translateLexems",value:function t(n){return this._transform(function(t){var r=new e;t._lexems.forEach(function(e){return r._use(n(e))});return r})}},{key:"_translateLexemsThrough",value:function e(t){var n=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false}}]);return e}();l.extends=a;function s(e){return JSON.parse(e,function(e,t){if(t&&t.__babelute__)return new l(t._lexems.map(function(e){return new u(e.lexicon,e.name,e.args)}));return t})}var c=function(e){r(o,e);function o(e){t(this,o);var n=i(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e));n.__first_level_babelute__=true;return n}n(o,null,[{key:"getFirstLevelMethod",value:function e(t,n){return function(){for(var e=arguments.length,r=Array(e),i=0;i<e;i++){r[i]=arguments[i]}this._lexems.push(new u(t,n,r));return this}}}]);return o}(l);var f=function e(){t(this,e)};f.extends=a;function h(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var n=e.Initializer=t?f.extends(t):f;e.initializer=new n;e.initializer._empty=function(){return new e};e.initializer.Class=e;Object.keys(e).forEach(function(e){return v(n,e)});return e.initializer}function v(e,t){e.prototype[t]=function(){var e;return(e=new this.Class)[t].apply(e,arguments)}}["_use","_each","_if","_append","_lexicon"].forEach(function(e){v(f,e)});var p={};var m=function(){function r(e,n){var i=this;t(this,r);this.parent=n;n=n||{};this.name=e;this.Atomic=d(n.Atomic||l);this.FirstLevel=d(n.FirstLevel||c);this.SecondLevel=l.extends(n.SecondLevel||l);this.secondLevel=new this.SecondLevel;if(n.Atomic)Object.keys(n.Atomic.initializer).forEach(function(e){v(i.Atomic.Initializer,e);v(i.FirstLevel.Initializer,e)})}n(r,[{key:"addAtoms",value:function e(t){var n=this;t.forEach(function(e){return y(n,e)});return this}},{key:"addCompounds",value:function e(t){var n=this;var r=t(this.Atomic.initializer,false);for(var i in r){this.Atomic.prototype[i]=r[i]}var o=t(this.FirstLevel.initializer,true);for(var u in o){this.SecondLevel.prototype[u]=o[u]}Object.keys(r).forEach(function(e){n.FirstLevel.prototype[e]=c.getFirstLevelMethod(n.name,e);v(n.Atomic.Initializer,e);v(n.FirstLevel.Initializer,e)});return this}},{key:"addAliases",value:function t(n){var r=this;var i=typeof n==="undefined"?"undefined":e(n);var o=i==="function"?n():n;Object.keys(o).forEach(function(e){r.Atomic.prototype[e]=r.FirstLevel.prototype[e]=r.SecondLevel.prototype[e]=o[e];v(r.Atomic.Initializer,e);v(r.FirstLevel.Initializer,e)});return this}},{key:"use",value:function e(t,n,r,i){var o=i?this.FirstLevel.instance:this.Atomic.instance;if(!o[n])throw new Error("Babelute ("+this.name+") : method not found : "+n);o[n].apply(t,r)}},{key:"initializer",value:function e(t){return t?this.FirstLevel.initializer:this.Atomic.initializer}},{key:"createDialect",value:function e(t){return new r(t,this)}}]);return r}();function y(e,t){e.Atomic.prototype[t]=e.FirstLevel.prototype[t]=e.SecondLevel.prototype[t]=c.getFirstLevelMethod(e.name,t);v(e.Atomic.Initializer,t);v(e.FirstLevel.Initializer,t)}function d(e){var t=l.extends(e);h(t,e.Initializer);t.instance=new t;return t}function _(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;return new m(e,t)}function g(e){var t=p[e];if(!t)throw new Error("lexicon not found : "+e);return t}function x(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;p[t||e.name]=e}l.prototype._lexicon=function(e){return new(g(e).Atomic)(this._lexems)};c.prototype._lexicon=function(e){return new(g(e).FirstLevel)(this._lexems)};l.prototype._translateLexemsThrough=function(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var n=e instanceof m?null:e;return this._translateLexems(function(r){if(n)e=n[r.lexicon];if(!e)return null;var i=b(r.args,e,t);var u=new(t?e.FirstLevel:e.Atomic);return u[r.name]&&u[r.name].apply(u,o(i))})};function b(e,t,n){var r=[];for(var i=0,o=e.length;i<o;++i){if(e[i]&&e[i].__babelute__)r.push(e[i]._translateLexemsThrough(t,n));else r.push(e[i])}return r}l.prototype._use=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++){n[r-1]=arguments[r]}return e?L(this,e,n,false):this};c.prototype._use=function(e){return e?L(this,e,[].slice.call(arguments,1),true):this};function L(e,t,n,r){if(typeof t==="string"){var i=t.split(":");g(i[0]).use(e,i[1],n,r)}else e._lexems=e._lexems.concat(t._lexems);return e}function w(e,t){if(e)return new(g(e)[t?"FirstLevel":"Atomic"]);else if(t)return new c;return new l}function A(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;t=t||g(e.lexicon);return t.secondLevel[e.name].apply(new t.FirstLevel,e.args)}function k(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;t=t||g(e.lexicon);return t.Atomic.instance[e.name].apply(new t.Atomic,e.args)}function z(e,t){if(!t)return g(e).Atomic.initializer;return g(e).FirstLevel.initializer}var F=function(){function e(n,r){t(this,e);this._targets=n;if(r)this.addPragmas(r)}n(e,[{key:"addPragmas",value:function e(t){for(var n in t){this[n]=t[n]}}},{key:"$output",value:function e(){throw new Error("pragmatics.$output should be implemented in subclasses")}}]);return e}();function O(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return new F(e,t)}var E=function(e){r(o,e);function o(e,n){t(this,o);return i(this,(o.__proto__||Object.getPrototypeOf(o)).call(this,e,n))}n(o,[{key:"each",value:function e(t,n,r){var i=n[0],o=n[1];if(i&&i.length)for(var u=0,a=i.length,l,s;u<a;++u){l=i[u];s=o(l,u);if(!s)throw new Error(".each function should return a sentence.");this.$output(t,s,r)}}},{key:"if",value:function e(t,n,r){if(n[0])this.$output(t,n[1],r);else if(n[2])this.$output(t,n[2],r)}},{key:"$output",value:function e(t,n){var r=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;for(var i=0,o,u=n._lexems.length;i<u;++i){o=n._lexems[i];if(this._targets[o.lexicon]&&this[o.name])this[o.name](t,o.args,r)}return t}}]);return o}(F);function S(e){var t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;return new E(e,t)}var j={createLexicon:_,createPragmatics:O,createFacadePragmatics:S,init:w,initializer:z,getLexicon:g,registerLexicon:x,developOneLevel:A,developToAtoms:k,fromJSON:s,Babelute:l,Lexem:u,FirstLevel:c,Pragmatics:F,FacadePragmatics:E,Lexicon:m,lexicons:p};return j});