UNPKG

@calljmp/cli

Version:
2 lines (1 loc) 4.33 kB
"use strict";var S=Object.create;var g=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var w=(t,r)=>{for(var n in r)g(t,n,{get:r[n],enumerable:!0})},u=(t,r,n,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of h(r))!P.call(t,e)&&e!==n&&g(t,e,{get:()=>r[e],enumerable:!(i=A(r,e))||i.enumerable});return t};var m=(t,r,n)=>(n=t!=null?S(j(t)):{},u(r||!t||!t.__esModule?g(n,"default",{value:t,enumerable:!0}):n,t)),y=t=>u(g({},"__esModule",{value:!0}),t);var F={};w(F,{resolveProjectInfo:()=>I});module.exports=y(F);var l=m(require("fs")),s=m(require("path")),b=m(require("xml2js")),k=require("./mobile.js");async function I({projectDirectory:t}){const r=x(t);return await V(r,t)}function x(t){const r=[t,s.join(t,"android")];for(const n of r)try{if(l.existsSync(n)&&l.lstatSync(n).isDirectory()){const i=[s.join(n,"app","src","main","AndroidManifest.xml"),s.join(n,"src","main","AndroidManifest.xml")],e=[s.join(n,"app","build.gradle"),s.join(n,"app","build.gradle.kts"),s.join(n,"build.gradle"),s.join(n,"build.gradle.kts")],o=i.some(a=>l.existsSync(a)),p=e.some(a=>l.existsSync(a));if(o||p)return n}}catch{continue}throw new Error("Android project not found. Make sure you have AndroidManifest.xml or build.gradle files in your project.")}async function V(t,r){const n=(0,k.detectProjectType)(r),i=M(t);if(!i)throw new Error("AndroidManifest.xml not found in Android project.");try{const e=l.readFileSync(i,"utf8"),p=await new b.Parser({explicitArray:!1,mergeAttrs:!1}).parseStringPromise(e),a=$(t);let c=v(p);if(!c&&a.applicationId&&(c=a.applicationId),!c)throw new Error("Package name not found in AndroidManifest.xml or build.gradle. Make sure you have a valid package attribute in AndroidManifest.xml or applicationId in build.gradle.");if(!/^[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)*$/.test(c))throw new Error(`Invalid package name format: ${c}. Package names must follow Java package naming conventions.`);return{packageName:c,projectType:n,applicationId:a.applicationId||c,targetSdkVersion:a.targetSdkVersion,minSdkVersion:a.minSdkVersion,compileSdkVersion:a.compileSdkVersion}}catch(e){throw e instanceof Error?new Error(`Failed to parse Android project: ${e.message}`):new Error(`Failed to parse Android project: ${String(e)}`)}}function M(t){const r=[s.join(t,"app","src","main","AndroidManifest.xml"),s.join(t,"src","main","AndroidManifest.xml"),s.join(t,"AndroidManifest.xml")];for(const n of r)if(l.existsSync(n))return n;return null}function v(t){try{return t?.manifest?.$?.package||null}catch{return null}}function $(t){const r=[s.join(t,"app","build.gradle.kts"),s.join(t,"build.gradle.kts"),s.join(t,"app","build.gradle"),s.join(t,"build.gradle")];for(const n of r)if(l.existsSync(n))try{const i=l.readFileSync(n,"utf8"),e=n.endsWith(".gradle.kts");return E(i,e)}catch{continue}return{}}function E(t,r=!1){const n={},i=t.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,""),e=G(i,r),o=[/applicationId\s*=?\s*["']([^"']+)["']/,/applicationId\.set\s*\(\s*["']([^"']+)["']\s*\)/,/applicationId\s*=?\s*\$\{?(\w+)\}?/];for(const f of o){const d=i.match(f);if(d){n.applicationId=B(d[1],e);break}}const p=[/compileSdk\s*=?\s*(\d+)/,/compileSdkVersion\s*=?\s*(\d+)/,/compileSdk\.set\s*\(\s*(\d+)\s*\)/];for(const f of p){const d=i.match(f);if(d){n.compileSdkVersion=d[1];break}}const a=[/targetSdkVersion\s*=?\s*(\d+)/,/targetSdk\s*=?\s*(\d+)/,/targetSdkVersion\.set\s*\(\s*(\d+)\s*\)/];for(const f of a){const d=i.match(f);if(d){n.targetSdkVersion=d[1];break}}const c=[/minSdkVersion\s*=?\s*(\d+)/,/minSdk\s*=?\s*(\d+)/,/minSdkVersion\.set\s*\(\s*(\d+)\s*\)/];for(const f of c){const d=i.match(f);if(d){n.minSdkVersion=d[1];break}}return n}function G(t,r){const n={};if(r){const i=[/val\s+(\w+)\s*=\s*["']([^"']+)["']/g,/val\s+(\w+)\s+by\s+extra\s*\{\s*["']([^"']+)["']\s*\}/g];for(const e of i){let o;for(;(o=e.exec(t))!==null;)n[o[1]]=o[2]}}else{const i=[/def\s+(\w+)\s*=\s*["']([^"']+)["']/g,/ext\.(\w+)\s*=\s*["']([^"']+)["']/g,/(\w+)\s*=\s*["']([^"']+)["']/g];for(const e of i){let o;for(;(o=e.exec(t))!==null;)n[o[1]]=o[2]}}return n}function B(t,r){let n=t;return n=n.replace(/\$\{(\w+)\}/g,(i,e)=>r[e]||i),n=n.replace(/\$(\w+)/g,(i,e)=>r[e]||i),n}0&&(module.exports={resolveProjectInfo});