roku-deploy
Advanced tools
Comparing version 0.1.12 to 0.2.0-beta1
@@ -0,1 +1,2 @@ | ||
/* eslint-disable */ | ||
var jumpToCode = (function init () { | ||
@@ -2,0 +3,0 @@ // Classes of code we would like to highlight |
@@ -0,1 +1,2 @@ | ||
/* eslint-disable */ | ||
window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); |
@@ -0,1 +1,2 @@ | ||
/* eslint-disable */ | ||
var addSorting = (function () { | ||
@@ -2,0 +3,0 @@ "use strict"; |
@@ -45,3 +45,3 @@ export declare var __request: any; | ||
/** | ||
* A full path to the folder where the zip package sould be placed | ||
* A full path to the folder where the zip package should be placed | ||
* @default "./out" | ||
@@ -61,3 +61,5 @@ */ | ||
/** | ||
* An array of file paths or globs | ||
* An array of source file paths, source file globs, or {src,dest} objects indicating | ||
* where the source files are and where they should be placed | ||
* in the output directory | ||
* @default [ | ||
@@ -70,3 +72,6 @@ "source/**\/*.*", | ||
*/ | ||
files?: string[]; | ||
files?: (string | { | ||
src: string; | ||
dest: string; | ||
})[]; | ||
/** | ||
@@ -85,3 +90,3 @@ * Set this to true prevent the staging folder from being deleted after creating the package | ||
/** | ||
* The username for the roku box. This will almost always be 'rokudev', but allow to be passed in | ||
* The username for the roku box. This will always be 'rokudev', but allows to be overridden | ||
* just in case roku adds support for custom usernames in the future | ||
@@ -88,0 +93,0 @@ * @default "rokudev" |
@@ -53,5 +53,5 @@ "use strict"; | ||
return __awaiter(this, void 0, void 0, function () { | ||
var i, stagingFolderPath; | ||
return __generator(this, function (_a) { | ||
switch (_a.label) { | ||
var files, _i, _a, fileEntry, entry, _b, _c, fileEntry, stagingFolderPath; | ||
return __generator(this, function (_d) { | ||
switch (_d.label) { | ||
case 0: | ||
@@ -61,8 +61,23 @@ options = getOptions(options); | ||
options.rootDir = options.rootDir; | ||
options.files = options.files; | ||
//append the rootDir to every glob | ||
for (i = 0; i < options.files.length; i++) { | ||
options.files[i] = path.join(options.rootDir, options.files[i]); | ||
options.outDir = options.outDir; | ||
files = []; | ||
//standardize the files object | ||
for (_i = 0, _a = options.files; _i < _a.length; _i++) { | ||
fileEntry = _a[_i]; | ||
entry = fileEntry; | ||
if (typeof fileEntry === 'string') { | ||
entry = { src: fileEntry }; | ||
} | ||
if (!entry.dest) { | ||
entry.dest = ''; | ||
} | ||
files.push(entry); | ||
} | ||
options.outDir = options.outDir; | ||
//append the rootDir to every relative glob and string file entry | ||
for (_b = 0, _c = files; _b < _c.length; _b++) { | ||
fileEntry = _c[_b]; | ||
if (path.isAbsolute(fileEntry.src) === false) { | ||
fileEntry.src = path.join(options.rootDir, fileEntry.src); | ||
} | ||
} | ||
stagingFolderPath = path.join(options.outDir, '.roku-deploy-staging'); | ||
@@ -74,3 +89,3 @@ stagingFolderPath = path.resolve(stagingFolderPath); | ||
//clean the staging directory | ||
_a.sent(); | ||
_d.sent(); | ||
//make sure the staging folder exists | ||
@@ -80,6 +95,6 @@ return [4 /*yield*/, fsExtra.ensureDir(stagingFolderPath)]; | ||
//make sure the staging folder exists | ||
_a.sent(); | ||
return [4 /*yield*/, copyToStaging(options.files, stagingFolderPath)]; | ||
_d.sent(); | ||
return [4 /*yield*/, copyToStaging(files, stagingFolderPath)]; | ||
case 3: | ||
_a.sent(); | ||
_d.sent(); | ||
return [2 /*return*/, stagingFolderPath]; | ||
@@ -155,5 +170,5 @@ } | ||
*/ | ||
function copyToStaging(fileGlobs, stagingPath) { | ||
function copyToStaging(files, stagingPath) { | ||
return __awaiter(this, void 0, void 0, function () { | ||
var filePaths, globPromises, _i, fileGlobs_1, fileGlob, filePathArrays, _a, filePathArrays_1, filePathArray, manifestPath, _b, filePaths_1, filePath, manifestParentPath, copyPromises; | ||
var globPromises, filePathObjects, fileObjects, _i, filePathObjects_1, filePathObject, _a, fileObjects_1, fileObject, manifestPath, _b, fileObjects_2, fileObject, manifestParentPath, copyPromises; | ||
return __generator(this, function (_c) { | ||
@@ -163,28 +178,39 @@ switch (_c.label) { | ||
stagingPath = path.normalize(stagingPath); | ||
filePaths = []; | ||
globPromises = []; | ||
for (_i = 0, fileGlobs_1 = fileGlobs; _i < fileGlobs_1.length; _i++) { | ||
fileGlob = fileGlobs_1[_i]; | ||
globPromises.push(Q.nfcall(glob, fileGlob)); | ||
} | ||
files.forEach(function (file) { | ||
var promise = Q.nfcall(glob, file.src).then(function (filePathArray) { | ||
var result = []; | ||
//if found more than one file, then the dest must be empty string or end in a slash | ||
if (filePathArray.length > 1 && !(file.dest === '' || file.dest.endsWith('/') || file.dest.endsWith('\\'))) { | ||
throw new Error("Files entry matched multiple files, so dest must end in a slash to indicate that it is a folder " + JSON.stringify(file)); | ||
} | ||
for (var _i = 0, filePathArray_1 = filePathArray; _i < filePathArray_1.length; _i++) { | ||
var filePath = filePathArray_1[_i]; | ||
result.push({ | ||
src: filePath, | ||
dest: file.dest | ||
}); | ||
} | ||
return result; | ||
}); | ||
globPromises.push(promise); | ||
}); | ||
return [4 /*yield*/, Promise.all(globPromises)]; | ||
case 1: | ||
filePathArrays = _c.sent(); | ||
filePathObjects = _c.sent(); | ||
fileObjects = []; | ||
//create a single array of all paths | ||
for (_a = 0, filePathArrays_1 = filePathArrays; _a < filePathArrays_1.length; _a++) { | ||
filePathArray = filePathArrays_1[_a]; | ||
filePaths = filePaths.concat(filePathArray); | ||
for (_i = 0, filePathObjects_1 = filePathObjects; _i < filePathObjects_1.length; _i++) { | ||
filePathObject = filePathObjects_1[_i]; | ||
fileObjects = fileObjects.concat(filePathObject); | ||
} | ||
//make all file paths absolute | ||
filePaths = filePaths.map(function (filePath) { | ||
return path.resolve(filePath); | ||
}); | ||
//remove duplicate entries | ||
filePaths = filePaths.filter(function (item, index, inputArray) { | ||
return inputArray.indexOf(item) === index; | ||
}); | ||
for (_b = 0, filePaths_1 = filePaths; _b < filePaths_1.length; _b++) { | ||
filePath = filePaths_1[_b]; | ||
if (path.basename(filePath) === 'manifest') { | ||
manifestPath = filePath; | ||
for (_a = 0, fileObjects_1 = fileObjects; _a < fileObjects_1.length; _a++) { | ||
fileObject = fileObjects_1[_a]; | ||
fileObject.src = path.resolve(fileObject.src); | ||
} | ||
for (_b = 0, fileObjects_2 = fileObjects; _b < fileObjects_2.length; _b++) { | ||
fileObject = fileObjects_2[_b]; | ||
if (path.basename(fileObject.src) === 'manifest') { | ||
manifestPath = fileObject.src; | ||
} | ||
@@ -196,8 +222,16 @@ } | ||
manifestParentPath = path.dirname(manifestPath); | ||
copyPromises = filePaths.map(function (sourcePath) { | ||
var relativeSourcePath = sourcePath.replace(manifestParentPath, ''); | ||
var destinationPath = path.join(stagingPath, relativeSourcePath); | ||
copyPromises = fileObjects.map(function (fileObject) { | ||
var relativeSourcePath = fileObject.src.replace(manifestParentPath, ''); | ||
var destinationPath; | ||
//if the dest ends in a slash (or is empty string), it's a folder and should use the relative source path | ||
if (fileObject.dest.endsWith('\\') || fileObject.dest.endsWith('/') || !fileObject.dest) { | ||
destinationPath = path.join(stagingPath, fileObject.dest, relativeSourcePath); | ||
} | ||
else { | ||
//dest is a relative path to a destination filename | ||
destinationPath = path.join(stagingPath, fileObject.dest); | ||
} | ||
var destinationFolderPath = path.dirname(destinationPath); | ||
return fsExtra.ensureDir(destinationFolderPath).then(function () { | ||
return Q.nfcall(fsExtra.copy, sourcePath, destinationPath); | ||
return Q.nfcall(fsExtra.copy, fileObject.src, destinationPath); | ||
}); | ||
@@ -204,0 +238,0 @@ }); |
{ | ||
"name": "roku-deploy", | ||
"version": "0.1.12", | ||
"version": "0.2.0-beta1", | ||
"description": "Package and publish a Roku application using Node.js", | ||
@@ -48,3 +48,3 @@ "main": "dist/index.js", | ||
"@types/request": "^2.47.0", | ||
"adm-zip": "^0.4.7", | ||
"adm-zip": "^0.4.11", | ||
"chai": "^4.1.2", | ||
@@ -54,3 +54,3 @@ "coveralls": "^3.0.0", | ||
"node-run-cmd": "^1.0.1", | ||
"nyc": "^11.6.0", | ||
"nyc": "^13.1.0", | ||
"rimraf": "^2.6.2", | ||
@@ -57,0 +57,0 @@ "source-map-support": "^0.5.3", |
107
readme.md
@@ -15,3 +15,3 @@ # roku-deploy | ||
1. Your project must be structured the way that Roku expects. This means the following folder structure: | ||
1. Your project must be structured the way that Roku expects. The source files can be in a subdirectory (using the `rootDir` config option), but whever your roku files exist, they must align with the following folder structure: | ||
@@ -23,2 +23,4 @@ components/ | ||
2. You should create a rokudeploy.json file at the root of your project that contains all of the overrides to the default options. roku-deploy will auto-detect this file and use it when possible. | ||
@@ -60,53 +62,52 @@ | ||
## Options | ||
```TypeScript | ||
export interface RokuDeployOptions { | ||
/** | ||
* A full path to the folder where the zip package sould be placed | ||
* @default "./out" | ||
*/ | ||
outDir?: string; | ||
/** | ||
* The name the zip file should be given. | ||
* @default "roku-deploy.zip" | ||
*/ | ||
outFile?: string; | ||
/** | ||
* The root path to the folder holding your project. This folder should include the manifest file. | ||
* @default './' | ||
*/ | ||
rootDir?: string; | ||
/** | ||
* An array of file paths or globs | ||
* @default [ | ||
"source/**/*.*", | ||
"components/**/*.*", | ||
"images/**/*.*", | ||
"manifest" | ||
] | ||
*/ | ||
files?: string[]; | ||
/** | ||
* Set this to true prevent the staging folder from being deleted after creating the package | ||
* @default false | ||
*/ | ||
retainStagingFolder?: boolean; | ||
/** | ||
* The IP address or hostname of the target Roku device. | ||
* @required | ||
* @example "192.168.1.21" | ||
* | ||
*/ | ||
host?: string; | ||
/** | ||
* The username for the roku box. This will almost always be 'rokudev', but allow to be passed in | ||
* just in case roku adds support for custom usernames in the future | ||
* @default "rokudev" | ||
*/ | ||
username?: string; | ||
/** | ||
* The password for logging in to the developer portal on the target Roku device | ||
* @required | ||
*/ | ||
password?: string; | ||
} | ||
``` | ||
Here are the available options. The defaults are shown to the right of the option name, but all can be overridden: | ||
- **host:** string (*required*) | ||
The IP address or hostname of the target Roku device. Example: `"192.168.1.21"` | ||
- **password:** string (*required*) | ||
The password for logging in to the developer portal on the target Roku device | ||
- **outDir?:** string = `"./out"` | ||
A full path to the folder where the zip package should be placed | ||
- **outFile?:** string = `"roku-deploy.zip"` | ||
The name the zip file should be given. | ||
- **rootDir?:** string = `'./'` | ||
The root path to the folder holding your project. The manifest file should be directly underneath this folder. Use this option when your roku project is in a subdirectory of where roku-deploy is installed. | ||
- **files?:** ( string | { src: string; dest: string; } ) [] = | ||
``` | ||
[ | ||
"source/**/*.*", | ||
"components/**/*.*", | ||
"images/**/*.*", | ||
"manifest" | ||
] | ||
``` | ||
An array of file paths, file globs, or {src:string;dest:string} objects that will be copied into the deployment package. | ||
Using the {src;dest} objects will allow you to move files into different destination paths in the | ||
deployment package. This would be useful for copying environment-specific configs into a common config location | ||
(i.e. copy from "ProjectRoot\configs\dev.config.json" to "roku-deploy.zip\config.json"). Here's a sample: | ||
``` | ||
{ | ||
"src": "configs/dev.config.json", | ||
"dest": "app.config" | ||
} | ||
``` | ||
This will result in the `[sourceFolder]/configs/dev.config.json` file being copied to the zip file and named `"app.config"` | ||
*NOTE:* If you override this "files" property, you need to provide ALL config values, as your array will completely overwrite the default. | ||
- **retainStagingFolder?:** boolean = `false` | ||
Set this to true prevent the staging folder from being deleted after creating the package. This is helpful for troubleshooting why your package isn't being created the way you expected. | ||
- **username?:** string = `"rokudev"` | ||
The username for the roku box. This will always be 'rokudev', but allow to be passed in | ||
just in case roku adds support for custom usernames in the future | ||
Click [here](https://github.com/TwitchBronBron/roku-deploy/blob/2648069de1f3e889c58b8119b5f852f126e60042/src/index.ts#L288) to see the typescript interface for these options | ||
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
154254
1013
111