{"version":3,"sources":["meteor://💻app/packages/shell-server/main.js","meteor://💻app/packages/shell-server/shell-server.js"],"names":["module","link","listen","v","shellDir","process","env","METEOR_SHELL_DIR","module1","export","disable","assert","default","pathJoin","join","PassThrough","closeSync","openSync","readFileSync","unlink","writeFileSync","writeSync","createServer","replStart","start","INFO_FILE_MODE","parseInt","EXITING_MESSAGE","callback","Server","Meteor","startup","__meteor_bootstrap__","hooks","startupHooks","push","setImmediate","getInfoFile","JSON","stringify","status","reason","mode","ignored","evalCommandPromise","Promise","resolve","constructor","ok","key","Math","random","toString","slice","server","socket","onConnection","on","err","console","error","stack","infoFile","port","address","timeout","setTimeout","removeAllListeners","end","readJSONFromStream","options","replInputSocket","clearTimeout","columns","Object","assign","create","prompt","terminal","useColors","ignoreUndefined","input","useGlobal","output","evaluateAndExit","startREPL","_wrappedDefaultEval","call","command","global","filename","result","sendResultToSocket","message","code","enableInteractiveMode","repl","context","setRequireAndModule","defaultEval","eval","wrappedDefaultEval","file","Package","ecmascript","ECMAScript","compileForShell","cacheDirectory","getCacheDirectory","then","catch","initializeHistory","defineProperty","get","last","set","val","configurable","addHelp","cmd","helpText","info","commands","help","write","defineCommand","action","sendMessage","exit","historyFile","getHistoryFile","historyFd","historyLines","split","seenLines","history","historyIndex","length","line","pop","test","addListener","inputStream","outputStream","dataSoFar","onData","buffer","lines","shift","json","parse","SyntaxError","finish","pipe","onClose","Error","finished","removeListener","modules","toBeInstalled","shellModuleName","require","exports","extensions","meteorInstall"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAAA,MAAM,CAACC,IAAP,CAAY,mBAAZ,EAAgC;AAAC,OAAI;AAAL,CAAhC,EAA0C,CAA1C;AAA6C,IAAIC,MAAJ;AAAWF,MAAM,CAACC,IAAP,CAAY,mBAAZ,EAAgC;AAACC,QAAM,CAACC,CAAD,EAAG;AAACD,UAAM,GAACC,CAAP;AAAS;;AAApB,CAAhC,EAAsD,CAAtD;AAGxD,MAAMC,QAAQ,GAAGC,OAAO,CAACC,GAAR,CAAYC,gBAA7B;;AACA,IAAIH,QAAJ,EAAc;AACZF,QAAM,CAACE,QAAD,CAAN;AACD,C;;;;;;;;;;;;ACNDI,SAAO,CAACC,MAAR,CAAe;AAACP,UAAM,EAAC,MAAIA,MAAZ;AAAmBQ,WAAO,EAAC,MAAIA;AAA/B,GAAf;AAAwD,MAAIC,MAAJ;AAAWH,SAAO,CAACP,IAAR,CAAa,QAAb,EAAsB;AAACW,WAAO,CAACT,CAAD,EAAG;AAACQ,YAAM,GAACR,CAAP;AAAS;;AAArB,GAAtB,EAA6C,CAA7C;AAAgD,MAAIU,QAAJ;AAAaL,SAAO,CAACP,IAAR,CAAa,MAAb,EAAoB;AAACa,QAAI,CAACX,CAAD,EAAG;AAACU,cAAQ,GAACV,CAAT;AAAW;;AAApB,GAApB,EAA0C,CAA1C;AAA6C,MAAIY,WAAJ;AAAgBP,SAAO,CAACP,IAAR,CAAa,QAAb,EAAsB;AAACc,eAAW,CAACZ,CAAD,EAAG;AAACY,iBAAW,GAACZ,CAAZ;AAAc;;AAA9B,GAAtB,EAAsD,CAAtD;AAAyD,MAAIa,SAAJ,EAAcC,QAAd,EAAuBC,YAAvB,EAAoCC,MAApC,EAA2CC,aAA3C,EAAyDC,SAAzD;AAAmEb,SAAO,CAACP,IAAR,CAAa,IAAb,EAAkB;AAACe,aAAS,CAACb,CAAD,EAAG;AAACa,eAAS,GAACb,CAAV;AAAY,KAA1B;;AAA2Bc,YAAQ,CAACd,CAAD,EAAG;AAACc,cAAQ,GAACd,CAAT;AAAW,KAAlD;;AAAmDe,gBAAY,CAACf,CAAD,EAAG;AAACe,kBAAY,GAACf,CAAb;AAAe,KAAlF;;AAAmFgB,UAAM,CAAChB,CAAD,EAAG;AAACgB,YAAM,GAAChB,CAAP;AAAS,KAAtG;;AAAuGiB,iBAAa,CAACjB,CAAD,EAAG;AAACiB,mBAAa,GAACjB,CAAd;AAAgB,KAAxI;;AAAyIkB,aAAS,CAAClB,CAAD,EAAG;AAACkB,eAAS,GAAClB,CAAV;AAAY;;AAAlK,GAAlB,EAAsL,CAAtL;AAAyL,MAAImB,YAAJ;AAAiBd,SAAO,CAACP,IAAR,CAAa,KAAb,EAAmB;AAACqB,gBAAY,CAACnB,CAAD,EAAG;AAACmB,kBAAY,GAACnB,CAAb;AAAe;;AAAhC,GAAnB,EAAqD,CAArD;AAAwD,MAAIoB,SAAJ;AAAcf,SAAO,CAACP,IAAR,CAAa,MAAb,EAAoB;AAACuB,SAAK,CAACrB,CAAD,EAAG;AAACoB,eAAS,GAACpB,CAAV;AAAY;;AAAtB,GAApB,EAA4C,CAA5C;AAA+CK,SAAO,CAACP,IAAR,CAAa,gCAAb;AAiBxnB,QAAMwB,cAAc,GAAGC,QAAQ,CAAC,KAAD,EAAQ,CAAR,CAA/B,C,CAA2C;;AAC3C,QAAMC,eAAe,GAAG,kBAAxB,C,CAEA;AACA;;AACO,WAASzB,MAAT,CAAgBE,QAAhB,EAA0B;AAC/B,aAASwB,QAAT,GAAoB;AAClB,UAAIC,MAAJ,CAAWzB,QAAX,EAAqBF,MAArB;AACD,KAH8B,CAK/B;AACA;;;AACA,QAAI,OAAO4B,MAAP,KAAkB,QAAtB,EAAgC;AAC9BA,YAAM,CAACC,OAAP,CAAeH,QAAf;AACD,KAFD,MAEO,IAAI,OAAOI,oBAAP,KAAgC,QAApC,EAA8C;AACnD,YAAMC,KAAK,GAAGD,oBAAoB,CAACE,YAAnC;;AACA,UAAID,KAAJ,EAAW;AACTA,aAAK,CAACE,IAAN,CAAWP,QAAX;AACD,OAFD,MAEO;AACL;AACAQ,oBAAY,CAACR,QAAD,CAAZ;AACD;AACF;AACF;;AAGM,WAASlB,OAAT,CAAiBN,QAAjB,EAA2B;AAChC,QAAI;AACF;AACA;AACA;AACAgB,mBAAa,CACXiB,WAAW,CAACjC,QAAD,CADA,EAEXkC,IAAI,CAACC,SAAL,CAAe;AACbC,cAAM,EAAE,UADK;AAEbC,cAAM,EAAE;AAFK,OAAf,IAGK,IALM,EAMX;AAAEC,YAAI,EAAEjB;AAAR,OANW,CAAb;AAQD,KAZD,CAYE,OAAOkB,OAAP,EAAgB,CAAE;AACrB;;AAED;AACA;AACA;AACA,QAAMC,kBAAkB,GAAGC,OAAO,CAACC,OAAR,EAA3B;;AAEA,QAAMjB,MAAN,CAAa;AACXkB,eAAW,CAAC3C,QAAD,EAAW;AACpBO,YAAM,CAACqC,EAAP,CAAU,gBAAgBnB,MAA1B;AAEA,WAAKzB,QAAL,GAAgBA,QAAhB;AACA,WAAK6C,GAAL,GAAWC,IAAI,CAACC,MAAL,GAAcC,QAAd,CAAuB,EAAvB,EAA2BC,KAA3B,CAAiC,CAAjC,CAAX;AAEA,WAAKC,MAAL,GACEhC,YAAY,CAAEiC,MAAD,IAAY;AACvB,aAAKC,YAAL,CAAkBD,MAAlB;AACD,OAFW,CAAZ,CAGCE,EAHD,CAGI,OAHJ,EAGcC,GAAD,IAAS;AACpBC,eAAO,CAACC,KAAR,CAAcF,GAAG,CAACG,KAAlB;AACD,OALD,CADF;AAOD;;AAED3D,UAAM,GAAG;AACP,YAAM4D,QAAQ,GAAGzB,WAAW,CAAC,KAAKjC,QAAN,CAA5B;AAEAe,YAAM,CAAC2C,QAAD,EAAW,MAAM;AACrB,aAAKR,MAAL,CAAYpD,MAAZ,CAAmB,CAAnB,EAAsB,WAAtB,EAAmC,MAAM;AACvCkB,uBAAa,CAAC0C,QAAD,EAAWxB,IAAI,CAACC,SAAL,CAAe;AACrCC,kBAAM,EAAE,SAD6B;AAErCuB,gBAAI,EAAE,KAAKT,MAAL,CAAYU,OAAZ,GAAsBD,IAFS;AAGrCd,eAAG,EAAE,KAAKA;AAH2B,WAAf,IAInB,IAJQ,EAIF;AACTP,gBAAI,EAAEjB;AADG,WAJE,CAAb;AAOD,SARD;AASD,OAVK,CAAN;AAWD;;AAED+B,gBAAY,CAACD,MAAD,EAAS;AACnB;AACA;AACAA,YAAM,CAACE,EAAP,CAAU,OAAV,EAAmB,YAAW;AAC5BF,cAAM,GAAG,IAAT;AACD,OAFD,EAHmB,CAOnB;AACA;;AACA,YAAMU,OAAO,GAAGC,UAAU,CAAC,YAAW;AACpC,YAAIX,MAAJ,EAAY;AACVA,gBAAM,CAACY,kBAAP,CAA0B,MAA1B;AACAZ,gBAAM,CAACa,GAAP,CAAWzC,eAAe,GAAG,IAA7B;AACD;AACF,OALyB,EAKvB,IALuB,CAA1B,CATmB,CAgBnB;AACA;AACA;AACA;;AACA0C,wBAAkB,CAACd,MAAD,EAAS,CAACK,KAAD,EAAQU,OAAR,EAAiBC,eAAjB,KAAqC;AAC9DC,oBAAY,CAACP,OAAD,CAAZ;;AAEA,YAAIL,KAAJ,EAAW;AACTL,gBAAM,GAAG,IAAT;AACAI,iBAAO,CAACC,KAAR,CAAcA,KAAK,CAACC,KAApB;AACA;AACD;;AAED,YAAIS,OAAO,CAACrB,GAAR,KAAgB,KAAKA,GAAzB,EAA8B;AAC5B,cAAIM,MAAJ,EAAY;AACVA,kBAAM,CAACa,GAAP,CAAWzC,eAAe,GAAG,IAA7B;AACD;;AACD;AACD;;AACD,eAAO2C,OAAO,CAACrB,GAAf,CAf8D,CAiB9D;;AACA,YAAIqB,OAAO,CAACG,OAAR,IAAmBlB,MAAvB,EAA+B;AAC7BA,gBAAM,CAACkB,OAAP,GAAiBH,OAAO,CAACG,OAAzB;AACD;;AACD,eAAOH,OAAO,CAACG,OAAf;AAEAH,eAAO,GAAGI,MAAM,CAACC,MAAP,CACRD,MAAM,CAACE,MAAP,CAAc,IAAd,CADQ,EAGR;AACA;AACEC,gBAAM,EAAE,IADV;AAEEC,kBAAQ,EAAE,IAFZ;AAGEC,mBAAS,EAAE,IAHb;AAIEC,yBAAe,EAAE;AAJnB,SAJQ,EAWR;AACAV,eAZQ,EAcR;AACA;AACEW,eAAK,EAAEV,eADT;AAEEW,mBAAS,EAAE,KAFb;AAGEC,gBAAM,EAAE5B;AAHV,SAfQ,CAAV,CAvB8D,CA6C9D;AACA;AACA;;AACA,YAAIe,OAAO,CAACc,eAAZ,EAA6B;AAC3Bd,iBAAO,CAACO,MAAR,GAAiB,EAAjB;AACD,SAlD6D,CAoD9D;;;AACA,aAAKQ,SAAL,CAAef,OAAf;;AAEA,YAAIA,OAAO,CAACc,eAAZ,EAA6B;AAC3B,eAAKE,mBAAL,CAAyBC,IAAzB,CACEb,MAAM,CAACE,MAAP,CAAc,IAAd,CADF,EAEEN,OAAO,CAACc,eAAR,CAAwBI,OAF1B,EAGEC,MAHF,EAIEnB,OAAO,CAACc,eAAR,CAAwBM,QAAxB,IAAoC,gBAJtC,EAKE,UAAU9B,KAAV,EAAiB+B,MAAjB,EAAyB;AACvB,gBAAIpC,MAAJ,EAAY;AACV,uBAASqC,kBAAT,CAA4BC,OAA5B,EAAqC;AACnC;AACA;AACAtC,sBAAM,CAACa,GAAP,CAAW9B,IAAI,CAACC,SAAL,CAAesD,OAAf,IAA0B,IAArC;AACD;;AAED,kBAAIjC,KAAJ,EAAW;AACTgC,kCAAkB,CAAC;AACjBhC,uBAAK,EAAEA,KAAK,CAACR,QAAN,EADU;AAEjB0C,sBAAI,EAAE;AAFW,iBAAD,CAAlB;AAID,eALD,MAKO;AACLF,kCAAkB,CAAC;AACjBD;AADiB,iBAAD,CAAlB;AAGD;AACF;AACF,WAxBH;;AA0BA;AACD;;AACD,eAAOrB,OAAO,CAACc,eAAf;AAEA,aAAKW,qBAAL,CAA2BzB,OAA3B;AACD,OAvFiB,CAAlB;AAwFD;;AAEDe,aAAS,CAACf,OAAD,EAAU;AACjB;AACA;AACAA,aAAO,CAACa,MAAR,CAAe1B,EAAf,CAAkB,OAAlB,EAA2B,YAAW;AACpCa,eAAO,CAACa,MAAR,GAAiB,IAAjB;AACD,OAFD;AAIA,YAAMa,IAAI,GAAG,KAAKA,IAAL,GAAYzE,SAAS,CAAC+C,OAAD,CAAlC;AACA,YAAM;AAAElE;AAAF,UAAe,IAArB,CARiB,CAUjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA4F,UAAI,CAACC,OAAL,GAAeR,MAAf;AACAO,UAAI,CAACd,SAAL,GAAiB,IAAjB;AAEAgB,yBAAmB,CAACF,IAAI,CAACC,OAAN,CAAnB,CAtBiB,CAwBjB;AACA;AACA;AACA;;AACA,YAAME,WAAW,GAAGH,IAAI,CAACI,IAAzB;;AAEA,eAASC,kBAAT,CAA4BP,IAA5B,EAAkCG,OAAlC,EAA2CK,IAA3C,EAAiD1E,QAAjD,EAA2D;AACzD,YAAI2E,OAAO,CAACC,UAAZ,EAAwB;AACtB,cAAI;AACFV,gBAAI,GAAGS,OAAO,CAACC,UAAR,CAAmBC,UAAnB,CAA8BC,eAA9B,CAA8CZ,IAA9C,EAAoD;AACzDa,4BAAc,EAAEC,iBAAiB,CAACxG,QAAD;AADwB,aAApD,CAAP;AAGD,WAJD,CAIE,OAAOsD,GAAP,EAAY,CACZ;AACA;AACA;AACA;AACD;AACF;;AAEDd,0BAAkB,CACfiE,IADH,CACQ,MAAMV,WAAW,CAACL,IAAD,EAAOG,OAAP,EAAgBK,IAAhB,EAAsB1E,QAAtB,CADzB,EAEGkF,KAFH,CAESlF,QAFT;AAGD,OA/CgB,CAiDjB;AACA;;;AACAoE,UAAI,CAACI,IAAL,GAAY,KAAKd,mBAAL,GAA2Be,kBAAvC;AACD;;AAEDN,yBAAqB,CAACzB,OAAD,EAAU;AAC7B;AACA,WAAKyC,iBAAL;AAEA,YAAMf,IAAI,GAAG,KAAKA,IAAlB,CAJ6B,CAM7B;AACA;AACA;;AACAtB,YAAM,CAACsC,cAAP,CAAsBhB,IAAI,CAACC,OAA3B,EAAoC,IAApC,EAA0C;AACxCgB,WAAG,EAAE,MAAMjB,IAAI,CAACkB,IADwB;AAExCC,WAAG,EAAGC,GAAD,IAAS;AACZpB,cAAI,CAACkB,IAAL,GAAYE,GAAZ;AACD,SAJuC;AAMxC;AACA;AACAC,oBAAY,EAAE;AAR0B,OAA1C,EAT6B,CAoB7B;;AACA,eAASC,OAAT,CAAiBC,GAAjB,EAAsBC,QAAtB,EAAgC;AAC9B,cAAMC,IAAI,GAAGzB,IAAI,CAAC0B,QAAL,CAAcH,GAAd,KAAsBvB,IAAI,CAAC0B,QAAL,CAAc,MAAMH,GAApB,CAAnC;;AACA,YAAIE,IAAJ,EAAU;AACRA,cAAI,CAACE,IAAL,GAAYH,QAAZ;AACD;AACF;;AACDF,aAAO,CAAC,OAAD,EAAU,wDAAV,CAAP;AACAA,aAAO,CAAC,MAAD,EAAS,wCAAT,CAAP;AACAA,aAAO,CAAC,MAAD,EAAS,4BAAT,CAAP,CA7B6B,CA+B7B;AACA;;AACAtB,UAAI,CAACvC,EAAL,CAAQ,MAAR,EAAgB,YAAW;AACzB,YAAIa,OAAO,CAACa,MAAZ,EAAoB;AAClBb,iBAAO,CAACa,MAAR,CAAeyC,KAAf,CAAqBjG,eAAe,GAAG,IAAvC;AACA2C,iBAAO,CAACa,MAAR,CAAef,GAAf;AACD;AACF,OALD,EAjC6B,CAwC7B;AACA;;AACA/D,aAAO,CAACoD,EAAR,CAAW,MAAX,EAAmB,YAAW;AAC5B,YAAIa,OAAO,CAACa,MAAZ,EAAoB;AAClBb,iBAAO,CAACa,MAAR,CAAef,GAAf;AACD;AACF,OAJD,EA1C6B,CAgD7B;AACA;;AACA4B,UAAI,CAAC6B,aAAL,CAAmB,QAAnB,EAA6B;AAC3BF,YAAI,EAAE,kCADqB;AAE3BG,cAAM,EAAE,YAAW;AACjB,cAAIzH,OAAO,CAAC0H,WAAZ,EAAyB;AACvB1H,mBAAO,CAAC0H,WAAR,CAAoB,cAApB,EAAoC;AAAEvC,qBAAO,EAAE;AAAX,aAApC;AACD,WAFD,MAEO;AACLnF,mBAAO,CAAC2H,IAAR,CAAa,CAAb;AACD;AACF;AAR0B,OAA7B;AAUD,KAhQU,CAkQX;AACA;;;AACAjB,qBAAiB,GAAG;AAClB,YAAMf,IAAI,GAAG,KAAKA,IAAlB;AACA,YAAMiC,WAAW,GAAGC,cAAc,CAAC,KAAK9H,QAAN,CAAlC;AACA,UAAI+H,SAAS,GAAGlH,QAAQ,CAACgH,WAAD,EAAc,IAAd,CAAxB;AACA,YAAMG,YAAY,GAAGlH,YAAY,CAAC+G,WAAD,EAAc,MAAd,CAAZ,CAAkCI,KAAlC,CAAwC,IAAxC,CAArB;AACA,YAAMC,SAAS,GAAG5D,MAAM,CAACE,MAAP,CAAc,IAAd,CAAlB;;AAEA,UAAI,CAAEoB,IAAI,CAACuC,OAAX,EAAoB;AAClBvC,YAAI,CAACuC,OAAL,GAAe,EAAf;AACAvC,YAAI,CAACwC,YAAL,GAAoB,CAAC,CAArB;AACD;;AAED,aAAOxC,IAAI,CAACuC,OAAL,IAAgBH,YAAY,CAACK,MAAb,GAAsB,CAA7C,EAAgD;AAC9C,cAAMC,IAAI,GAAGN,YAAY,CAACO,GAAb,EAAb;;AACA,YAAID,IAAI,IAAI,KAAKE,IAAL,CAAUF,IAAV,CAAR,IAA2B,CAAEJ,SAAS,CAACI,IAAD,CAA1C,EAAkD;AAChD1C,cAAI,CAACuC,OAAL,CAAapG,IAAb,CAAkBuG,IAAlB;AACAJ,mBAAS,CAACI,IAAD,CAAT,GAAkB,IAAlB;AACD;AACF;;AAED1C,UAAI,CAAC6C,WAAL,CAAiB,MAAjB,EAAyB,UAASH,IAAT,EAAe;AACtC,YAAIP,SAAS,IAAI,CAAb,IAAkB,KAAKS,IAAL,CAAUF,IAAV,CAAtB,EAAuC;AACrCrH,mBAAS,CAAC8G,SAAD,EAAYO,IAAI,GAAG,IAAnB,CAAT;AACD;AACF,OAJD;AAMA,WAAK1C,IAAL,CAAUvC,EAAV,CAAa,MAAb,EAAqB,YAAW;AAC9BzC,iBAAS,CAACmH,SAAD,CAAT;AACAA,iBAAS,GAAG,CAAC,CAAb;AACD,OAHD;AAID;;AAlSU;;AAqSb,WAAS9D,kBAAT,CAA4ByE,WAA5B,EAAyClH,QAAzC,EAAmD;AACjD,UAAMmH,YAAY,GAAG,IAAIhI,WAAJ,EAArB;AACA,QAAIiI,SAAS,GAAG,EAAhB;;AAEA,aAASC,MAAT,CAAgBC,MAAhB,EAAwB;AACtB,YAAMC,KAAK,GAAGD,MAAM,CAAC9F,QAAP,CAAgB,MAAhB,EAAwBiF,KAAxB,CAA8B,IAA9B,CAAd;;AAEA,aAAOc,KAAK,CAACV,MAAN,GAAe,CAAtB,EAAyB;AACvBO,iBAAS,IAAIG,KAAK,CAACC,KAAN,EAAb;AAEA,YAAIC,IAAJ;;AACA,YAAI;AACFA,cAAI,GAAG/G,IAAI,CAACgH,KAAL,CAAWN,SAAX,CAAP;AACD,SAFD,CAEE,OAAOpF,KAAP,EAAc;AACd,cAAIA,KAAK,YAAY2F,WAArB,EAAkC;AAChC;AACD;;AAED,iBAAOC,MAAM,CAAC5F,KAAD,CAAb;AACD;;AAED,YAAIuF,KAAK,CAACV,MAAN,GAAe,CAAnB,EAAsB;AACpBM,sBAAY,CAACnB,KAAb,CAAmBuB,KAAK,CAACrI,IAAN,CAAW,IAAX,CAAnB;AACD;;AAEDgI,mBAAW,CAACW,IAAZ,CAAiBV,YAAjB;AAEA,eAAOS,MAAM,CAAC,IAAD,EAAOH,IAAP,CAAb;AACD;AACF;;AAED,aAASK,OAAT,GAAmB;AACjBF,YAAM,CAAC,IAAIG,KAAJ,CAAU,4BAAV,CAAD,CAAN;AACD;;AAED,QAAIC,QAAQ,GAAG,KAAf;;AACA,aAASJ,MAAT,CAAgB5F,KAAhB,EAAuByF,IAAvB,EAA6B;AAC3B,UAAI,CAAEO,QAAN,EAAgB;AACdA,gBAAQ,GAAG,IAAX;AACAd,mBAAW,CAACe,cAAZ,CAA2B,MAA3B,EAAmCZ,MAAnC;AACAH,mBAAW,CAACe,cAAZ,CAA2B,OAA3B,EAAoCL,MAApC;AACAV,mBAAW,CAACe,cAAZ,CAA2B,OAA3B,EAAoCH,OAApC;AACA9H,gBAAQ,CAACgC,KAAD,EAAQyF,IAAR,EAAcN,YAAd,CAAR;AACD;AACF;;AAEDD,eAAW,CAACrF,EAAZ,CAAe,MAAf,EAAuBwF,MAAvB;AACAH,eAAW,CAACrF,EAAZ,CAAe,OAAf,EAAwB+F,MAAxB;AACAV,eAAW,CAACrF,EAAZ,CAAe,OAAf,EAAwBiG,OAAxB;AACD;;AAED,WAASrH,WAAT,CAAqBjC,QAArB,EAA+B;AAC7B,WAAOS,QAAQ,CAACT,QAAD,EAAW,WAAX,CAAf;AACD;;AAED,WAAS8H,cAAT,CAAwB9H,QAAxB,EAAkC;AAChC,WAAOS,QAAQ,CAACT,QAAD,EAAW,SAAX,CAAf;AACD;;AAED,WAASwG,iBAAT,CAA2BxG,QAA3B,EAAqC;AACnC,WAAOS,QAAQ,CAACT,QAAD,EAAW,OAAX,CAAf;AACD;;AAED,WAAS8F,mBAAT,CAA6BD,OAA7B,EAAsC;AACpC,QAAIM,OAAO,CAACuD,OAAZ,EAAqB;AACnB;AACA;AACA,YAAMC,aAAa,GAAG,EAAtB;AACA,YAAMC,eAAe,GAAG,kBACtB9G,IAAI,CAACC,MAAL,GAAcC,QAAd,CAAuB,EAAvB,EAA2BC,KAA3B,CAAiC,CAAjC,CADsB,GACgB,KADxC;;AAGA0G,mBAAa,CAACC,eAAD,CAAb,GAAiC,UAAUC,OAAV,EAAmBC,OAAnB,EAA4BlK,MAA5B,EAAoC;AACnEiG,eAAO,CAACjG,MAAR,GAAiBA,MAAjB;AACAiG,eAAO,CAACgE,OAAR,GAAkBA,OAAlB,CAFmE,CAInE;AACA;;AACAA,eAAO,CAACE,UAAR,GAAqB;AACnB,iBAAO,IADY;AAEnB,mBAAS,IAFU;AAGnB,mBAAS;AAHU,SAArB;AAKD,OAXD,CAPmB,CAoBnB;AACA;;;AACA5D,aAAO,CAACuD,OAAR,CAAgBM,aAAhB,CAA8BL,aAA9B,EAA6C,OAAOC,eAApD;AACD;AACF","file":"/packages/shell-server.js","sourcesContent":["export * from \"./shell-server.js\";\nimport { listen } from \"./shell-server.js\";\n\nconst shellDir = process.env.METEOR_SHELL_DIR;\nif (shellDir) {\n listen(shellDir);\n}\n","import assert from \"assert\";\nimport { join as pathJoin } from \"path\";\nimport { PassThrough } from \"stream\";\nimport {\n closeSync,\n openSync,\n readFileSync,\n unlink,\n writeFileSync,\n writeSync,\n} from \"fs\";\nimport { createServer } from \"net\";\nimport { start as replStart } from \"repl\";\n\n// Enable process.sendMessage for communication with build process.\nimport \"meteor/inter-process-messaging\";\n\nconst INFO_FILE_MODE = parseInt(\"600\", 8); // Only the owner can read or write.\nconst EXITING_MESSAGE = \"Shell exiting...\";\n\n// Invoked by the server process to listen for incoming connections from\n// shell clients. Each connection gets its own REPL instance.\nexport function listen(shellDir) {\n function callback() {\n new Server(shellDir).listen();\n }\n\n // If the server is still in the very early stages of starting up,\n // Meteor.startup may not available yet.\n if (typeof Meteor === \"object\") {\n Meteor.startup(callback);\n } else if (typeof __meteor_bootstrap__ === \"object\") {\n const hooks = __meteor_bootstrap__.startupHooks;\n if (hooks) {\n hooks.push(callback);\n } else {\n // As a fallback, just call the callback asynchronously.\n setImmediate(callback);\n }\n }\n}\n\n// Disabling the shell causes all attached clients to disconnect and exit.\nexport function disable(shellDir) {\n try {\n // Replace info.json with a file that says the shell server is\n // disabled, so that any connected shell clients will fail to\n // reconnect after the server process closes their sockets.\n writeFileSync(\n getInfoFile(shellDir),\n JSON.stringify({\n status: \"disabled\",\n reason: \"Shell server has shut down.\"\n }) + \"\\n\",\n { mode: INFO_FILE_MODE }\n );\n } catch (ignored) {}\n}\n\n// Shell commands need to be executed in a Fiber in case they call into\n// code that yields. Using a Promise is an even better idea, since it runs\n// its callbacks in Fibers drawn from a pool, so the Fibers are recycled.\nconst evalCommandPromise = Promise.resolve();\n\nclass Server {\n constructor(shellDir) {\n assert.ok(this instanceof Server);\n\n this.shellDir = shellDir;\n this.key = Math.random().toString(36).slice(2);\n\n this.server =\n createServer((socket) => {\n this.onConnection(socket);\n })\n .on(\"error\", (err) => {\n console.error(err.stack);\n });\n }\n\n listen() {\n const infoFile = getInfoFile(this.shellDir);\n\n unlink(infoFile, () => {\n this.server.listen(0, \"127.0.0.1\", () => {\n writeFileSync(infoFile, JSON.stringify({\n status: \"enabled\",\n port: this.server.address().port,\n key: this.key\n }) + \"\\n\", {\n mode: INFO_FILE_MODE\n });\n });\n });\n }\n\n onConnection(socket) {\n // Make sure this function doesn't try to write anything to the socket\n // after it has been closed.\n socket.on(\"close\", function() {\n socket = null;\n });\n\n // If communication is not established within 1000ms of the first\n // connection, forcibly close the socket.\n const timeout = setTimeout(function() {\n if (socket) {\n socket.removeAllListeners(\"data\");\n socket.end(EXITING_MESSAGE + \"\\n\");\n }\n }, 1000);\n\n // Let connecting clients configure certain REPL options by sending a\n // JSON object over the socket. For example, only the client knows\n // whether it's running a TTY or an Emacs subshell or some other kind of\n // terminal, so the client must decide the value of options.terminal.\n readJSONFromStream(socket, (error, options, replInputSocket) => {\n clearTimeout(timeout);\n\n if (error) {\n socket = null;\n console.error(error.stack);\n return;\n }\n\n if (options.key !== this.key) {\n if (socket) {\n socket.end(EXITING_MESSAGE + \"\\n\");\n }\n return;\n }\n delete options.key;\n\n // Set the columns to what is being requested by the client.\n if (options.columns && socket) {\n socket.columns = options.columns;\n }\n delete options.columns;\n\n options = Object.assign(\n Object.create(null),\n\n // Defaults for configurable options.\n {\n prompt: \"> \",\n terminal: true,\n useColors: true,\n ignoreUndefined: true,\n },\n\n // Configurable options\n options,\n\n // Immutable options.\n {\n input: replInputSocket,\n useGlobal: false,\n output: socket\n }\n );\n\n // The prompt during an evaluateAndExit must be blank to ensure\n // that the prompt doesn't inadvertently get parsed as part of\n // the JSON communication channel.\n if (options.evaluateAndExit) {\n options.prompt = \"\";\n }\n\n // Start the REPL.\n this.startREPL(options);\n\n if (options.evaluateAndExit) {\n this._wrappedDefaultEval.call(\n Object.create(null),\n options.evaluateAndExit.command,\n global,\n options.evaluateAndExit.filename || \"\",\n function (error, result) {\n if (socket) {\n function sendResultToSocket(message) {\n // Sending back a JSON payload allows the client to\n // distinguish between errors and successful results.\n socket.end(JSON.stringify(message) + \"\\n\");\n }\n\n if (error) {\n sendResultToSocket({\n error: error.toString(),\n code: 1\n });\n } else {\n sendResultToSocket({\n result,\n });\n }\n }\n }\n );\n return;\n }\n delete options.evaluateAndExit;\n\n this.enableInteractiveMode(options);\n });\n }\n\n startREPL(options) {\n // Make sure this function doesn't try to write anything to the output\n // stream after it has been closed.\n options.output.on(\"close\", function() {\n options.output = null;\n });\n\n const repl = this.repl = replStart(options);\n const { shellDir } = this;\n\n // This is technique of setting `repl.context` is similar to how the\n // `useGlobal` option would work during a normal `repl.start()` and\n // allows shell access (and tab completion!) to Meteor globals (i.e.\n // Underscore _, Meteor, etc.). By using this technique, which changes\n // the context after startup, we avoid stomping on the special `_`\n // variable (in `repl` this equals the value of the last command) from\n // being overridden in the client/server socket-handshaking. Furthermore,\n // by setting `useGlobal` back to true, we allow the default eval function\n // to use the desired `runInThisContext` method (https://git.io/vbvAB).\n repl.context = global;\n repl.useGlobal = true;\n\n setRequireAndModule(repl.context);\n\n // In order to avoid duplicating code here, specifically the complexities\n // of catching so-called \"Recoverable Errors\" (https://git.io/vbvbl),\n // we will wrap the default eval, run it in a Fiber (via a Promise), and\n // give it the opportunity to decide if the user is mid-code-block.\n const defaultEval = repl.eval;\n\n function wrappedDefaultEval(code, context, file, callback) {\n if (Package.ecmascript) {\n try {\n code = Package.ecmascript.ECMAScript.compileForShell(code, {\n cacheDirectory: getCacheDirectory(shellDir)\n });\n } catch (err) {\n // Any Babel error here might be just fine since it's\n // possible the code was incomplete (multi-line code on the REPL).\n // The defaultEval below will use its own functionality to determine\n // if this error is \"recoverable\".\n }\n }\n\n evalCommandPromise\n .then(() => defaultEval(code, context, file, callback))\n .catch(callback);\n }\n\n // Have the REPL use the newly wrapped function instead and store the\n // _wrappedDefaultEval so that evalulateAndExit calls can use it directly.\n repl.eval = this._wrappedDefaultEval = wrappedDefaultEval;\n }\n\n enableInteractiveMode(options) {\n // History persists across shell sessions!\n this.initializeHistory();\n\n const repl = this.repl;\n\n // Implement an alternate means of fetching the return value,\n // via `__` (double underscore) as originally implemented in:\n // https://github.com/meteor/meteor/commit/2443d832265c7d1c\n Object.defineProperty(repl.context, \"__\", {\n get: () => repl.last,\n set: (val) => {\n repl.last = val;\n },\n\n // Allow this property to be (re)defined more than once (e.g. each\n // time the server restarts).\n configurable: true\n });\n\n // Some improvements to the existing help messages.\n function addHelp(cmd, helpText) {\n const info = repl.commands[cmd] || repl.commands[\".\" + cmd];\n if (info) {\n info.help = helpText;\n }\n }\n addHelp(\"break\", \"Terminate current command input and display new prompt\");\n addHelp(\"exit\", \"Disconnect from server and leave shell\");\n addHelp(\"help\", \"Show this help information\");\n\n // When the REPL exits, signal the attached client to exit by sending it\n // the special EXITING_MESSAGE.\n repl.on(\"exit\", function() {\n if (options.output) {\n options.output.write(EXITING_MESSAGE + \"\\n\");\n options.output.end();\n }\n });\n\n // When the server process exits, end the output stream but do not\n // signal the attached client to exit.\n process.on(\"exit\", function() {\n if (options.output) {\n options.output.end();\n }\n });\n\n // This Meteor-specific shell command rebuilds the application as if a\n // change was made to server code.\n repl.defineCommand(\"reload\", {\n help: \"Restart the server and the shell\",\n action: function() {\n if (process.sendMessage) {\n process.sendMessage(\"shell-server\", { command: \"reload\" });\n } else {\n process.exit(0);\n }\n }\n });\n }\n\n // This function allows a persistent history of shell commands to be saved\n // to and loaded from .meteor/local/shell/history.\n initializeHistory() {\n const repl = this.repl;\n const historyFile = getHistoryFile(this.shellDir);\n let historyFd = openSync(historyFile, \"a+\");\n const historyLines = readFileSync(historyFile, \"utf8\").split(\"\\n\");\n const seenLines = Object.create(null);\n\n if (! repl.history) {\n repl.history = [];\n repl.historyIndex = -1;\n }\n\n while (repl.history && historyLines.length > 0) {\n const line = historyLines.pop();\n if (line && /\\S/.test(line) && ! seenLines[line]) {\n repl.history.push(line);\n seenLines[line] = true;\n }\n }\n\n repl.addListener(\"line\", function(line) {\n if (historyFd >= 0 && /\\S/.test(line)) {\n writeSync(historyFd, line + \"\\n\");\n }\n });\n\n this.repl.on(\"exit\", function() {\n closeSync(historyFd);\n historyFd = -1;\n });\n }\n}\n\nfunction readJSONFromStream(inputStream, callback) {\n const outputStream = new PassThrough();\n let dataSoFar = \"\";\n\n function onData(buffer) {\n const lines = buffer.toString(\"utf8\").split(\"\\n\");\n\n while (lines.length > 0) {\n dataSoFar += lines.shift();\n\n let json;\n try {\n json = JSON.parse(dataSoFar);\n } catch (error) {\n if (error instanceof SyntaxError) {\n continue;\n }\n\n return finish(error);\n }\n\n if (lines.length > 0) {\n outputStream.write(lines.join(\"\\n\"));\n }\n\n inputStream.pipe(outputStream);\n\n return finish(null, json);\n }\n }\n\n function onClose() {\n finish(new Error(\"stream unexpectedly closed\"));\n }\n\n let finished = false;\n function finish(error, json) {\n if (! finished) {\n finished = true;\n inputStream.removeListener(\"data\", onData);\n inputStream.removeListener(\"error\", finish);\n inputStream.removeListener(\"close\", onClose);\n callback(error, json, outputStream);\n }\n }\n\n inputStream.on(\"data\", onData);\n inputStream.on(\"error\", finish);\n inputStream.on(\"close\", onClose);\n}\n\nfunction getInfoFile(shellDir) {\n return pathJoin(shellDir, \"info.json\");\n}\n\nfunction getHistoryFile(shellDir) {\n return pathJoin(shellDir, \"history\");\n}\n\nfunction getCacheDirectory(shellDir) {\n return pathJoin(shellDir, \"cache\");\n}\n\nfunction setRequireAndModule(context) {\n if (Package.modules) {\n // Use the same `require` function and `module` object visible to the\n // application.\n const toBeInstalled = {};\n const shellModuleName = \"meteor-shell-\" +\n Math.random().toString(36).slice(2) + \".js\";\n\n toBeInstalled[shellModuleName] = function (require, exports, module) {\n context.module = module;\n context.require = require;\n\n // Tab completion sometimes uses require.extensions, but only for\n // the keys.\n require.extensions = {\n \".js\": true,\n \".json\": true,\n \".node\": true,\n };\n };\n\n // This populates repl.context.{module,require} by evaluating the\n // module defined above.\n Package.modules.meteorInstall(toBeInstalled)(\"./\" + shellModuleName);\n }\n}\n"]}