UNPKG

@calljmp/cli

Version:
2 lines (1 loc) 3.97 kB
"use strict";var T=Object.create;var d=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var D=(o,t)=>{for(var n in t)d(o,n,{get:t[n],enumerable:!0})},C=(o,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of I(t))!w.call(o,e)&&e!==n&&d(o,e,{get:()=>t[e],enumerable:!(r=N(t,e))||r.enumerable});return o};var m=(o,t,n)=>(n=o!=null?T(y(o)):{},C(t||!o||!o.__esModule?d(n,"default",{value:o,enumerable:!0}):n,o)),A=o=>C(d({},"__esModule",{value:!0}),o);var x={};D(x,{resolveProjectInfo:()=>L});module.exports=A(x);var p=m(require("fs")),g=m(require("path")),E=require("@bacons/xcode"),P=require("./mobile");async function L({projectDirectory:o}){const t=_(o);return R(t,o)}function _(o){const t=[o,g.join(o,"ios")];for(const n of t)if(p.existsSync(n)&&p.lstatSync(n).isDirectory()){const e=p.readdirSync(n).find(i=>i.endsWith(".xcodeproj"));if(e)return g.join(n,e)}throw new Error("Xcode project not found.")}function R(o,t){const n=g.join(o,"project.pbxproj");if(!p.existsSync(n))throw new Error("project.pbxproj not found in Xcode project.");try{const r=E.XcodeProject.open(n),e=(0,P.detectProjectType)(t),i=U(r),u=O(r),{productName:c,targetName:a}=M(r);return{bundleId:i,teamId:u,projectType:e,productName:c,targetName:a}}catch(r){throw new Error(`Failed to parse Xcode project: ${r instanceof Error?r.message:"Unknown error"}`)}}function U(o){const t=o.rootObject.props.targets,n=b(t);if(!n)throw new Error("Could not find main app target in Xcode project");const r=n.props.buildConfigurationList;if(!r?.props?.buildConfigurations)throw new Error("No build configurations found for main target");const e=r.props.buildConfigurations;let i,u,c;for(const s of e){const f=s.props.buildSettings;if(!f)continue;const l=f["PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]"];if(l)return l;s.props.name?.toLowerCase().includes("release")?u=s:s.props.name?.toLowerCase().includes("debug")&&(c=s)}const a=[u,c,...e].filter(s=>s!==void 0);for(const s of a){if(!s.props?.buildSettings)continue;const f=s.props.buildSettings.PRODUCT_BUNDLE_IDENTIFIER;if(f){i=f;break}}if(!i)throw new Error("PRODUCT_BUNDLE_IDENTIFIER not found in any build configuration");return S(i,o,n)}function b(o){if(!Array.isArray(o))return null;for(const t of o){if(!t.props?.name)continue;const n=t.props.name.toLowerCase();if(!(n.includes("test")||n.includes("uitest"))&&(n.includes("app")||t.props.productType==="com.apple.product-type.application"))return t}return o.find(t=>{const n=t.props?.name?.toLowerCase()||"";return!n.includes("test")&&!n.includes("uitest")})||null}function O(o){const t=o.rootObject.props.targets;for(const n of t){const r=n.props?.buildConfigurationList;if(r?.props?.buildConfigurations)for(const e of r.props.buildConfigurations){const i=e.props?.buildSettings;if(i?.DEVELOPMENT_TEAM)return i.DEVELOPMENT_TEAM}}}function M(o){const t=o.rootObject.props.targets,n=b(t);if(!n)return{};const r=n.props.name,e=n.props.buildConfigurationList;let i;if(e?.props?.buildConfigurations)for(const u of e.props.buildConfigurations){const c=u.props.buildSettings;if(c?.PRODUCT_NAME){i=c.PRODUCT_NAME;break}}return{productName:i,targetName:r}}function S(o,t,n){let r=o;if(r.includes("$(PRODUCT_NAME:rfc1034identifier)")){const e=j(n),i=X(e);r=r.replace(/\$\(PRODUCT_NAME:rfc1034identifier\)/g,i)}if(r.includes("$(PRODUCT_NAME)")){const e=j(n);r=r.replace(/\$\(PRODUCT_NAME\)/g,e)}if(r.includes("$(TARGET_NAME)")){const e=n.props.name||"UnknownTarget";r=r.replace(/\$\(TARGET_NAME\)/g,e)}return r}function j(o){const t=o.props.buildConfigurationList;if(t?.props?.buildConfigurations)for(const n of t.props.buildConfigurations){const r=n.props.buildSettings;if(r?.PRODUCT_NAME)return r.PRODUCT_NAME}return o.props.name||"UnknownProduct"}function X(o){return o.replace(/[^a-zA-Z0-9]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase()}0&&(module.exports={resolveProjectInfo});