From 776fe297a7af45f9818306024b854aba7939e309 Mon Sep 17 00:00:00 2001 From: "Jee Lorenz N. Mercado" Date: Sun, 11 Aug 2024 18:27:40 +0800 Subject: [PATCH] update cli --- lib/index.cjs | 2 +- src/utils/index.js | 5 +++++ templates/apps/mobile/android/app/build.gradle | 6 ++++++ templates/apps/mobile/fastlane/Fastfile | 6 +++--- templates/apps/mobile/project.json | 5 ++++- templates/apps/mobile/src/app/index.tsx | 10 ++-------- 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/lib/index.cjs b/lib/index.cjs index 3a03e53..332a8c6 100755 --- a/lib/index.cjs +++ b/lib/index.cjs @@ -61,7 +61,7 @@ ${m.description}`:"";return`${[a,v,b].filter(Boolean).join(" ")} ${g}${k}${E}${j2.default.cursorHide}`});var f1=q(require("node:readline"),1),B=q(u1(),1),xl=q(c1(),1),x1=q(Na(),1),d1=q(dt(),1),l1={set:(e,r="",t)=>{let n=e;r.split(".").forEach((i,u,o)=>{i==="__proto__"||i==="constructor"||(u===o.length-1?n[i]=t:i in n||(n[i]={}),n=n[i])})},get:(e,r="",t)=>{let n=u=>String.prototype.split.call(r,u).filter(Boolean).reduce((o,a)=>o!=null?o[a]:o,e),i=n(/[,[\]]+?/)||n(/[,.[\]]+?/);return i===void 0||i===e?t:i}};function ll(e,r,t){if(r in e){let n=e[r];if(typeof n=="function")return(0,B.from)((0,xl.default)(n)(t).then(i=>Object.assign(e,{[r]:i})))}return(0,B.of)(e)}var fl=class extends Error{isTtyError=!0};function xS(e={}){e.skipTTYChecks=e.skipTTYChecks===void 0?!0:e.skipTTYChecks;let r=e.input||process.stdin;if(!e.skipTTYChecks&&!r.isTTY)throw new fl("Prompts can not be meaningfully rendered in non-TTY environments");let t=new x1.default;return t.pipe(e.output||process.stdout),{terminal:!0,...e,input:r,output:t}}function dS(e){return Object.values(e).every(r=>typeof r=="object"&&!Array.isArray(r)&&r!=null)}function DS(e){return e.prototype&&"run"in e.prototype&&typeof e.prototype.run=="function"}var sn=class{prompts;answers={};process=B.EMPTY;onClose;opt;rl;constructor(r,t){this.opt=t,this.prompts=r}run(r,t){this.answers=typeof t=="object"?{...t}:{};let n;Array.isArray(r)?n=(0,B.from)(r):(0,B.isObservable)(r)?n=r:dS(r)?n=(0,B.from)(Object.entries(r).map(([u,o])=>Object.assign({},o,{name:u}))):n=(0,B.from)([r]),this.process=n.pipe((0,B.concatMap)(u=>this.processQuestion(u)));let i=(0,B.lastValueFrom)(this.process.pipe((0,B.reduce)((u,o)=>(l1.set(u,o.name,o.answer),u),this.answers))).then(()=>this.onCompletion(),u=>this.onError(u));return Object.assign(i,{ui:this})}onCompletion(){return this.close(),this.answers}onError(r){return this.close(),Promise.reject(r)}processQuestion(r){return r={...r},(0,B.defer)(()=>(0,B.of)(r).pipe((0,B.concatMap)(this.setDefaultType),(0,B.concatMap)(this.filterIfRunnable),(0,B.concatMap)(n=>ll(n,"message",this.answers)),(0,B.concatMap)(n=>ll(n,"default",this.answers)),(0,B.concatMap)(n=>ll(n,"choices",this.answers)),(0,B.concatMap)(n=>("choices"in n&&(n.choices=n.choices.map(i=>typeof i=="string"?{name:i,value:i}:i)),(0,B.of)(n))),(0,B.concatMap)(n=>this.fetchAnswer(n))))}fetchAnswer(r){let t=this.prompts[r.type];if(t==null)throw new Error(`Prompt for type ${r.type} not found`);return DS(t)?(0,B.defer)(()=>{let n=f1.default.createInterface(xS(this.opt));n.resume();let i=()=>{n.removeListener("SIGINT",this.onForceClose),n.setPrompt(""),n.output.unmute(),n.output.write(d1.default.cursorShow),n.output.end(),n.close()};this.onClose=i,this.rl=n,process.on("exit",this.onForceClose),n.on("SIGINT",this.onForceClose);let u=new t(r,n,this.answers);return(0,B.from)(u.run().then(o=>(i(),this.onClose=void 0,this.rl=void 0,{name:r.name,answer:o})))}):(0,B.defer)(()=>(0,B.from)(t(r,this.opt).then(n=>({name:r.name,answer:n}))))}onForceClose=()=>{this.close(),process.kill(process.pid,"SIGINT"),console.log("")};close=()=>{process.removeListener("exit",this.onForceClose),typeof this.onClose=="function"&&this.onClose()};setDefaultType=r=>(this.prompts[r.type]||(r.type="input"),(0,B.defer)(()=>(0,B.of)(r)));filterIfRunnable=r=>{if(r.askAnswered!==!0&&l1.get(this.answers,r.name)!==void 0)return B.EMPTY;let{when:t}=r;return t===!1?B.EMPTY:typeof t!="function"?(0,B.of)(r):(0,B.defer)(()=>(0,B.from)((0,xl.default)(t)(this.answers).then(n=>{if(n)return r})).pipe((0,B.filter)(n=>n!=null)))}};var D1={input:$s,select:Ui,list:Ui,number:Vs,confirm:Us,rawlist:Ks,expand:Gs,checkbox:Qa,password:Ys,editor:Ns};function h1(e){function r(t,n){let i=new sn(r.prompts,e);try{return i.run(t,n)}catch(u){let o=Promise.reject(u);return Object.assign(o,{ui:i})}}return r.prompts={...D1},r.registerPrompt=function(t,n){return r.prompts[t]=n,this},r.restoreDefaultPrompts=function(){r.prompts={...D1}},r}var dl=h1();function hS(e,r){dl.registerPrompt(e,r)}function pS(){dl.restoreDefaultPrompts()}var mS={prompt:dl,ui:{Prompt:sn},createPromptModule:h1,registerPrompt:hS,restoreDefaultPrompts:pS,Separator:ue},p1=mS;var Xn=q(require("node:process"),1);var ml=q(require("node:process"),1);var A1=q(require("node:process"),1),O1=q(E1(),1),S1=q(w1(),1),bS=(0,O1.default)(()=>{(0,S1.default)(()=>{A1.default.stderr.write("\x1B[?25h")},{alwaysLast:!0})}),B1=bS;var ia=!1,xn={};xn.show=(e=ml.default.stderr)=>{e.isTTY&&(ia=!1,e.write("\x1B[?25h"))};xn.hide=(e=ml.default.stderr)=>{e.isTTY&&(B1(),ia=!0,e.write("\x1B[?25l"))};xn.toggle=(e,r)=>{e!==void 0&&(ia=e),ia?xn.show(r):xn.hide(r)};var vl=xn;var Zn=q(Di(),1);var ge=q(require("node:process"),1);function bl(){return ge.default.platform!=="win32"?ge.default.env.TERM!=="linux":!!ge.default.env.CI||!!ge.default.env.WT_SESSION||!!ge.default.env.TERMINUS_SUBLIME||ge.default.env.ConEmuTask==="{cmd::Cmder}"||ge.default.env.TERM_PROGRAM==="Terminus-Sublime"||ge.default.env.TERM_PROGRAM==="vscode"||ge.default.env.TERM==="xterm-256color"||ge.default.env.TERM==="alacritty"||ge.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var ES={info:ie.blue("\u2139"),success:ie.green("\u2714"),warning:ie.yellow("\u26A0"),error:ie.red("\u2716")},FS={info:ie.blue("i"),success:ie.green("\u221A"),warning:ie.yellow("\u203C"),error:ie.red("\xD7")},_S=bl()?ES:FS,Jn=_S;function El({onlyFirst:e=!1}={}){let r=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(r,e?void 0:"g")}var yS=El();function Qn(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(yS,"")}function q1(e){return e===161||e===164||e===167||e===168||e===170||e===173||e===174||e>=176&&e<=180||e>=182&&e<=186||e>=188&&e<=191||e===198||e===208||e===215||e===216||e>=222&&e<=225||e===230||e>=232&&e<=234||e===236||e===237||e===240||e===242||e===243||e>=247&&e<=250||e===252||e===254||e===257||e===273||e===275||e===283||e===294||e===295||e===299||e>=305&&e<=307||e===312||e>=319&&e<=322||e===324||e>=328&&e<=331||e===333||e===338||e===339||e===358||e===359||e===363||e===462||e===464||e===466||e===468||e===470||e===472||e===474||e===476||e===593||e===609||e===708||e===711||e>=713&&e<=715||e===717||e===720||e>=728&&e<=731||e===733||e===735||e>=768&&e<=879||e>=913&&e<=929||e>=931&&e<=937||e>=945&&e<=961||e>=963&&e<=969||e===1025||e>=1040&&e<=1103||e===1105||e===8208||e>=8211&&e<=8214||e===8216||e===8217||e===8220||e===8221||e>=8224&&e<=8226||e>=8228&&e<=8231||e===8240||e===8242||e===8243||e===8245||e===8251||e===8254||e===8308||e===8319||e>=8321&&e<=8324||e===8364||e===8451||e===8453||e===8457||e===8467||e===8470||e===8481||e===8482||e===8486||e===8491||e===8531||e===8532||e>=8539&&e<=8542||e>=8544&&e<=8555||e>=8560&&e<=8569||e===8585||e>=8592&&e<=8601||e===8632||e===8633||e===8658||e===8660||e===8679||e===8704||e===8706||e===8707||e===8711||e===8712||e===8715||e===8719||e===8721||e===8725||e===8730||e>=8733&&e<=8736||e===8739||e===8741||e>=8743&&e<=8748||e===8750||e>=8756&&e<=8759||e===8764||e===8765||e===8776||e===8780||e===8786||e===8800||e===8801||e>=8804&&e<=8807||e===8810||e===8811||e===8814||e===8815||e===8834||e===8835||e===8838||e===8839||e===8853||e===8857||e===8869||e===8895||e===8978||e>=9312&&e<=9449||e>=9451&&e<=9547||e>=9552&&e<=9587||e>=9600&&e<=9615||e>=9618&&e<=9621||e===9632||e===9633||e>=9635&&e<=9641||e===9650||e===9651||e===9654||e===9655||e===9660||e===9661||e===9664||e===9665||e>=9670&&e<=9672||e===9675||e>=9678&&e<=9681||e>=9698&&e<=9701||e===9711||e===9733||e===9734||e===9737||e===9742||e===9743||e===9756||e===9758||e===9792||e===9794||e===9824||e===9825||e>=9827&&e<=9829||e>=9831&&e<=9834||e===9836||e===9837||e===9839||e===9886||e===9887||e===9919||e>=9926&&e<=9933||e>=9935&&e<=9939||e>=9941&&e<=9953||e===9955||e===9960||e===9961||e>=9963&&e<=9969||e===9972||e>=9974&&e<=9977||e===9979||e===9980||e===9982||e===9983||e===10045||e>=10102&&e<=10111||e>=11094&&e<=11097||e>=12872&&e<=12879||e>=57344&&e<=63743||e>=65024&&e<=65039||e===65533||e>=127232&&e<=127242||e>=127248&&e<=127277||e>=127280&&e<=127337||e>=127344&&e<=127373||e===127375||e===127376||e>=127387&&e<=127404||e>=917760&&e<=917999||e>=983040&&e<=1048573||e>=1048576&&e<=1114109}function j1(e){return e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510}function P1(e){return e>=4352&&e<=4447||e===8986||e===8987||e===9001||e===9002||e>=9193&&e<=9196||e===9200||e===9203||e===9725||e===9726||e===9748||e===9749||e>=9800&&e<=9811||e===9855||e===9875||e===9889||e===9898||e===9899||e===9917||e===9918||e===9924||e===9925||e===9934||e===9940||e===9962||e===9970||e===9971||e===9973||e===9978||e===9981||e===9989||e===9994||e===9995||e===10024||e===10060||e===10062||e>=10067&&e<=10069||e===10071||e>=10133&&e<=10135||e===10160||e===10175||e===11035||e===11036||e===11088||e===11093||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=94176&&e<=94180||e===94192||e===94193||e>=94208&&e<=100343||e>=100352&&e<=101589||e>=101632&&e<=101640||e>=110576&&e<=110579||e>=110581&&e<=110587||e===110589||e===110590||e>=110592&&e<=110882||e===110898||e>=110928&&e<=110930||e===110933||e>=110948&&e<=110951||e>=110960&&e<=111355||e===126980||e===127183||e===127374||e>=127377&&e<=127386||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e===127568||e===127569||e>=127584&&e<=127589||e>=127744&&e<=127776||e>=127789&&e<=127797||e>=127799&&e<=127868||e>=127870&&e<=127891||e>=127904&&e<=127946||e>=127951&&e<=127955||e>=127968&&e<=127984||e===127988||e>=127992&&e<=128062||e===128064||e>=128066&&e<=128252||e>=128255&&e<=128317||e>=128331&&e<=128334||e>=128336&&e<=128359||e===128378||e===128405||e===128406||e===128420||e>=128507&&e<=128591||e>=128640&&e<=128709||e===128716||e>=128720&&e<=128722||e>=128725&&e<=128727||e>=128732&&e<=128735||e===128747||e===128748||e>=128756&&e<=128764||e>=128992&&e<=129003||e===129008||e>=129292&&e<=129338||e>=129340&&e<=129349||e>=129351&&e<=129535||e>=129648&&e<=129660||e>=129664&&e<=129672||e>=129680&&e<=129725||e>=129727&&e<=129733||e>=129742&&e<=129755||e>=129760&&e<=129768||e>=129776&&e<=129784||e>=131072&&e<=196605||e>=196608&&e<=262141}function gS(e){if(!Number.isSafeInteger(e))throw new TypeError(`Expected a code point, got \`${typeof e}\`.`)}function T1(e,{ambiguousAsWide:r=!1}={}){return gS(e),j1(e)||P1(e)||r&&q1(e)?2:1}var I1=q(k1(),1),CS=new Intl.Segmenter,wS=/^\p{Default_Ignorable_Code_Point}$/u;function Fl(e,r={}){if(typeof e!="string"||e.length===0)return 0;let{ambiguousIsNarrow:t=!0,countAnsiEscapeCodes:n=!1}=r;if(n||(e=Qn(e)),e.length===0)return 0;let i=0,u={ambiguousAsWide:!t};for(let{segment:o}of CS.segment(e)){let a=o.codePointAt(0);if(!(a<=31||a>=127&&a<=159)&&!(a>=8203&&a<=8207||a===65279)&&!(a>=768&&a<=879||a>=6832&&a<=6911||a>=7616&&a<=7679||a>=8400&&a<=8447||a>=65056&&a<=65071)&&!(a>=55296&&a<=57343)&&!(a>=65024&&a<=65039)&&!wS.test(o)){if((0,I1.default)().test(o)){i+=2;continue}i+=T1(a,u)}}return i}function _l({stream:e=process.stdout}={}){return!!(e&&e.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env))}var je=q(require("node:process"),1);function yl(){return je.default.platform!=="win32"?je.default.env.TERM!=="linux":!!je.default.env.WT_SESSION||!!je.default.env.TERMINUS_SUBLIME||je.default.env.ConEmuTask==="{cmd::Cmder}"||je.default.env.TERM_PROGRAM==="Terminus-Sublime"||je.default.env.TERM_PROGRAM==="vscode"||je.default.env.TERM==="xterm-256color"||je.default.env.TERM==="alacritty"||je.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var Pe=q(require("node:process"),1),AS=3,gl=class{#i=0;start(){this.#i++,this.#i===1&&this.#t()}stop(){if(this.#i<=0)throw new Error("`stop` called more times than `start`");this.#i--,this.#i===0&&this.#e()}#t(){Pe.default.platform==="win32"||!Pe.default.stdin.isTTY||(Pe.default.stdin.setRawMode(!0),Pe.default.stdin.on("data",this.#u),Pe.default.stdin.resume())}#e(){Pe.default.stdin.isTTY&&(Pe.default.stdin.off("data",this.#u),Pe.default.stdin.pause(),Pe.default.stdin.setRawMode(!1))}#u(r){r[0]===AS&&Pe.default.emit("SIGINT")}},OS=new gl,Cl=OS;var SS=q(Di(),1),wl=class{#i=0;#t=!1;#e=0;#u=0;#r;#o;#n;#x;#d;#c;#l;#f;#h;#a;#s;color;constructor(r){typeof r=="string"&&(r={text:r}),this.#r={color:"cyan",stream:Xn.default.stderr,discardStdin:!0,hideCursor:!0,...r},this.color=this.#r.color,this.spinner=this.#r.spinner,this.#d=this.#r.interval,this.#n=this.#r.stream,this.#c=typeof this.#r.isEnabled=="boolean"?this.#r.isEnabled:_l({stream:this.#n}),this.#l=typeof this.#r.isSilent=="boolean"?this.#r.isSilent:!1,this.text=this.#r.text,this.prefixText=this.#r.prefixText,this.suffixText=this.#r.suffixText,this.indent=this.#r.indent,Xn.default.env.NODE_ENV==="test"&&(this._stream=this.#n,this._isEnabled=this.#c,Object.defineProperty(this,"_linesToClear",{get(){return this.#i},set(t){this.#i=t}}),Object.defineProperty(this,"_frameIndex",{get(){return this.#u}}),Object.defineProperty(this,"_lineCount",{get(){return this.#e}}))}get indent(){return this.#f}set indent(r=0){if(!(r>=0&&Number.isInteger(r)))throw new Error("The `indent` option must be an integer from 0 and up");this.#f=r,this.#D()}get interval(){return this.#d??this.#o.interval??100}get spinner(){return this.#o}set spinner(r){if(this.#u=0,this.#d=void 0,typeof r=="object"){if(r.frames===void 0)throw new Error("The given spinner must have a `frames` property");this.#o=r}else if(!yl())this.#o=Zn.default.line;else if(r===void 0)this.#o=Zn.default.dots;else if(r!=="default"&&Zn.default[r])this.#o=Zn.default[r];else throw new Error(`There is no built-in spinner named '${r}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`)}get text(){return this.#h}set text(r=""){this.#h=r,this.#D()}get prefixText(){return this.#a}set prefixText(r=""){this.#a=r,this.#D()}get suffixText(){return this.#s}set suffixText(r=""){this.#s=r,this.#D()}get isSpinning(){return this.#x!==void 0}#p(r=this.#a,t=" "){return typeof r=="string"&&r!==""?r+t:typeof r=="function"?r()+t:""}#m(r=this.#s,t=" "){return typeof r=="string"&&r!==""?t+r:typeof r=="function"?t+r():""}#D(){let r=this.#n.columns??80,t=this.#p(this.#a,"-"),n=this.#m(this.#s,"-"),i=" ".repeat(this.#f)+t+"--"+this.#h+"--"+n;this.#e=0;for(let u of Qn(i).split(` `))this.#e+=Math.max(1,Math.ceil(Fl(u,{countAnsiEscapeCodes:!0})/r))}get isEnabled(){return this.#c&&!this.#l}set isEnabled(r){if(typeof r!="boolean")throw new TypeError("The `isEnabled` option must be a boolean");this.#c=r}get isSilent(){return this.#l}set isSilent(r){if(typeof r!="boolean")throw new TypeError("The `isSilent` option must be a boolean");this.#l=r}frame(){let{frames:r}=this.#o,t=r[this.#u];this.color&&(t=ie[this.color](t)),this.#u=++this.#u%r.length;let n=typeof this.#a=="string"&&this.#a!==""?this.#a+" ":"",i=typeof this.text=="string"?" "+this.text:"",u=typeof this.#s=="string"&&this.#s!==""?" "+this.#s:"";return n+t+i+u}clear(){if(!this.#c||!this.#n.isTTY)return this;this.#n.cursorTo(0);for(let r=0;r0&&this.#n.moveCursor(0,-1),this.#n.clearLine(1);return(this.#f||this.lastIndent!==this.#f)&&this.#n.cursorTo(this.#f),this.lastIndent=this.#f,this.#i=0,this}render(){return this.#l?this:(this.clear(),this.#n.write(this.frame()),this.#i=this.#e,this)}start(r){return r&&(this.text=r),this.#l?this:this.#c?this.isSpinning?this:(this.#r.hideCursor&&vl.hide(this.#n),this.#r.discardStdin&&Xn.default.stdin.isTTY&&(this.#t=!0,Cl.start()),this.render(),this.#x=setInterval(this.render.bind(this),this.interval),this):(this.text&&this.#n.write(`- ${this.text} `),this)}stop(){return this.#c?(clearInterval(this.#x),this.#x=void 0,this.#u=0,this.clear(),this.#r.hideCursor&&vl.show(this.#n),this.#r.discardStdin&&Xn.default.stdin.isTTY&&this.#t&&(Cl.stop(),this.#t=!1),this):this}succeed(r){return this.stopAndPersist({symbol:Jn.success,text:r})}fail(r){return this.stopAndPersist({symbol:Jn.error,text:r})}warn(r){return this.stopAndPersist({symbol:Jn.warning,text:r})}info(r){return this.stopAndPersist({symbol:Jn.info,text:r})}stopAndPersist(r={}){if(this.#l)return this;let t=r.prefixText??this.#a,n=this.#p(t," "),i=r.symbol??" ",u=r.text??this.text,o=typeof u=="string"?" "+u:"",a=r.suffixText??this.#s,s=this.#m(a," "),c=n+i+o+s+` -`;return this.stop(),this.#n.write(c),this}};function ei(e){return new wl(e)}var R1=require("child_process"),dn=q(require("fs"),1),ua=q(require("path"),1);function L1(){return __dirname}var Dn=(e,r)=>{(0,R1.execSync)(`cd ${e} && ${r}`,{stdio:"inherit"})},Te=(e,r)=>{let t=ua.default.join(L1(),`../templates/${r}`);dn.default.copyFile(t,e,n=>{if(n){console.error(`Error copying file: ${n.message}`);return}})},oa=(e,r)=>{let t=ua.default.join(L1(),`../templates/${r}`);dn.default.cpSync(t,e,{recursive:!0},n=>{if(n){console.error(`Error copying file: ${n.message}`);return}})},N1=e=>{dn.default.rmSync(e,{recursive:!0,force:!0},r=>{if(r){console.error(`Error removing directory: ${r.message}`);return}})},U1=e=>{let r={"android:connect":"cd apps/mobile && npm run android:connect","check-env:mobile":"./check-env.sh apps/mobile/.env apps/mobile/.env.template",clean:"./clean-generated-outputs.sh","create-env":"printenv > ","lint:all":"npx nx run-many -t lint -p mobile --parallel=1 --skip-nx-cache","lint:mobile":"npx nx run mobile:lint --skip-nx-cache","mobile-android":"cd apps/mobile && npm run run-android","mobile-ios":"cd apps/mobile && npm run run-ios",prepare:"husky install","serve:mobile":"cd apps/mobile && npm start","serve:all":"npx nx run-many -t serve -p mobile --parallel=1 --skip-nx-cache",xcode:"cd apps/mobile && npm run xcode","setup-fastlane":"cd apps/mobile && npm run setup-fastlane","deploy-android:dev":"cd apps/mobile && npm run deploy-android:dev","deploy-ios:dev":"cd apps/mobile && npm run deploy-ios:dev","ios-certificates":"cd apps/mobile && npm run ios-certificates"},t=ua.default.join(e,"package.json"),n=JSON.parse(dn.default.readFileSync(t,"utf8"));n.scripts={...n.scripts,...r},dn.default.writeFileSync(t,JSON.stringify(n,null,2))};oi.name("React Native Starter with NX").description("A starter script to create a new React Native project with NX").version("1.0.0");oi.command("create [workspace_name]").description("create nx workspace with react-native").action(async e=>{e||(e=(await p1.prompt([{type:"input",name:"workspace_name",message:"Enter the workspace name"}])).workspace_name);let r=process.cwd(),t=`${r}/${e}`;console.log(ie.green(`Creating Nx workspace in ./${e}!`));let n=ei().start("Creating Nx workspace");(0,$1.execSync)(`cd ${r} && npx create-nx-workspace@19.4.4 --preset apps --workspaceType integrated --name ${e} --nxCloud skip`,{stdio:"inherit"}),n.succeed("Nx workspace created");let i=ei().start("Adding React Native");Dn(t,"npm i -D @nx/react-native@17.3.0 --ignore-scripts",{stdio:"inherit"}),Dn(t,"npx nx g @nx/react-native:app apps/mobile --skip-nx-cache",{stdio:"inherit"}),Dn(t,"npm install --save-dev react-native-dotenv husky prettier@3.3.2 @typescript-eslint/parser@6.21.0 eslint-config-airbnb-typescript@17.1.0 eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-react-perf eslint-plugin-sonarjs@0.25.1 @tanstack/eslint-plugin-query eslint-plugin-tailwindcss eslint-config-prettier @typescript-eslint/eslint-plugin@6.13.2 eslint-plugin-import eslint-plugin-sort-destructure-keys eslint-plugin-sort-keys-fix eslint-plugin-prettier prettier-plugin-tailwindcss eslint-import-resolver-typescript @swc-node/register@~1.8.0",{stdio:"inherit"}),Dn(t,"npm install tailwindcss twrnc react-native-keyboard-aware-scroll-view react-native-safe-area-context @react-navigation/core @react-navigation/native @react-navigation/native-stack @react-navigation/routers @react-navigation/stack react-native-gesture-handler react-native-screens react-native-reanimated dayjs zustand jotai @tanstack/query-core @tanstack/query-sync-storage-persister @tanstack/react-query @tanstack/react-query-persist-client axios jotai-optics lodash react-hook-form react-native-fast-image react-native-get-random-values react-native-simple-toast react-native-url-polyfill zod zod-validation-error @react-native-async-storage/async-storage @react-native-community/hooks @gorhom/bottom-sheet @hookform/resolvers @react-native-community/datetimepicker @react-navigation/material-top-tabs @tanstack/query-async-storage-persister babel-plugin-module-resolver react-native-dotenv react-native-mmkv react-native-modal-datetime-picker react-native-pager-view react-native-modal react-native-svg-transformer react-native-url-polyfill uuid",{stdio:"inherit"}),i.succeed("React Native added");let u=ei().start("Adding files");oa(`${t}/.vscode`,".vscode"),oa(`${t}/.husky`,".husky"),Te(`${t}/.prettierrc`,".prettierrc"),Te(`${t}/.prettierignore`,".prettierignore"),Te(`${t}/.eslintrc.json`,".eslintrc.json"),Te(`${t}/.eslintrc.json`,".eslintrc.json"),Te(`${t}/.gitignore`,".ignorefile"),Te(`${t}/.ruby-version`,".ruby-version"),Te(`${t}/.nvmrc`,".nvmrc"),Te(`${t}/check-env.sh`,"check-env.sh"),Te(`${t}/clean-generated-outputs.sh`,"clean-generated-outputs.sh"),N1(`${t}/apps/mobile/src`),oa(`${t}/apps`,"apps"),Te(`${t}/apps/mobile/.gitignore`,".ignorefile"),Dn(t,`keytool -genkey -keystore ${t}/apps/mobile/android/app/dev.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias dev -dname "cn=Unknown, ou=Unknown, o=Unknown, c=Unknown" -storepass development -keypass development`,{stdio:"inherit"}),U1(t),u.succeed("Files added"),console.log(ie.green("Project created successfully!")),console.log(ie.blue("Next Steps? Rename your app using https://www.npmjs.com/package/react-native-rename")),console.log(ie.blue("Don't forget to wide search for 'AppsMobile' and replace it with your app name")),console.log(ie.blue("Run `npm run serve:mobile` to start the project! Happy coding!"))});oi.parse(process.argv); +`;return this.stop(),this.#n.write(c),this}};function ei(e){return new wl(e)}var R1=require("child_process"),dn=q(require("fs"),1),ua=q(require("path"),1);function L1(){return __dirname}var Dn=(e,r)=>{(0,R1.execSync)(`cd ${e} && ${r}`,{stdio:"inherit"})},Te=(e,r)=>{let t=ua.default.join(L1(),`../templates/${r}`);dn.default.copyFile(t,e,n=>{if(n){console.error(`Error copying file: ${n.message}`);return}})},oa=(e,r)=>{let t=ua.default.join(L1(),`../templates/${r}`);dn.default.cpSync(t,e,{recursive:!0},n=>{if(n){console.error(`Error copying file: ${n.message}`);return}})},N1=e=>{dn.default.rmSync(e,{recursive:!0,force:!0},r=>{if(r){console.error(`Error removing directory: ${r.message}`);return}})},U1=e=>{let r={android:"npx nx run-android mobile --skip-nx-cache","android:connect":"cd apps/mobile && npm run android:connect","check-env:mobile":"./check-env.sh apps/mobile/.env apps/mobile/.env.template",clean:"./clean-generated-outputs.sh","create-env":"printenv > ","lint:all":"npx nx run-many -t lint -p mobile --parallel=1 --skip-nx-cache","lint:mobile":"npx nx run mobile:lint --skip-nx-cache","mobile-android":"cd apps/mobile && npm run run-android","mobile-ios":"cd apps/mobile && npm run run-ios",prepare:"husky install","serve:mobile":"cd apps/mobile && npm start","serve:all":"npx nx run-many -t serve -p mobile --parallel=1 --skip-nx-cache",xcode:"cd apps/mobile && npm run xcode","setup-fastlane":"cd apps/mobile && npm run setup-fastlane","deploy-android:dev":"cd apps/mobile && npm run deploy-android:dev","deploy-ios:dev":"cd apps/mobile && npm run deploy-ios:dev","ios-certificates":"cd apps/mobile && npm run ios-certificates"},t={"react-native":"0.74.4"},n=ua.default.join(e,"package.json"),i=JSON.parse(dn.default.readFileSync(n,"utf8"));i.scripts={...i.scripts,...r},i.dependencies={...i.dependencies,...t},dn.default.writeFileSync(n,JSON.stringify(i,null,2))};oi.name("React Native Starter with NX").description("A starter script to create a new React Native project with NX").version("1.0.0");oi.command("create [workspace_name]").description("create nx workspace with react-native").action(async e=>{e||(e=(await p1.prompt([{type:"input",name:"workspace_name",message:"Enter the workspace name"}])).workspace_name);let r=process.cwd(),t=`${r}/${e}`;console.log(ie.green(`Creating Nx workspace in ./${e}!`));let n=ei().start("Creating Nx workspace");(0,$1.execSync)(`cd ${r} && npx create-nx-workspace@19.4.4 --preset apps --workspaceType integrated --name ${e} --nxCloud skip`,{stdio:"inherit"}),n.succeed("Nx workspace created");let i=ei().start("Adding React Native");Dn(t,"npm i -D @nx/react-native@17.3.0 --ignore-scripts",{stdio:"inherit"}),Dn(t,"npx nx g @nx/react-native:app apps/mobile --skip-nx-cache",{stdio:"inherit"}),Dn(t,"npm install --save-dev react-native-dotenv husky prettier@3.3.2 @typescript-eslint/parser@6.21.0 eslint-config-airbnb-typescript@17.1.0 eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-react-perf eslint-plugin-sonarjs@0.25.1 @tanstack/eslint-plugin-query eslint-plugin-tailwindcss eslint-config-prettier @typescript-eslint/eslint-plugin@6.13.2 eslint-plugin-import eslint-plugin-sort-destructure-keys eslint-plugin-sort-keys-fix eslint-plugin-prettier prettier-plugin-tailwindcss eslint-import-resolver-typescript @swc-node/register@~1.8.0",{stdio:"inherit"}),Dn(t,"npm install tailwindcss twrnc react-native-keyboard-aware-scroll-view react-native-safe-area-context @react-navigation/core @react-navigation/native @react-navigation/native-stack @react-navigation/routers @react-navigation/stack react-native-gesture-handler react-native-screens react-native-reanimated dayjs zustand jotai @tanstack/query-core @tanstack/query-sync-storage-persister @tanstack/react-query @tanstack/react-query-persist-client axios jotai-optics lodash react-hook-form react-native-fast-image react-native-get-random-values react-native-simple-toast react-native-url-polyfill zod zod-validation-error @react-native-async-storage/async-storage @react-native-community/hooks @gorhom/bottom-sheet @hookform/resolvers @react-native-community/datetimepicker @react-navigation/material-top-tabs @tanstack/query-async-storage-persister babel-plugin-module-resolver react-native-dotenv react-native-mmkv react-native-modal-datetime-picker react-native-pager-view react-native-modal react-native-svg-transformer react-native-url-polyfill uuid",{stdio:"inherit"}),i.succeed("React Native added");let u=ei().start("Adding files");oa(`${t}/.vscode`,".vscode"),oa(`${t}/.husky`,".husky"),Te(`${t}/.prettierrc`,".prettierrc"),Te(`${t}/.prettierignore`,".prettierignore"),Te(`${t}/.eslintrc.json`,".eslintrc.json"),Te(`${t}/.eslintrc.json`,".eslintrc.json"),Te(`${t}/.gitignore`,".ignorefile"),Te(`${t}/.ruby-version`,".ruby-version"),Te(`${t}/.nvmrc`,".nvmrc"),Te(`${t}/check-env.sh`,"check-env.sh"),Te(`${t}/clean-generated-outputs.sh`,"clean-generated-outputs.sh"),N1(`${t}/apps/mobile/src`),oa(`${t}/apps`,"apps"),Te(`${t}/apps/mobile/.gitignore`,".ignorefile"),Dn(t,`keytool -genkey -keystore ${t}/apps/mobile/android/app/dev.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias dev -dname "cn=Unknown, ou=Unknown, o=Unknown, c=Unknown" -storepass development -keypass development`,{stdio:"inherit"}),U1(t),u.succeed("Files added"),console.log(ie.green("Project created successfully!")),console.log(ie.blue("Next Steps? Rename your app using https://www.npmjs.com/package/react-native-rename")),console.log(ie.blue("Don't forget to wide search for 'AppsMobile' and replace it with your app name")),console.log(ie.blue("Run `npm run serve:mobile` to start the project! Happy coding!"))});oi.parse(process.argv); /*! Bundled license information: tmp/lib/tmp.js: diff --git a/src/utils/index.js b/src/utils/index.js index a3cf4ef..d2cd210 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -43,6 +43,7 @@ export const removeDir = (dir) => { export const addScriptsInRootPackageJson = (dir) => { const scripts = { + android: 'npx nx run-android mobile --skip-nx-cache', 'android:connect': 'cd apps/mobile && npm run android:connect', 'check-env:mobile': './check-env.sh apps/mobile/.env apps/mobile/.env.template', clean: './clean-generated-outputs.sh', @@ -60,12 +61,16 @@ export const addScriptsInRootPackageJson = (dir) => { 'deploy-ios:dev': 'cd apps/mobile && npm run deploy-ios:dev', 'ios-certificates': 'cd apps/mobile && npm run ios-certificates', }; + const dependencies = { + 'react-native': '0.74.4', + }; const packageJsonPath = path.join(dir, 'package.json'); const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); packageJson.scripts = { ...packageJson.scripts, ...scripts }; + packageJson.dependencies = { ...packageJson.dependencies, ...dependencies }; fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)); }; diff --git a/templates/apps/mobile/android/app/build.gradle b/templates/apps/mobile/android/app/build.gradle index 898a779..a142b3e 100644 --- a/templates/apps/mobile/android/app/build.gradle +++ b/templates/apps/mobile/android/app/build.gradle @@ -92,18 +92,24 @@ android { storePassword 'development' keyAlias 'dev' keyPassword 'development' + v1SigningEnabled true + v2SigningEnabled true } dev { storeFile file('dev.keystore') storePassword 'development' keyAlias 'dev' keyPassword 'development' + v1SigningEnabled true + v2SigningEnabled true } production { storeFile file('production.keystore') storePassword System.getenv("STORE_PASSWORD") keyAlias System.getenv("KEY_ALIAS") keyPassword System.getenv("KEY_PASSWORD") + v1SigningEnabled true + v2SigningEnabled true } } diff --git a/templates/apps/mobile/fastlane/Fastfile b/templates/apps/mobile/fastlane/Fastfile index 999565b..8071b7f 100644 --- a/templates/apps/mobile/fastlane/Fastfile +++ b/templates/apps/mobile/fastlane/Fastfile @@ -1,7 +1,7 @@ require 'fileutils' -def app_name = "" +def app_name = "AppsMobile" def delete_gradle_temp() UI.message("Deleting Gradle Temp...") @@ -291,10 +291,10 @@ platform :ios do lane :prod do begin build_number = setup_ios() - ios_build_ipa("Release", "Release") + ios_build_ipa("Release", app_name) # (Optional) Uncomment if you want to upload dSYM to Firebase Crashlytics # upload_dysm("Release", "Prod") - publish_ipa(build_number, "Release") + publish_ipa(build_number, app_name) rescue => exception UI.error(exception) end diff --git a/templates/apps/mobile/project.json b/templates/apps/mobile/project.json index c6efa1b..2441886 100644 --- a/templates/apps/mobile/project.json +++ b/templates/apps/mobile/project.json @@ -42,7 +42,10 @@ "run-android": { "executor": "@nx/react-native:run-android", "dependsOn": ["ensure-symlink"], - "options": {} + "options": { + "mode": "debug", + "tasks": "installDevDebug" + } }, "build-android": { "executor": "@nx/react-native:build-android", diff --git a/templates/apps/mobile/src/app/index.tsx b/templates/apps/mobile/src/app/index.tsx index 97d35de..c7ac0d1 100644 --- a/templates/apps/mobile/src/app/index.tsx +++ b/templates/apps/mobile/src/app/index.tsx @@ -18,14 +18,8 @@ LogBox.ignoreLogs(['VirtualizedLists', 'onAnimatedValueUpdate']); enableFreeze(true); -const MS_IN_S = 1000; -const S_IN_A_MIN = 60; -const MIN_IN_AN_HOUR = 60; -const HOURS_IN_A_DAY = 24; -const MS_IN_DAYS = MS_IN_S * S_IN_A_MIN * MIN_IN_AN_HOUR * HOURS_IN_A_DAY; - -const CACHE_TIME = MS_IN_DAYS * 1; -const STALE_TIME = MS_IN_S * S_IN_A_MIN * MIN_IN_AN_HOUR; // 5 minutes +const CACHE_TIME = 0; +const STALE_TIME = 0; const queryClient = new QueryClient({ defaultOptions: {