solone
Version:
A component file routing system
11 lines • 4.05 kB
JavaScript
var $jscomp$destructuring$var0=require("./stream-appender.js"),preappend=$jscomp$destructuring$var0.preappend,combine=$jscomp$destructuring$var0.combine,$jscomp$destructuring$var1=require("fs"),stat=$jscomp$destructuring$var1.stat,createReadStream=$jscomp$destructuring$var1.createReadStream,parseUrl=require("url").parse,parsePath=require("path").parse,base=process.cwd().replace(/\\/g,"/");
Promise.any||(Promise.any=function(b){var a=0,d=[];b=b.map(function(b,c,f){return b.catch(function(b){d[d.length]=b;return new Promise(function(b,e){if(++a===f)return e(d)})})});return Promise.race(b)});function exists(b,a,d){return new Promise(function(e,c){stat(d?""+base+b+"/components/"+a+(a?"/":"")+d:a,function(b,g){if(b||d&&!g.isDirectory())return c(b);e(a)})})}
function streamDevJs(b,a){return new Promise(function(d,e){var c=createReadStream(b+"/"+a+".js");c.on("error",e);c.on("open",function(){return d(c.pipe(preappend('__KaleoiExtensions__.components["'+a+'"] = (function(){\r\n')))})})}
function streamDevFile(b,a,d){return new Promise(function(e,c){var f=createReadStream(b+"/"+a+"."+d);f.on("error",c);f.on("open",function(){return e(f.pipe(preappend("\r\n"+a+".prototype.__extensions"+d.toUpperCase()+'__ = "','";\r\n',function(b){return b.replace(/[\r\n]/g,"")})))})})}
function createDevStream(b,a){return Promise.all([streamDevJs(b,a),streamDevFile(b,a,"html"),streamDevFile(b,a,"css")]).then(function(b){return combine(b).pipe(preappend(null,"\r\nreturn "+a+";\r\n}());"))}).catch(function(){return Error("Failed to fetch the dev files for "+a+" inside "+b)})}
function createStream(b,a,d,e){return new Promise(function(c,f){var g=createReadStream(b+"/"+d+"/"+a+"."+(e?"js":"min.js"));g.on("error",f);g.on("open",function(){return c(g.pipe(preappend('__KaleoiExtensions__.components["'+a+'"]'+(e?" = (function(){\r\n":"=(function(){"),e?"\r\nreturn"+a+";\r\n}());":"return"+a+";}());")))})})}
var Solone=function(){this.designPatterns=["atoms","molecules","organisms","templates","pages"];this.useDesignPatterns=!0;this.prefix="";this.environments=["dev","prod"];this.env="dev";this.debug=!0;this.decoder=decodeURIComponent;this.config={};this.authorize=function(){return Promise.resolve()};this.debug=this.disabled=!1};Solone.prototype.exists=function(b,a){var d=this;return a?Promise.any(this.designPatterns.map(function(a){return exists(d.prefix,a,b)})):exists(this.prefix,"",b)};
Solone.prototype.fetch=function(b,a,d,e){var c=this;return this.exists(b,e).then(function(e){return createStream(""+base+c.prefix+"/components/"+e+(e?"/":"")+b,b,a,d)})};Solone.prototype.fetchDev=function(b,a){var d=this;return this.exists(b,a).then(function(a){return createDevStream(""+base+d.prefix+"/components/"+a+(a?"/":"")+b,b)})};
Solone.prototype.fetchConfigs=function(){var b=this,a=""+base+this.prefix+"/node_modules/kaleoi/config.js",d=""+base+this.prefix+"/kaleoi.config.js";return exists(a).then(function(){b.config=require(a);Object.keys(b.config).forEach(function(a){return b[a]=b.config[a]})}).then(exists(d)).then(function(){var a=require(d);Object.keys(a).forEach(function(c){-1===["decoder","auth"].indexOf(c)&&"function"===typeof a[c]&&(a[c]=a[c]());switch(c){case "environment":-1===a[c].indexOf("dev")&&a[c].push("dev"),
-1===a[c].indexOf("prod")&&a[c].push("prod")}b.config[c]=a[c];b[c]=a[c]})})};function pointer(b,a){return{get:function(){return b[a]},set:function(d){b[a]=d},configurable:!0,enumerable:!0}}function bind(b,a){var d=b.bind(a);Object.keys(a).forEach(function(b){Object.defineProperty(d,b,pointer(a,b))});return d}
function init(b,a,d){var e=this,c=parseUrl(b.url,!0),f=parsePath(c.pathname),g=f.name,h=c.query.env&&-1!==this.environments.indexOf(c.query.env)?c.query.env:this.env,k=!!c.query.debug||this.debug,l="boolean"===typeof c.query.useDesignPatterns?c.query.useDesignPatterns:this.useDesignPatterns;if(f.ext)return d();this.authorize(g,c.query,b.headers).then(function(){return e["dev"===h?"fetchDev":"fetch"](g,h,k,l)}).then(function(b){return b.pipe(a)}).catch(d)}module.exports=bind(init,new Solone);