@sap-ux/generator-odata-downloader 0.3.37 → 0.3.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3136,7 +3136,7 @@ ${JSON.stringify(this.changes,void 0,2)}`);let n=this.convertChanges(this.change
3136
3136
  ${i}`);let o=[" getReferentialConstraints: function (navigationProperty) {",`${i}`," return undefined;"," }"].join(`
3137
3137
  `),s=t.lastIndexOf(`
3138
3138
  };`);return s!==-1?`${t.slice(0,s)},
3139
- ${o}${t.slice(s)}`:t}pi();wP();var Gyn=require("node:fs/promises"),Hyn=require("node:path");var kyn=require("node:crypto"),Fyn=ve(zye());var Myn={name:"@sap-ux/generator-odata-downloader",displayName:"Fiori Elements Data Downloader",description:"Yeoman generator that supports download of app data, typically for mock data server use.",version:"0.3.37",repository:{type:"git",url:"https://github.com/SAP/open-ux-tools.git",directory:"packages/generator-odata-downloader"},bugs:{url:"https://github.com/SAP/open-ux-tools/issues?q=is%3Aopen+is%3Aissue+label%3Abug+label%3Aodata-download"},license:"Apache-2.0",main:"generators/app/index.js",keywords:["yeoman-generator"],scripts:{build:"npm-run-all clean bundle:prod",compile:"tsc --build",clean:"rimraf --glob generators prebuilds test/test-output coverage *.tsbuildinfo",watch:"tsc --watch",lint:"eslint","lint:fix":"eslint --fix",test:"cross-env NODE_OPTIONS='--experimental-vm-modules' jest --ci --forceExit --detectOpenHandles --colors","test-u":"cross-env NODE_OPTIONS='--experimental-vm-modules' jest --ci --forceExit --detectOpenHandles --colors -u",link:"pnpm link --global",unlink:"pnpm unlink --global",bundle:"node esbuild.mjs","bundle:dev":"pnpm clean && node esbuild.mjs --development && pnpm pack","bundle:prod":"node esbuild.mjs --production"},files:["LICENSE","generators","!generators/*.map","!generators/**/*.map","prebuilds","yeoman.png"],devDependencies:{"@jest/globals":"30.4.1"},dependencies:{"@sap-devx/yeoman-ui-types":"1.25.1","@sap-ux/annotation-converter":"0.10.21","@sap-ux/axios-extension":"workspace:*","@sap-ux/btp-utils":"workspace:*","@sap-ux/edmx-parser":"0.10.0","@sap-ux/fiori-generator-shared":"workspace:*","@sap-ux/inquirer-common":"workspace:*","@sap-ux/logger":"workspace:*","@sap-ux/mockserver-config-writer":"workspace:*","@sap-ux/odata-service-inquirer":"workspace:*","@sap-ux/odata-service-writer":"workspace:*","@sap-ux/project-access":"workspace:*","@sap-ux/store":"workspace:*","@sap-ux/telemetry":"workspace:*","@sap-ux/ui5-config":"workspace:*","@sap-ux/vocabularies-types":"0.15.0","@sap/ux-specification":"1.144.5","@types/inquirer":"8.2.6","@types/yeoman-generator":"5.2.14","@vscode-logging/logger":"2.0.9",deepmerge:"4.3.1",i18next:"26.3.6",inquirer:"8.2.7","odata-query":"8.0.5","os-name":"4.0.1",rimraf:"6.1.3","xml-formatter":"3.7.0","yeoman-generator":"5.10.0"},engines:{node:">=22.x"}};var yCs="@sap-ux/odata-download-sub-generator",vCs="0a65e45d-6bf4-421d-b845-61e888c50e9e",Pf=class{static _telemetryData;static _sessionId;static async initTelemetrySettings(e){this._sessionId=(0,kyn.randomUUID)(),un.logger.info(`Telemetry session initialized with ID: ${this._sessionId}`);let r={consumerModule:{name:yCs,version:Myn.version},watchTelemetrySettingStore:!1,internalFeature:!0,resourceId:vCs,...e};try{await u9(r)}catch(n){un.logger.error(`Error initializing telemetry settings: ${n}`)}}static createTelemetryData(e){if(!this._telemetryData){let r=vr("telemetry.unknownOs");try{r=(0,Fyn.default)()}catch{}this._telemetryData={Platform:gi()?"SBAS":"VSCode",OperatingSystem:r,SessionId:this._sessionId}}return this._telemetryData=Object.assign(this._telemetryData,e),this._telemetryData}static prepareTelemetryEvent(e,r){return{eventName:e,properties:r,measurements:{}}}static async sendTelemetry(e,r){let n=this.createTelemetryData(r),i=this.prepareTelemetryEvent(e,n);await dm.getTelemetryClient().reportEvent(i,La.NoSampling)}};var _Cs=["eq","ne","gt","ge","lt","le"],rCe=["and","or","not"],ECs=["any","all"],bCs=["startswith","endswith","contains","matchespattern"],TCs=["expand","levels","select","skip","top","count","orderby","filter"],$yn=/\((.*)\)/,Uyn=/(?!indexof)\((\w+)\)/;var L0="";function Nft({select:t,search:e,skiptoken:r,format:n,top:i,skip:o,filter:s,transform:a,orderBy:c,key:u,count:l,expand:p,action:f,func:h}={}){let d="",m=[],v={};if(u!=null&&(d+=`(${ST(u,m)})`),(s||typeof l=="object")&&(v.$filter=iCe(typeof l=="object"?l:s,m)),a&&(v.$apply=qyn(a)),p&&(v.$expand=nCe(p)),c&&(v.$orderby=Rft(c)),l&&(typeof l=="boolean"?v.$count=!0:d+="/$count"),typeof i=="number"&&(v.$top=i),typeof o=="number"&&(v.$skip=o),f&&(d+=`/${f}`),h){if(typeof h=="string")d+=`/${h}`;else if(typeof h=="object"){let[E]=Object.keys(h),S=ST(h[E],m);d+=`/${E}`,S!==""&&(d+=`(${S})`)}}return m.length>0&&Object.assign(v,m.reduce((E,S)=>Object.assign(E,{[`@${S.name}`]:ST(S.value)}),{})),PCs(d,{$select:t,$search:e,$skiptoken:r,$format:n,...v})}function Dft(t,e,r=[]){return`${t} eq ${ST(e,r)}`}function iCe(t={},e=[],r=""){return(Array.isArray(t)?t:[t]).reduce((o,s)=>{if(s){let a=n(s,e,r);a&&o.push(a)}return o},[]).join(" and ");function n(o={},s=[],a=""){let c="";return typeof o=="string"?c=o:o&&typeof o=="object"&&(c=Object.keys(o).reduce((u,l)=>{let p=o[l];if(p===void 0)return u;let f="";if(a?l===L0?f=a:Uyn.test(l)?f=l.replace(Uyn,(h,d)=>d.trim()===L0?`(${a})`:`(${a}/${d.trim()})`):$yn.test(l)?f=l.replace($yn,(h,d)=>d.trim()===L0?`(${a})`:`(${a}/${d.trim()})`):f=`${a}/${l}`:f=l,l===L0&&Array.isArray(p))return u.concat(p.map(h=>Dft(f,h)));if(["number","string","boolean"].indexOf(typeof p)!==-1||p instanceof Date||p===null)u.push(Dft(f,p,s));else if(Array.isArray(p)){let h=l,d=p.map(m=>iCe(m,s,a)).filter(m=>m).map(m=>rCe.indexOf(h)!==-1?`(${m})`:m);d.length&&(rCe.indexOf(h)!==-1?d.length&&(h==="not"?u.push(Vyn(d)):u.push(`(${d.join(` ${h} `)})`)):u.push(d.join(` ${h} `)))}else if(rCe.indexOf(f)!==-1){let h=f,d=Object.keys(p).map(m=>n({[m]:p[m]}));d.length&&(h==="not"?u.push(Vyn(d)):u.push(`(${d.join(` ${h} `)})`))}else if(typeof p=="object")"type"in p?u.push(Dft(f,p,s)):Object.keys(p).forEach(h=>{if(p[h]!==void 0)if(_Cs.indexOf(h)!==-1)u.push(`${f} ${h} ${ST(p[h],s)}`);else if(rCe.indexOf(h)!==-1)Array.isArray(p[h])?u.push(p[h].map(d=>"("+n(d,s,f)+")").join(` ${h} `)):u.push("("+n(p[h],s,f)+")");else if(ECs.indexOf(h)!==-1){let d=i(l.toLowerCase(),p[h],h,f);d&&u.push(d)}else if(h==="has")u.push(`${f} ${h} ${ST(p[h],s)}`);else if(h==="in"){let d=Array.isArray(p[h])?p[h]:p[h].value.map(m=>({type:p[h].type,value:m}));u.push(f+" in ("+d.map(m=>ST(m,s)).join(",")+")")}else if(bCs.indexOf(h)!==-1)u.push(`${h}(${f},${ST(p[h],s)})`);else{let d=n({[h]:p[h]},s,f);d&&u.push(d)}});else throw new Error(`Unexpected value type: ${p}`);return u},[]).join(" and ")),c}function i(o,s,a,c){let u="";if(typeof s=="string"||s instanceof String)u=SCs(o,s,a,c);else if(s){let l=Array.isArray(s)?s.reduce((f,h)=>h.hasOwnProperty(L0)?(f.hasOwnProperty(L0)||(f[L0]=[]),f[L0].push(h[L0]),f):{...f,...h},{}):s,p=n(l,e,o);u=`${c}/${a}(${p?`${o}:${p}`:""})`}return u}}function SCs(t,e,r,n){let i=r=="all"?"ne":"eq";return`${n}/${r}(${t}: ${t} ${i} '${e}')`}function OCs(t){return t=t.replace(/%/g,"%25"),t=t.replace(/\+/g,"%2B"),t=t.replace(/\//g,"%2F"),t=t.replace(/\?/g,"%3F"),t=t.replace(/#/g,"%23"),t=t.replace(/&/g,"%26"),t=t.replace(/'/g,"''"),t}function ST(t,e){if(typeof t=="string")return`'${OCs(t)}'`;if(t instanceof Date)return t.toISOString();if(typeof t=="number")return t;if(Array.isArray(t))return`[${t.map(r=>ST(r)).join(",")}]`;if(t===null)return t;if(typeof t=="object")switch(t.type){case"raw":case"guid":return t.value;case"duration":return`duration'${t.value}'`;case"binary":return`binary'${t.value}'`;case"alias":return Array.isArray(e)&&e.push(t),`@${t.name}`;case"json":return escape(JSON.stringify(t.value));case"decimal":return`${t.value}M`;default:return Object.entries(t).filter(([,r])=>r!==void 0).map(([r,n])=>`${r}=${ST(n,e)}`).join(",")}return t}function nCe(t){if(typeof t=="number")return t;if(typeof t=="string")return t.indexOf("/")===-1?t:t.split("/").reverse().reduce((e,r,n,i)=>n===0?`$expand=${r}`:n===i.length-1?`${r}(${e})`:`$expand=${r}(${e})`,"");if(Array.isArray(t))return`${t.map(e=>nCe(e)).join(",")}`;if(typeof t=="object"){let e=Object.keys(t);return e.some(r=>TCs.indexOf(r.toLowerCase())!==-1)?e.map(r=>{let n;switch(r){case"filter":n=iCe(t[r]);break;case"orderBy":n=Rft(t[r]);break;case"levels":case"count":case"skip":case"top":n=`${t[r]}`;break;default:n=nCe(t[r])}return`$${r.toLowerCase()}=${n}`}).join(";"):e.map(r=>{let n=nCe(t[r]);return n?`${r}(${n})`:r}).join(",")}return""}function qyn(t){return(Array.isArray(t)?t:[t]).reduce((e,r)=>{for(let n of Object.keys(r))switch(n){case"aggregate":{let i=r[n];i&&e.push(`aggregate(${ACs(i)})`);break}case"filter":{let i=r[n];if(i){let o=iCe(i);o&&e.push(`filter(${o})`)}break}case"groupBy":{let i=r[n];i&&e.push(`groupby(${CCs(i)})`);break}default:throw new Error(`Unsupported transform: ${n}`)}return e},[]).join("/")||void 0}function ACs(t){return(Array.isArray(t)?t:[t]).map(e=>typeof e=="string"?e:Object.keys(e).map(r=>{let n=e[r];if(!n.with&&n.as)return`${r} as ${n.as}`;if(!n.with)throw new Error(`'with' property required for '${r}'`);if(!n.as)throw new Error(`'as' property required for '${r}'`);return`${r} with ${n.with} as ${n.as}`})).join(",")}function CCs(t){if(!t.properties)throw new Error("'properties' property required for groupBy");let e=`(${t.properties.join(",")})`;return t.transform&&(e+=`,${qyn(t.transform)}`),e}function Rft(t,e=""){return Array.isArray(t)?t.map(r=>Array.isArray(r)&&r.length===2&&["asc","desc"].indexOf(r[1])!==-1?r.join(" "):r).map(r=>`${e}${String(r)}`).join(","):typeof t=="object"?Object.entries(t).map(([r,n])=>Rft(n,`${r}/`)).map(r=>`${e}${r}`).join(","):`${e}${String(t)}`}function PCs(t,e){let r=Object.getOwnPropertyNames(e).filter(n=>e[n]!==void 0&&e[n]!=="").map(n=>`${n}=${e[n]}`);return r.length?`${t}?${r.join("&")}`:t}function Vyn(t){return`not (${t.join(" and ")})`}function xCs(t){let e=[];return{expands:t.reduce((n,{entityPath:i})=>{let o=i.split("/"),s=n;return o.forEach((a,c)=>{s.expand||(s.expand={}),s.expand[a]??=c===o.length-1?{}:{expand:{}},s=s.expand[a],e.includes(a)||e.push(a)}),n},{expand:{}}),entityPathParts:e}}function wCs(t,e,r=1,n){let i=e?.map(h=>({entityPath:h.fullPath,entitySetName:h.entity.entitySetName})),{expands:o,entityPathParts:s}=xCs(i),a=s.map(h=>e.find(m=>h===m.entity.entityPath?m.entity.entitySetName:void 0)?.entity.entitySetName).filter(h=>h!==void 0);un.logger.info(vr("info.entityFilesToBeGenerated",{entities:a.join(", ")}));let c=t;if(n){let h=[];c.semanticKeys.forEach(C=>{if(C.value!==void 0&&C.value!=="")if(C.type==="Edm.Boolean")h.push(`${C.name} eq ${C.value}`);else{let D=String(C.value).split(","),M=["Edm.UUID","Edm.Guid"].includes(C.type),x=F=>M?F.trim():`'${F.trim()}'`;if(D.length===1)h.push(`${C.name} eq ${x(D[0])}`);else{let F=D.map(G=>`${C.name} eq ${x(G)}`);h.push(`(${F.join(" or ")})`)}}});let d=h.length>0?`,filter(${h.join(" and ")})`:"",m=`$root/${c.entitySetName},${n.qualifier},${n.nodeProperty}`,v=`com.sap.vocabularies.Hierarchy.v1.TopLevels(HierarchyNodes=$root/${c.entitySetName},HierarchyQualifier='${n.qualifier}',NodeProperty='${n.nodeProperty}')`,E=n.isDraft?`$apply=ancestors(${m}${d},keep start)/${v}`:`$apply=${v}`,S=o?Nft(o):"",T=S?`&${S.substring(1)}`:"",O=`${c.entitySetName}?${E}${T}`;return un.logger.debug(`Query for odata: ${O}`),{query:O}}let u=[];c.semanticKeys.forEach(h=>{if(h.value!==void 0&&h.value!=="")if(["Edm.UUID","Edm.Guid"].includes(h.type)){let m=String(h.value).split(",").map(v=>({[h.name]:{type:"guid",value:v.trim()}}));u.push(m.length===1?m[0]:{or:m})}else if(h.type==="Edm.Boolean")u.push({[h.name]:String(h.value)==="true"});else if(h.type==="Edm.String"){let d=String(h.value).split(","),m=[];d.forEach(v=>{let E=v.trim().split("-");E.length===1?m.push({[h.name]:v.trim()}):E.length===2&&m.push({[h.name]:{ge:E[0].trim(),le:E[1].trim()}})}),u.push(m.length==1?m[0]:{or:m})}else u.push({[h.name]:h.value})});let l={};o&&Object.assign(l,o),u.length>0?Object.assign(l,{filter:u.length===1?u[0]:u,count:!0}):r&&Object.assign(l,{top:r});let p=Nft(l),f=`${c.entitySetName}${p}`;return un.logger.debug(`Query for odata: ${f}`),{query:f}}function DCs(t,e,r){let n=new Set(["DraftUUID","IsActiveEntity"]),i=[];for(let p of t.semanticKeys){if(p.value===void 0||p.value===""||n.has(p.name))continue;let f=p.keyName??p.name,h=String(p.value).split(",")[0].trim(),d=["Edm.UUID","Edm.Guid"].includes(p.type),m=p.type==="Edm.Boolean";i.push(`${f}=${d||m?h:`'${h}'`}`)}if(i.length===0){un.logger.debug(`buildNavPropHierarchyQuery: no key values available for '${t.entitySetName}', skipping nav-prop hierarchy query for '${e}'`);return}let o={DraftUUID:"00000000-0000-0000-0000-000000000000",IsActiveEntity:"true"};t.entityType?.keys?.filter(p=>p.name in o).forEach(p=>i.push(`${p.name}=${o[p.name]}`)),un.logger.debug(`buildNavPropHierarchyQuery: key segment for '${t.entitySetName}': (${i.join(",")})`);let a=`${`${t.entitySetName}(${i.join(",")})`}/${e}`,u=`com.sap.vocabularies.Hierarchy.v1.TopLevels(HierarchyNodes=${`$root/${a}`},HierarchyQualifier='${r.qualifier}',NodeProperty='${r.nodeProperty}')`,l=`${a}?$apply=${u}`;return un.logger.debug(`Nav-prop hierarchy query: ${l}`),l}async function Byn(t,e,r,n,i,o=[]){let s=wCs(t,r,n,i),a=await jyn(e,s.query);for(let c of o){let u=r.find(v=>v.entity.entitySetName===c.entitySetName);if(!u){un.logger.debug(`fetchData: no selected entity matched hierarchy entity '${c.entitySetName}', skipping`);continue}let l=DCs(t,u.entity.entityPath,c);if(!l){un.logger.debug(`fetchData: could not build nav-prop hierarchy query for '${c.entitySetName}', skipping`);continue}let p=await jyn(e,l);if(!p.entityData||!a.entityData){un.logger.debug(`fetchData: no data returned for nav-prop hierarchy query '${c.entitySetName}', skipping merge`);continue}un.logger.debug(`fetchData: merging ${p.entityData.length} hierarchy records into '${u.entity.entityPath}' expanded items`);let f=u.entity.entityPath,h=c.nodeProperty.split("/")[0],d=p.entityData,m=0;for(let v of a.entityData){let E=v[f];if(Array.isArray(E))for(let S of E){let T=d.find(O=>c.entityTypeKeys.every(C=>O[C]===S[C]));T&&(S[h]=T[h],m++)}}un.logger.debug(`fetchData: patched '${h}' onto ${m} expanded '${f}' records`)}return{odataResult:a}}async function jyn(t,e){try{un.logger.info(`OData query request: ${encodeURI(t.defaults.baseURL+e).replaceAll("'","%27")}`),un.logger.debug(`OData query request headers: ${JSON.stringify(t.defaults.headers)}`);let r=await t.get(e),n=r?.data?.match(/"@odata\.count":(\d+)/)?.[1];return un.logger.info(`OData query records count: ${n}`),{entityData:r?.odata()}}catch(r){let n=vr("errors.odataQueryError",{error:r});return un.logger.error(n),{error:n}}}var dh=class t{static externalServiceRequestCache={};static entityTypeRefFacetCache={};static resetExternalServiceCache(e){if(e){delete t.externalServiceRequestCache[e];return}t.externalServiceRequestCache={}}static resetRefFacetCache(){t.entityTypeRefFacetCache={}}static resetServiceCaches(){t.resetExternalServiceCache(),t.resetRefFacetCache()}};async function zyn(t,e,r){if(t.metadata&&e.appAccess&&t.connectedSystem&&t.servicePath&&e.appAccess&&e.referencedEntities){t.connectedSystem.serviceProvider.log=un.logger;let n=t.connectedSystem?.serviceProvider.service(t.servicePath);if(n){let i=Date.now();Pf.sendTelemetry("ODATA_DOWNLOAD_SEND_QUERY",{time:Date()});let o=e.referencedEntities.hierarchyEntities?.find(c=>c.entitySetName===e.referencedEntities.listEntity.entitySetName),s=e.referencedEntities.hierarchyEntities?.filter(c=>c.entitySetName!==e.referencedEntities.listEntity.entitySetName&&r.some(u=>u.entity.entitySetName===c.entitySetName))??[],{odataResult:a}=await Byn(e.referencedEntities.listEntity,n,r,o?void 0:1,o,s);if(a.entityData)return Pf.sendTelemetry("ODATA_DOWNLOAD_RECEIVED_QUERY_RESULT",{duration:`${Date.now()-i} ms`,resultSize:`${a.entityData.length} rows`}),un.logger.debug(`Got result rows: ${a.entityData.length}`),{odataQueryResult:a.entityData};if(a.error)return Pf.sendTelemetry("ODATA_DOWNLOAD_QUERY_ERRORED",{duration:`${Date.now()-i} ms`}),`${a.error}`}}return vr("errors.dataNotFetched")}function Wyn(t){let e=[];return t.Facets.forEach(r=>{if(r.$Type==="com.sap.vocabularies.UI.v1.ReferenceFacet"&&r.Target.type==="AnnotationPath"){let n=r.Target.value;n.lastIndexOf("/")>-1&&e.push(n.substring(0,n.lastIndexOf("/")))}else r.$Type==="com.sap.vocabularies.UI.v1.CollectionFacet"&&e.push(...Wyn(r))}),e}function NCs(t){if(dh.entityTypeRefFacetCache[t.name])return dh.entityTypeRefFacetCache[t.name];let e=[];return t.annotations?.UI?.Facets?.forEach(r=>{if(r.$Type==="com.sap.vocabularies.UI.v1.ReferenceFacet"&&r.Target?.type==="AnnotationPath"){let n=r.Target.value;n?.lastIndexOf("/")>-1&&e.push(n.substring(0,n.lastIndexOf("/")))}r.$Type==="com.sap.vocabularies.UI.v1.CollectionFacet"&&e.push(...Wyn(r))}),dh.entityTypeRefFacetCache[t.name]=e,e??[]}function Kyn(t,e="",r=[],n,i){let o={},s=t.navPropEntities;if(s&&s.length>0){let a=t.entityType?NCs(t.entityType):[];for(let c of s){let u=c.entityPath,l=i??t;if(c.entityType?.name===l?.entityType?.name||e.includes(u))continue;let p=e.concat(`${e?"/":""}${u}`);c.navPropEntities&&c.navPropEntities.length>0&&Object.assign(o,Kyn(c,p,r,n,i??t).entitySetsFlat);let f={fullPath:p,entity:{entityPath:c.entityPath,entitySetName:c.entitySetName,defaultSelected:a.includes(c.entityPath)||!!n?.includes(p)}},h=`${p}`;r||(r=[]),r.push({name:h,value:f,checked:f.entity.defaultSelected}),o[p]=c.entitySetName}}return{entitySetsFlat:o,choices:r}}function Yyn(t,e){let r=e?.map(n=>{let i=n.page?.contextPath??n.page?.routePattern?.replace(":?query:","").replaceAll(/\(\{[^}]*\}\)/g,"");return i?.startsWith(`/${t.entityPath}/`)?i.replace(`/${t.entityPath}/`,""):i}).filter(n=>n!==void 0);if(t.navPropEntities){let n=Kyn(t,void 0,void 0,r);return n.choices.sort((i,o)=>(i.name??"").localeCompare(o.name??"")),n}}async function Xyn(t,e){let n=(await Jl.newInstance(await(0,Gyn.readFile)((0,Hyn.join)(t,St.Ui5Yaml),"utf-8"))).getBackendConfigsFromFioriToolsProxyMiddleware()[0],i;if(n){let o=n.url;if(n.connectPath){let s=n.connectPath.startsWith("/")?n.connectPath:`/${n.connectPath}`;o=new URL(s,n.url).href}i=gi()?n?.destination:await Dyn(o,n?.client)}return{servicePath:e.uri,systemName:i}}async function Jyn(t){let e=await bR(t.app.appRoot),r=e.getApiVersion(),n=typeof r?.version=="string"?Number.parseInt(r.version,10):0;return n<24?(un.logger.debug(`@sap/ux-specification from module cache API version is: ${n}. API version '24' at least is required.`),vr("prompts.appSelection.validation.specficationApiVersionOutdated",{specApiVersion:n})):e}var Qyn,RCs=(...t)=>new Promise(e=>{clearTimeout(Qyn),Qyn=setTimeout(async()=>e(await zyn(...t)),1e3)}),qy={appSelection:"appSelection",toggleSelection:"toggleSelection",relatedEntitySelection:"relatedEntitySelection",skipDataDownload:"skipDataDownload",updateMainServiceMetadata:"updateMainServiceMetadata"},ICs=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Zyn=["."];async function evn(t,e,r){let n=!1;if(!r.referencedEntities?.listEntity.semanticKeys.every((a,c)=>(a.name!=="IsActiveEntity"&&!n&&(n=!!a.value),a.value!==void 0&&a.value!==""||!t[`entityKeyIdx:${c}`]))||!n)return vr("prompts.skipDataDownload.validation.keyRequired");let o=[];r.relatedEntityChoices?.choices?.length&&(o=t[qy.relatedEntitySelection]);let s=await RCs(e,r,o);return s}function LCs(t){return dh.resetServiceCaches(),t.appAccess=void 0,t.referencedEntities=void 0,t.servicePath=void 0,t.systemName&&(t.systemName.value=void 0),t.relatedEntityChoices.choices=[],t.relatedEntityChoices.entitySetsFlat={},t}async function tvn(t){let e=[],r={appAccess:void 0,referencedEntities:void 0,servicePath:void 0,systemName:{value:void 0},connectPath:{value:void 0},relatedEntityChoices:{choices:[],entitySetsFlat:{}}},n=[],i=MCs(r,n,t?.appPath),o=await Udn({datasourceType:{includeNone:!1},systemSelection:{includeCloudFoundryAbapEnvChoice:!1,defaultChoice:r.systemName,connectPath:r.connectPath,hideNewSystem:!0},serviceSelection:{serviceFilter:n,requiredOdataVersion:Ds.v4}},ag()!==oo.cli,un.logger);o.prompts=Pu(o.prompts,()=>!!r.appAccess);let s={odata:[]},a=FCs(r,r.relatedEntityChoices),c=$Cs(5,r,o.answers,s),u=kCs(r.relatedEntityChoices,o.answers,r,s);return e.push(i,...o.prompts,VCs(o.answers,r),UCs(o.answers,r),...c,a,u),{questions:e,answers:{application:r,odataQueryResult:s,odataServiceAnswers:o.answers}}}function MCs(t,e,r){return{type:"input",guiType:"folder-browser",name:qy.appSelection,message:vr("prompts.appSelection.message"),default:n=>r??n.appSelection??t.appAccess?.app.appRoot,guiOptions:{mandatory:!0,breadcrumb:vr("prompts.appSelection.breadcrumb")},validate:async n=>{if(!n)return!1;if(n===t.appAccess?.app.appRoot)return!0;e.length=0,LCs(t);let i;try{i=await KK(n)}catch(u){let l=u;return u instanceof Error&&(l=u.message),un.logger.error(vr("prompts.appSelection.validation.selectedPathDoesNotContainValidApp",{error:l})),`${vr("prompts.appSelection.validation.selectedPathDoesNotContainValidApp")}${vr("texts.seeLogForDetails")}`}let o=i.app.services[i.app.mainService??"mainService"];if(!o?.odataVersion?.startsWith("4."))return vr("prompts.appSelection.validation.appMainServiceOdataVersionNotSupported",{serviceOdataVersion:o.odataVersion});let s=await Jyn(i);if(typeof s=="string")return s;t.appAccess=i,t.specification=s;let{servicePath:a,systemName:c}=await Xyn(i.app.appRoot,o);return a&&(t.servicePath=a,e.push(a)),t.systemName&&(t.systemName.value=c),t.connectPath&&(t.connectPath.value=a),!0}}}function kCs(t,e,r,n){let i;return{when:async o=>t.choices.length>0,name:qy.relatedEntitySelection,type:"checkbox",guiOptions:{applyDefaultWhenDirty:!0},message:vr("prompts.relatedEntitySelection.message"),choices:()=>t.choices,validate:async(o,s)=>{if(t.choices.forEach(a=>{a.disabled||(a.checked=o.some(c=>c.fullPath===a.value.fullPath))}),s&&!s[qy.skipDataDownload]?.[0]){if(i=await evn(s,e,r),typeof i=="string")return i;n.odata=i.odataQueryResult}return!0},additionalMessages:()=>{if(i&&typeof i!="string")return{message:vr("prompts.skipDataDownload.querySuccess",{count:i.odataQueryResult.length}),severity:Ift.Severity.information}},showOutputTabLink:()=>({show:!!i,linkMessage:vr("prompts.relatedEntitySelection.openLogs")})}}function FCs(t,e){let r,n,i;return{when:()=>{if((n!==t.systemName?.value||t.servicePath!==r)&&t.referencedEntities?.listEntity){let s=Yyn(t.referencedEntities.listEntity,t.referencedEntities.pageObjectEntities);s&&(e.choices=s.choices,Object.assign(e.entitySetsFlat,s.entitySetsFlat)),r=t.servicePath,n=t.systemName?.value}return e.choices.length>0},name:qy.toggleSelection,type:"confirm",message:vr("prompts.toggleSelection.message"),labelTrue:vr("prompts.toggleSelection.labelTrue"),labelFalse:vr("prompts.toggleSelection.labelFalse"),default:!1,validate:s=>(s!==i&&(e.choices.forEach(a=>{if(a.disabled)return;let c=a.value;a.checked=s===!1?c.entity.defaultSelected:!1}),i=s),!0)}}function $Cs(t,e,r,n){let i=[],o,s=0,a=c=>({when:async()=>{let u=e.referencedEntities?.listEntity.semanticKeys[c],l=!!u?.name&&u.name!=="IsActiveEntity";return l&&c>s&&(s=c),l},name:`entityKeyIdx:${c}`,message:()=>vr("prompts.entityKey.message",{keyName:`${e.referencedEntities?.listEntity.semanticKeys[c]?.name} (${e.referencedEntities?.listEntity.entitySetName})`}),type:"input",guiOptions:{hint:vr("prompts.entityKey.hint")},validate:async(u,l)=>{let p=e.referencedEntities?.listEntity.semanticKeys[c];if(p&&delete p.value,Zyn.includes(u))return vr("prompts.entityKey.validation.invalidKeyValueChars",{chars:Zyn.join()});if(u&&p)if(p.type==="Edm.Boolean")try{p.value=JSON.parse(u)}catch{return vr("prompts.entityKey.validation.invalidBooleanValue")}else if(["Edm.UUID","Edm.Guid"].includes(p.type)){let h=u.split(",");for(let d of h)if(!ICs.test(d.trim()))return vr("prompts.entityKey.validation.invalidGuidValue");p.value=u.trim()}else p.value=u.trim();let f=u.split(",");if(p?.type&&!["Edm.UUID","Edm.Guid"].includes(p.type)){for(let h of f)if(h.split("-").length>2)return p&&delete p.value,vr("prompts.entityKey.validation.invalidRangeSpecified")}if(l&&!e.relatedEntityChoices?.choices?.length&&c===s&&!l[qy.skipDataDownload]?.[0]&&e.referencedEntities?.listEntity.semanticKeys[c]?.name){if(o=await evn(l,r,e),typeof o=="string")return o;n.odata=o.odataQueryResult}return!0}});for(let c=0;c<t;c++)i.push(a(c));return i}function UCs(t,e){return{when:()=>!!t.metadata&&!!e.servicePath,name:qy.skipDataDownload,type:"checkbox",message:vr("prompts.skipDataDownload.message"),guiOptions:{hint:vr("prompts.skipDataDownload.hint")},default:!1,choices:[{name:vr("prompts.skipDataDownload.choiceLabel"),value:"skipDownload",checked:!1}]}}function VCs(t,e){let r;return{when:async()=>e.appAccess&&e.specification&&t?.metadata?(r=await Ryn(e.appAccess,e.specification,t.metadata),typeof r=="object"&&(e.referencedEntities=r),!0):!1,name:qy.updateMainServiceMetadata,type:"confirm",message:vr("prompts.updateMainServiceMetadata.message"),default:!1,additionalMessages:async()=>{if(typeof r=="string")return{message:r,severity:Ift.Severity.error}}}}function rvn(t){let e=[],r=n=>[{name:`${n.entitySetName}/${n.nodeProperty}/source`,type:"list",message:`Source: ${n.entitySetName} > ${n.missingReferentialConstraints?.navPropName}`,default:!1,choices:n.entityProperties.map(i=>({name:i,value:i}))},{name:`${n.entitySetName}/${n.nodeProperty}/target`,type:"list",message:`Target: ${n.entitySetName} > ${n.missingReferentialConstraints?.navPropName}`,default:!1,choices:n.entityProperties.map(i=>({name:i,value:i}))}];return t.forEach(n=>{!n.parentProperty&&n.missingReferentialConstraints?.navPropName&&e.push(...r(n))}),e}var avn=ve(jO()),cvn=ve(nx());var uvn=ve(svn()),lvn=require("node:path");function pvn(t,e,r){dh.resetExternalServiceCache();let n=rPs(t,e),i=[];return{questions:[{name:"valueHelpSelection",type:"checkbox",message:vr("prompts.valueHelpSelection.message"),choices:()=>n,validate:async s=>{if(!s||s.length===0)return dh.resetExternalServiceCache(),!0;let a=await tPs(s,r),c=(0,uvn.default)(i,a);return i.length=0,i.push(...c),await ePs(i,r),!0}}],valueHelpData:i}}async function ePs(t,e){let r=[],n={transformResponse:o=>typeof o=="string"?JSON.parse(o):o},i=t.map(async o=>{let s=o,[a]=s.path.split(";");dh.externalServiceRequestCache[a]??=[];let l=(0,avn.convert)((0,cvn.parse)(o.metadata)).entitySets.map(async p=>{let f=p.name;if(dh.externalServiceRequestCache[a].includes(f))return;dh.externalServiceRequestCache[a].push(f);let h=await e.get((0,lvn.join)(s.path,f),n);s.entityData=s.entityData??[],s.entityData?.push({entitySetName:f,items:h.data.value})});await Promise.allSettled(l),s.entityData&&r.push(s)});return await Promise.allSettled(i),r}async function tPs(t,e){let r=t.flat();return await e.fetchExternalServices(r)}function rPs(t,e){let r=X9(t,e,[]),n={};for(let o of r)if(o.type==="value-list"){if(Ayn.includes(o.target))continue;let[s]=o.value.split(";"),a=o.target.split("/").pop();a&&(n[s]??={},n[s][a]??=[],n[s][a].push(o))}else o.type==="code-list"&&(n[o.value]??={},n[o.value]["Code list"]??=[],n[o.value]["Code list"].push(o));let i=[];for(let o of Object.values(n))for(let[s,a]of Object.entries(o)){let c=a.map(u=>{if(u.type==="value-list")return u.target.replace(/\/[^/]*$/,"");if(u.type==="code-list"&&u.collectionPath)return u.collectionPath}).filter(u=>u!==void 0);i.push({name:`${s} (${c.join()})`,value:a})}return i.sort((o,s)=>o.name.localeCompare(s.name))}var un=class t extends dvn.default{vscode;appWizard;static _logger=bve;generatorVersion=this.rootGeneratorVersion();prompts;setPromptsCallback;state={};constructor(e,r){super(e,{...r,skipInstall:!0},{unique:"namespace"}),brt(this.env,!0),this.options.force=!0,this.prompts=new oCe.Prompts([{description:vr("steps.odataDownloader.description"),name:vr("steps.odataDownloader.name")},{description:vr("steps.valueHelpSelection.description"),name:vr("steps.valueHelpSelection.name")}]),this.setPromptsCallback=n=>{this.prompts&&this.prompts.setCallback(n)},typeof r.appWizard?.setHeaderTitle=="function"&&r.appWizard.setHeaderTitle(vr("texts.generatorTitle"),`${this.rootGeneratorName()}@${this.rootGeneratorVersion()}`)}static get logger(){return t._logger}async initializing(){await Jnt(),t._logger=this._configureLogging(this.options.logLevel,this.options.logger,this.options.vscode),await Pf.initTelemetrySettings(),Pf.sendTelemetry("ODATA_DOWNLOADER_STARTED",{startUpTime:Date()})}async prompting(){try{let{answers:{application:e,odataQueryResult:r,odataServiceAnswers:n},questions:i}=await tvn(this.options?.data),o=await this.prompt(i);if(this.state.entityOData=r.odata,this.state.entityPropertyToEntitySet=e.relatedEntityChoices.entitySetsFlat,this.state.appRootPath=e.appAccess?.getAppRoot(),this.state.mainServicePath=n.servicePath,this.state.mainServiceName=e.appAccess?.app.mainService,this.state.appEntities=e.referencedEntities,this.state.appRootPath){this.state.mockServerConfig=await LP(this.state.appRootPath);let s;this.state.mockServerConfig?.services&&(t.logger.debug(`Mock config: ${JSON.stringify(this.state.mockServerConfig)}`),s=this.state.mockServerConfig.services.find(a=>a.urlPath.replaceAll(/(^\/)|(\/$)/g,"")===this.state.mainServicePath?.replaceAll(/(^\/)|(\/$)/g,""))),this.state.mockDataRootPath=s?.mockdataPath??(0,nL.join)(Ps.Webapp,Ps.LocalService,Ps.Mockdata)}if(this.state.updateMainServiceMetadata=o[qy.updateMainServiceMetadata],this.state.mainServiceMetadata=n.metadata,o[qy.skipDataDownload]?.[0]||await this._promptMissingReferentialConstraints(e,o),n.servicePath&&n.metadata&&n.connectedSystem?.serviceProvider instanceof Xf){let{questions:s,valueHelpData:a}=pvn(n.servicePath,n.metadata,n.connectedSystem?.serviceProvider);await this.prompt(s),this.state.valueHelpData=a}}catch(e){t.logger.error(e),this._exitOnError(e)}}async writing(){if(this.state.appRootPath){if(this.state.entityOData&&this.state.entityPropertyToEntitySet&&this.state.appEntities)try{let e=Date.now();Pf.sendTelemetry("ODATA_DOWNLOADER_WRITE_DATA_FILES_START",{time:Date()}),this.destinationRoot((0,nL.join)(this.state.appRootPath));let r=wft(this.state.entityOData,this.state.entityPropertyToEntitySet,this.state.appEntities.listEntity.entitySetName,this.state.appEntities.hierarchyEntities);t.logger.info(vr("info.entityFilesToBeGenerated",{entities:Object.keys(r).join(", ")}));let n=Object.entries(r);n.forEach(([i,o])=>{this.writeDestinationJSON((0,nL.join)(this.state.mockDataRootPath,`${i}.json`),o)}),this.state.appEntities.hierarchyEntities?.filter(i=>i.missingReferentialConstraints&&n.some(([o])=>o===i.entitySetName))?.forEach(i=>{let o=(0,nL.join)(this.state.mockDataRootPath,`${i.entitySetName}.js`),s=this.destinationPath(o),{navPropName:a,constraints:c}=i.missingReferentialConstraints;if(this.fs.exists(s)){let u=this.fs.read(s),l=Lyn(u,a,c);l!==u?(this.writeDestination(o,l),t.logger.info(`Updated referential constraint file: ${i.entitySetName}.js`)):t.logger.debug(`Referential constraint for '${a}' already present in ${i.entitySetName}.js \u2014 skipping`)}else{let u=Iyn(a,c);this.writeDestination(o,u),t.logger.info(`Written referential constraint file: ${i.entitySetName}.js`)}}),Pf.sendTelemetry("ODATA_DOWNLOADER_WRITE_DATA_FILES_END",{writeFileDuration:`${Date.now()-e} ms`,numberOfFiles:`${n.length}`})}catch(e){t.logger.error(e),Pf.sendTelemetry("ODATA_DOWNLOADER_WRITING_DATA_ERROR",{writeFileErrorTime:Date()})}else t.logger.info(vr("info.noServiceEntityData"));if(this.state.valueHelpData?.length)try{let e=Date.now();Pf.sendTelemetry("ODATA_DOWNLOADER_WRITE_VALUE_HELP_FILES_START",{time:Date()});let r=(0,nL.join)(this.state.appRootPath,Ps.Webapp);if(await Hve(this.fs,r,this.state.valueHelpData,this.state.mainServiceName,this.state.mainServicePath),this.state.mockServerConfig){let n={webappPath:r,packageJsonConfig:{skip:!0},ui5MockYamlConfig:{overwrite:!0}};n.ui5MockYamlConfig&&this.state.mainServiceName&&(n.ui5MockYamlConfig.resolveExternalServiceReferences={[this.state.mainServiceName]:!0},await Sve(this.state.appRootPath,n,this.fs))}Pf.sendTelemetry("ODATA_DOWNLOADER_WRITE_VALUE_HELP_DATA_FILES_END",{writeFileDuration:`${Date.now()-e} ms`,numberOfExternalServices:`${this.state.valueHelpData.length}`})}catch(e){t.logger.error(e),Pf.sendTelemetry("ODATA_DOWNLOADER_WRITING_BALUE_HELP_DATA_ERROR",{writeFileErrorTime:Date()})}else t.logger.info(vr("info.noValueHelpData"));if(this.state.updateMainServiceMetadata&&this.state.mainServiceMetadata&&this.state.mainServiceName){let e=(0,nL.join)(this.state.appRootPath,Ps.Webapp,Ps.LocalService,this.state.mainServiceName,"metadata.xml");this.writeDestination(e,(0,fvn.default)(this.state.mainServiceMetadata,{indentation:" ",lineSeparator:`
3139
+ ${o}${t.slice(s)}`:t}pi();wP();var Gyn=require("node:fs/promises"),Hyn=require("node:path");var kyn=require("node:crypto"),Fyn=ve(zye());var Myn={name:"@sap-ux/generator-odata-downloader",displayName:"Fiori Elements Data Downloader",description:"Yeoman generator that supports download of app data, typically for mock data server use.",version:"0.3.38",repository:{type:"git",url:"https://github.com/SAP/open-ux-tools.git",directory:"packages/generator-odata-downloader"},bugs:{url:"https://github.com/SAP/open-ux-tools/issues?q=is%3Aopen+is%3Aissue+label%3Abug+label%3Aodata-download"},license:"Apache-2.0",main:"generators/app/index.js",keywords:["yeoman-generator"],scripts:{build:"npm-run-all clean bundle:prod",compile:"tsc --build",clean:"rimraf --glob generators prebuilds test/test-output coverage *.tsbuildinfo",watch:"tsc --watch",lint:"eslint","lint:fix":"eslint --fix",test:"cross-env NODE_OPTIONS='--experimental-vm-modules' jest --ci --forceExit --detectOpenHandles --colors","test-u":"cross-env NODE_OPTIONS='--experimental-vm-modules' jest --ci --forceExit --detectOpenHandles --colors -u",link:"pnpm link --global",unlink:"pnpm unlink --global",bundle:"node esbuild.mjs","bundle:dev":"pnpm clean && node esbuild.mjs --development && pnpm pack","bundle:prod":"node esbuild.mjs --production"},files:["LICENSE","generators","!generators/*.map","!generators/**/*.map","prebuilds","yeoman.png"],devDependencies:{"@jest/globals":"30.4.1"},dependencies:{"@sap-devx/yeoman-ui-types":"1.25.1","@sap-ux/annotation-converter":"0.10.21","@sap-ux/axios-extension":"workspace:*","@sap-ux/btp-utils":"workspace:*","@sap-ux/edmx-parser":"0.10.0","@sap-ux/fiori-generator-shared":"workspace:*","@sap-ux/inquirer-common":"workspace:*","@sap-ux/logger":"workspace:*","@sap-ux/mockserver-config-writer":"workspace:*","@sap-ux/odata-service-inquirer":"workspace:*","@sap-ux/odata-service-writer":"workspace:*","@sap-ux/project-access":"workspace:*","@sap-ux/store":"workspace:*","@sap-ux/telemetry":"workspace:*","@sap-ux/ui5-config":"workspace:*","@sap-ux/vocabularies-types":"0.15.0","@sap/ux-specification":"1.144.5","@types/inquirer":"8.2.6","@types/yeoman-generator":"5.2.14","@vscode-logging/logger":"2.0.9",deepmerge:"4.3.1",i18next:"26.3.6",inquirer:"8.2.7","odata-query":"8.0.5","os-name":"4.0.1",rimraf:"6.1.3","xml-formatter":"3.7.0","yeoman-generator":"5.10.0"},engines:{node:">=22.x"}};var yCs="@sap-ux/odata-download-sub-generator",vCs="0a65e45d-6bf4-421d-b845-61e888c50e9e",Pf=class{static _telemetryData;static _sessionId;static async initTelemetrySettings(e){this._sessionId=(0,kyn.randomUUID)(),un.logger.info(`Telemetry session initialized with ID: ${this._sessionId}`);let r={consumerModule:{name:yCs,version:Myn.version},watchTelemetrySettingStore:!1,internalFeature:!0,resourceId:vCs,...e};try{await u9(r)}catch(n){un.logger.error(`Error initializing telemetry settings: ${n}`)}}static createTelemetryData(e){if(!this._telemetryData){let r=vr("telemetry.unknownOs");try{r=(0,Fyn.default)()}catch{}this._telemetryData={Platform:gi()?"SBAS":"VSCode",OperatingSystem:r,SessionId:this._sessionId}}return this._telemetryData=Object.assign(this._telemetryData,e),this._telemetryData}static prepareTelemetryEvent(e,r){return{eventName:e,properties:r,measurements:{}}}static async sendTelemetry(e,r){let n=this.createTelemetryData(r),i=this.prepareTelemetryEvent(e,n);await dm.getTelemetryClient().reportEvent(i,La.NoSampling)}};var _Cs=["eq","ne","gt","ge","lt","le"],rCe=["and","or","not"],ECs=["any","all"],bCs=["startswith","endswith","contains","matchespattern"],TCs=["expand","levels","select","skip","top","count","orderby","filter"],$yn=/\((.*)\)/,Uyn=/(?!indexof)\((\w+)\)/;var L0="";function Nft({select:t,search:e,skiptoken:r,format:n,top:i,skip:o,filter:s,transform:a,orderBy:c,key:u,count:l,expand:p,action:f,func:h}={}){let d="",m=[],v={};if(u!=null&&(d+=`(${ST(u,m)})`),(s||typeof l=="object")&&(v.$filter=iCe(typeof l=="object"?l:s,m)),a&&(v.$apply=qyn(a)),p&&(v.$expand=nCe(p)),c&&(v.$orderby=Rft(c)),l&&(typeof l=="boolean"?v.$count=!0:d+="/$count"),typeof i=="number"&&(v.$top=i),typeof o=="number"&&(v.$skip=o),f&&(d+=`/${f}`),h){if(typeof h=="string")d+=`/${h}`;else if(typeof h=="object"){let[E]=Object.keys(h),S=ST(h[E],m);d+=`/${E}`,S!==""&&(d+=`(${S})`)}}return m.length>0&&Object.assign(v,m.reduce((E,S)=>Object.assign(E,{[`@${S.name}`]:ST(S.value)}),{})),PCs(d,{$select:t,$search:e,$skiptoken:r,$format:n,...v})}function Dft(t,e,r=[]){return`${t} eq ${ST(e,r)}`}function iCe(t={},e=[],r=""){return(Array.isArray(t)?t:[t]).reduce((o,s)=>{if(s){let a=n(s,e,r);a&&o.push(a)}return o},[]).join(" and ");function n(o={},s=[],a=""){let c="";return typeof o=="string"?c=o:o&&typeof o=="object"&&(c=Object.keys(o).reduce((u,l)=>{let p=o[l];if(p===void 0)return u;let f="";if(a?l===L0?f=a:Uyn.test(l)?f=l.replace(Uyn,(h,d)=>d.trim()===L0?`(${a})`:`(${a}/${d.trim()})`):$yn.test(l)?f=l.replace($yn,(h,d)=>d.trim()===L0?`(${a})`:`(${a}/${d.trim()})`):f=`${a}/${l}`:f=l,l===L0&&Array.isArray(p))return u.concat(p.map(h=>Dft(f,h)));if(["number","string","boolean"].indexOf(typeof p)!==-1||p instanceof Date||p===null)u.push(Dft(f,p,s));else if(Array.isArray(p)){let h=l,d=p.map(m=>iCe(m,s,a)).filter(m=>m).map(m=>rCe.indexOf(h)!==-1?`(${m})`:m);d.length&&(rCe.indexOf(h)!==-1?d.length&&(h==="not"?u.push(Vyn(d)):u.push(`(${d.join(` ${h} `)})`)):u.push(d.join(` ${h} `)))}else if(rCe.indexOf(f)!==-1){let h=f,d=Object.keys(p).map(m=>n({[m]:p[m]}));d.length&&(h==="not"?u.push(Vyn(d)):u.push(`(${d.join(` ${h} `)})`))}else if(typeof p=="object")"type"in p?u.push(Dft(f,p,s)):Object.keys(p).forEach(h=>{if(p[h]!==void 0)if(_Cs.indexOf(h)!==-1)u.push(`${f} ${h} ${ST(p[h],s)}`);else if(rCe.indexOf(h)!==-1)Array.isArray(p[h])?u.push(p[h].map(d=>"("+n(d,s,f)+")").join(` ${h} `)):u.push("("+n(p[h],s,f)+")");else if(ECs.indexOf(h)!==-1){let d=i(l.toLowerCase(),p[h],h,f);d&&u.push(d)}else if(h==="has")u.push(`${f} ${h} ${ST(p[h],s)}`);else if(h==="in"){let d=Array.isArray(p[h])?p[h]:p[h].value.map(m=>({type:p[h].type,value:m}));u.push(f+" in ("+d.map(m=>ST(m,s)).join(",")+")")}else if(bCs.indexOf(h)!==-1)u.push(`${h}(${f},${ST(p[h],s)})`);else{let d=n({[h]:p[h]},s,f);d&&u.push(d)}});else throw new Error(`Unexpected value type: ${p}`);return u},[]).join(" and ")),c}function i(o,s,a,c){let u="";if(typeof s=="string"||s instanceof String)u=SCs(o,s,a,c);else if(s){let l=Array.isArray(s)?s.reduce((f,h)=>h.hasOwnProperty(L0)?(f.hasOwnProperty(L0)||(f[L0]=[]),f[L0].push(h[L0]),f):{...f,...h},{}):s,p=n(l,e,o);u=`${c}/${a}(${p?`${o}:${p}`:""})`}return u}}function SCs(t,e,r,n){let i=r=="all"?"ne":"eq";return`${n}/${r}(${t}: ${t} ${i} '${e}')`}function OCs(t){return t=t.replace(/%/g,"%25"),t=t.replace(/\+/g,"%2B"),t=t.replace(/\//g,"%2F"),t=t.replace(/\?/g,"%3F"),t=t.replace(/#/g,"%23"),t=t.replace(/&/g,"%26"),t=t.replace(/'/g,"''"),t}function ST(t,e){if(typeof t=="string")return`'${OCs(t)}'`;if(t instanceof Date)return t.toISOString();if(typeof t=="number")return t;if(Array.isArray(t))return`[${t.map(r=>ST(r)).join(",")}]`;if(t===null)return t;if(typeof t=="object")switch(t.type){case"raw":case"guid":return t.value;case"duration":return`duration'${t.value}'`;case"binary":return`binary'${t.value}'`;case"alias":return Array.isArray(e)&&e.push(t),`@${t.name}`;case"json":return escape(JSON.stringify(t.value));case"decimal":return`${t.value}M`;default:return Object.entries(t).filter(([,r])=>r!==void 0).map(([r,n])=>`${r}=${ST(n,e)}`).join(",")}return t}function nCe(t){if(typeof t=="number")return t;if(typeof t=="string")return t.indexOf("/")===-1?t:t.split("/").reverse().reduce((e,r,n,i)=>n===0?`$expand=${r}`:n===i.length-1?`${r}(${e})`:`$expand=${r}(${e})`,"");if(Array.isArray(t))return`${t.map(e=>nCe(e)).join(",")}`;if(typeof t=="object"){let e=Object.keys(t);return e.some(r=>TCs.indexOf(r.toLowerCase())!==-1)?e.map(r=>{let n;switch(r){case"filter":n=iCe(t[r]);break;case"orderBy":n=Rft(t[r]);break;case"levels":case"count":case"skip":case"top":n=`${t[r]}`;break;default:n=nCe(t[r])}return`$${r.toLowerCase()}=${n}`}).join(";"):e.map(r=>{let n=nCe(t[r]);return n?`${r}(${n})`:r}).join(",")}return""}function qyn(t){return(Array.isArray(t)?t:[t]).reduce((e,r)=>{for(let n of Object.keys(r))switch(n){case"aggregate":{let i=r[n];i&&e.push(`aggregate(${ACs(i)})`);break}case"filter":{let i=r[n];if(i){let o=iCe(i);o&&e.push(`filter(${o})`)}break}case"groupBy":{let i=r[n];i&&e.push(`groupby(${CCs(i)})`);break}default:throw new Error(`Unsupported transform: ${n}`)}return e},[]).join("/")||void 0}function ACs(t){return(Array.isArray(t)?t:[t]).map(e=>typeof e=="string"?e:Object.keys(e).map(r=>{let n=e[r];if(!n.with&&n.as)return`${r} as ${n.as}`;if(!n.with)throw new Error(`'with' property required for '${r}'`);if(!n.as)throw new Error(`'as' property required for '${r}'`);return`${r} with ${n.with} as ${n.as}`})).join(",")}function CCs(t){if(!t.properties)throw new Error("'properties' property required for groupBy");let e=`(${t.properties.join(",")})`;return t.transform&&(e+=`,${qyn(t.transform)}`),e}function Rft(t,e=""){return Array.isArray(t)?t.map(r=>Array.isArray(r)&&r.length===2&&["asc","desc"].indexOf(r[1])!==-1?r.join(" "):r).map(r=>`${e}${String(r)}`).join(","):typeof t=="object"?Object.entries(t).map(([r,n])=>Rft(n,`${r}/`)).map(r=>`${e}${r}`).join(","):`${e}${String(t)}`}function PCs(t,e){let r=Object.getOwnPropertyNames(e).filter(n=>e[n]!==void 0&&e[n]!=="").map(n=>`${n}=${e[n]}`);return r.length?`${t}?${r.join("&")}`:t}function Vyn(t){return`not (${t.join(" and ")})`}function xCs(t){let e=[];return{expands:t.reduce((n,{entityPath:i})=>{let o=i.split("/"),s=n;return o.forEach((a,c)=>{s.expand||(s.expand={}),s.expand[a]??=c===o.length-1?{}:{expand:{}},s=s.expand[a],e.includes(a)||e.push(a)}),n},{expand:{}}),entityPathParts:e}}function wCs(t,e,r=1,n){let i=e?.map(h=>({entityPath:h.fullPath,entitySetName:h.entity.entitySetName})),{expands:o,entityPathParts:s}=xCs(i),a=s.map(h=>e.find(m=>h===m.entity.entityPath?m.entity.entitySetName:void 0)?.entity.entitySetName).filter(h=>h!==void 0);un.logger.info(vr("info.entityFilesToBeGenerated",{entities:a.join(", ")}));let c=t;if(n){let h=[];c.semanticKeys.forEach(C=>{if(C.value!==void 0&&C.value!=="")if(C.type==="Edm.Boolean")h.push(`${C.name} eq ${C.value}`);else{let D=String(C.value).split(","),M=["Edm.UUID","Edm.Guid"].includes(C.type),x=F=>M?F.trim():`'${F.trim()}'`;if(D.length===1)h.push(`${C.name} eq ${x(D[0])}`);else{let F=D.map(G=>`${C.name} eq ${x(G)}`);h.push(`(${F.join(" or ")})`)}}});let d=h.length>0?`,filter(${h.join(" and ")})`:"",m=`$root/${c.entitySetName},${n.qualifier},${n.nodeProperty}`,v=`com.sap.vocabularies.Hierarchy.v1.TopLevels(HierarchyNodes=$root/${c.entitySetName},HierarchyQualifier='${n.qualifier}',NodeProperty='${n.nodeProperty}')`,E=n.isDraft?`$apply=ancestors(${m}${d},keep start)/${v}`:`$apply=${v}`,S=o?Nft(o):"",T=S?`&${S.substring(1)}`:"",O=`${c.entitySetName}?${E}${T}`;return un.logger.debug(`Query for odata: ${O}`),{query:O}}let u=[];c.semanticKeys.forEach(h=>{if(h.value!==void 0&&h.value!=="")if(["Edm.UUID","Edm.Guid"].includes(h.type)){let m=String(h.value).split(",").map(v=>({[h.name]:{type:"guid",value:v.trim()}}));u.push(m.length===1?m[0]:{or:m})}else if(h.type==="Edm.Boolean")u.push({[h.name]:String(h.value)==="true"});else if(h.type==="Edm.String"){let d=String(h.value).split(","),m=[];d.forEach(v=>{let E=v.trim().split("-");E.length===1?m.push({[h.name]:v.trim()}):E.length===2&&m.push({[h.name]:{ge:E[0].trim(),le:E[1].trim()}})}),u.push(m.length==1?m[0]:{or:m})}else u.push({[h.name]:h.value})});let l={};o&&Object.assign(l,o),u.length>0?Object.assign(l,{filter:u.length===1?u[0]:u,count:!0}):r&&Object.assign(l,{top:r});let p=Nft(l),f=`${c.entitySetName}${p}`;return un.logger.debug(`Query for odata: ${f}`),{query:f}}function DCs(t,e,r){let n=new Set(["DraftUUID","IsActiveEntity"]),i=[];for(let p of t.semanticKeys){if(p.value===void 0||p.value===""||n.has(p.name))continue;let f=p.keyName??p.name,h=String(p.value).split(",")[0].trim(),d=["Edm.UUID","Edm.Guid"].includes(p.type),m=p.type==="Edm.Boolean";i.push(`${f}=${d||m?h:`'${h}'`}`)}if(i.length===0){un.logger.debug(`buildNavPropHierarchyQuery: no key values available for '${t.entitySetName}', skipping nav-prop hierarchy query for '${e}'`);return}let o={DraftUUID:"00000000-0000-0000-0000-000000000000",IsActiveEntity:"true"};t.entityType?.keys?.filter(p=>p.name in o).forEach(p=>i.push(`${p.name}=${o[p.name]}`)),un.logger.debug(`buildNavPropHierarchyQuery: key segment for '${t.entitySetName}': (${i.join(",")})`);let a=`${`${t.entitySetName}(${i.join(",")})`}/${e}`,u=`com.sap.vocabularies.Hierarchy.v1.TopLevels(HierarchyNodes=${`$root/${a}`},HierarchyQualifier='${r.qualifier}',NodeProperty='${r.nodeProperty}')`,l=`${a}?$apply=${u}`;return un.logger.debug(`Nav-prop hierarchy query: ${l}`),l}async function Byn(t,e,r,n,i,o=[]){let s=wCs(t,r,n,i),a=await jyn(e,s.query);for(let c of o){let u=r.find(v=>v.entity.entitySetName===c.entitySetName);if(!u){un.logger.debug(`fetchData: no selected entity matched hierarchy entity '${c.entitySetName}', skipping`);continue}let l=DCs(t,u.entity.entityPath,c);if(!l){un.logger.debug(`fetchData: could not build nav-prop hierarchy query for '${c.entitySetName}', skipping`);continue}let p=await jyn(e,l);if(!p.entityData||!a.entityData){un.logger.debug(`fetchData: no data returned for nav-prop hierarchy query '${c.entitySetName}', skipping merge`);continue}un.logger.debug(`fetchData: merging ${p.entityData.length} hierarchy records into '${u.entity.entityPath}' expanded items`);let f=u.entity.entityPath,h=c.nodeProperty.split("/")[0],d=p.entityData,m=0;for(let v of a.entityData){let E=v[f];if(Array.isArray(E))for(let S of E){let T=d.find(O=>c.entityTypeKeys.every(C=>O[C]===S[C]));T&&(S[h]=T[h],m++)}}un.logger.debug(`fetchData: patched '${h}' onto ${m} expanded '${f}' records`)}return{odataResult:a}}async function jyn(t,e){try{un.logger.info(`OData query request: ${encodeURI(t.defaults.baseURL+e).replaceAll("'","%27")}`),un.logger.debug(`OData query request headers: ${JSON.stringify(t.defaults.headers)}`);let r=await t.get(e),n=r?.data?.match(/"@odata\.count":(\d+)/)?.[1];return un.logger.info(`OData query records count: ${n}`),{entityData:r?.odata()}}catch(r){let n=vr("errors.odataQueryError",{error:r});return un.logger.error(n),{error:n}}}var dh=class t{static externalServiceRequestCache={};static entityTypeRefFacetCache={};static resetExternalServiceCache(e){if(e){delete t.externalServiceRequestCache[e];return}t.externalServiceRequestCache={}}static resetRefFacetCache(){t.entityTypeRefFacetCache={}}static resetServiceCaches(){t.resetExternalServiceCache(),t.resetRefFacetCache()}};async function zyn(t,e,r){if(t.metadata&&e.appAccess&&t.connectedSystem&&t.servicePath&&e.appAccess&&e.referencedEntities){t.connectedSystem.serviceProvider.log=un.logger;let n=t.connectedSystem?.serviceProvider.service(t.servicePath);if(n){let i=Date.now();Pf.sendTelemetry("ODATA_DOWNLOAD_SEND_QUERY",{time:Date()});let o=e.referencedEntities.hierarchyEntities?.find(c=>c.entitySetName===e.referencedEntities.listEntity.entitySetName),s=e.referencedEntities.hierarchyEntities?.filter(c=>c.entitySetName!==e.referencedEntities.listEntity.entitySetName&&r.some(u=>u.entity.entitySetName===c.entitySetName))??[],{odataResult:a}=await Byn(e.referencedEntities.listEntity,n,r,o?void 0:1,o,s);if(a.entityData)return Pf.sendTelemetry("ODATA_DOWNLOAD_RECEIVED_QUERY_RESULT",{duration:`${Date.now()-i} ms`,resultSize:`${a.entityData.length} rows`}),un.logger.debug(`Got result rows: ${a.entityData.length}`),{odataQueryResult:a.entityData};if(a.error)return Pf.sendTelemetry("ODATA_DOWNLOAD_QUERY_ERRORED",{duration:`${Date.now()-i} ms`}),`${a.error}`}}return vr("errors.dataNotFetched")}function Wyn(t){let e=[];return t.Facets.forEach(r=>{if(r.$Type==="com.sap.vocabularies.UI.v1.ReferenceFacet"&&r.Target.type==="AnnotationPath"){let n=r.Target.value;n.lastIndexOf("/")>-1&&e.push(n.substring(0,n.lastIndexOf("/")))}else r.$Type==="com.sap.vocabularies.UI.v1.CollectionFacet"&&e.push(...Wyn(r))}),e}function NCs(t){if(dh.entityTypeRefFacetCache[t.name])return dh.entityTypeRefFacetCache[t.name];let e=[];return t.annotations?.UI?.Facets?.forEach(r=>{if(r.$Type==="com.sap.vocabularies.UI.v1.ReferenceFacet"&&r.Target?.type==="AnnotationPath"){let n=r.Target.value;n?.lastIndexOf("/")>-1&&e.push(n.substring(0,n.lastIndexOf("/")))}r.$Type==="com.sap.vocabularies.UI.v1.CollectionFacet"&&e.push(...Wyn(r))}),dh.entityTypeRefFacetCache[t.name]=e,e??[]}function Kyn(t,e="",r=[],n,i){let o={},s=t.navPropEntities;if(s&&s.length>0){let a=t.entityType?NCs(t.entityType):[];for(let c of s){let u=c.entityPath,l=i??t;if(c.entityType?.name===l?.entityType?.name||e.includes(u))continue;let p=e.concat(`${e?"/":""}${u}`);c.navPropEntities&&c.navPropEntities.length>0&&Object.assign(o,Kyn(c,p,r,n,i??t).entitySetsFlat);let f={fullPath:p,entity:{entityPath:c.entityPath,entitySetName:c.entitySetName,defaultSelected:a.includes(c.entityPath)||!!n?.includes(p)}},h=`${p}`;r||(r=[]),r.push({name:h,value:f,checked:f.entity.defaultSelected}),o[p]=c.entitySetName}}return{entitySetsFlat:o,choices:r}}function Yyn(t,e){let r=e?.map(n=>{let i=n.page?.contextPath??n.page?.routePattern?.replace(":?query:","").replaceAll(/\(\{[^}]*\}\)/g,"");return i?.startsWith(`/${t.entityPath}/`)?i.replace(`/${t.entityPath}/`,""):i}).filter(n=>n!==void 0);if(t.navPropEntities){let n=Kyn(t,void 0,void 0,r);return n.choices.sort((i,o)=>(i.name??"").localeCompare(o.name??"")),n}}async function Xyn(t,e){let n=(await Jl.newInstance(await(0,Gyn.readFile)((0,Hyn.join)(t,St.Ui5Yaml),"utf-8"))).getBackendConfigsFromFioriToolsProxyMiddleware()[0],i;if(n){let o=n.url;if(n.connectPath){let s=n.connectPath.startsWith("/")?n.connectPath:`/${n.connectPath}`;o=new URL(s,n.url).href}i=gi()?n?.destination:await Dyn(o,n?.client)}return{servicePath:e.uri,systemName:i}}async function Jyn(t){let e=await bR(t.app.appRoot),r=e.getApiVersion(),n=typeof r?.version=="string"?Number.parseInt(r.version,10):0;return n<24?(un.logger.debug(`@sap/ux-specification from module cache API version is: ${n}. API version '24' at least is required.`),vr("prompts.appSelection.validation.specficationApiVersionOutdated",{specApiVersion:n})):e}var Qyn,RCs=(...t)=>new Promise(e=>{clearTimeout(Qyn),Qyn=setTimeout(async()=>e(await zyn(...t)),1e3)}),qy={appSelection:"appSelection",toggleSelection:"toggleSelection",relatedEntitySelection:"relatedEntitySelection",skipDataDownload:"skipDataDownload",updateMainServiceMetadata:"updateMainServiceMetadata"},ICs=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Zyn=["."];async function evn(t,e,r){let n=!1;if(!r.referencedEntities?.listEntity.semanticKeys.every((a,c)=>(a.name!=="IsActiveEntity"&&!n&&(n=!!a.value),a.value!==void 0&&a.value!==""||!t[`entityKeyIdx:${c}`]))||!n)return vr("prompts.skipDataDownload.validation.keyRequired");let o=[];r.relatedEntityChoices?.choices?.length&&(o=t[qy.relatedEntitySelection]);let s=await RCs(e,r,o);return s}function LCs(t){return dh.resetServiceCaches(),t.appAccess=void 0,t.referencedEntities=void 0,t.servicePath=void 0,t.systemName&&(t.systemName.value=void 0),t.relatedEntityChoices.choices=[],t.relatedEntityChoices.entitySetsFlat={},t}async function tvn(t){let e=[],r={appAccess:void 0,referencedEntities:void 0,servicePath:void 0,systemName:{value:void 0},connectPath:{value:void 0},relatedEntityChoices:{choices:[],entitySetsFlat:{}}},n=[],i=MCs(r,n,t?.appPath),o=await Udn({datasourceType:{includeNone:!1},systemSelection:{includeCloudFoundryAbapEnvChoice:!1,defaultChoice:r.systemName,connectPath:r.connectPath,hideNewSystem:!0},serviceSelection:{serviceFilter:n,requiredOdataVersion:Ds.v4}},ag()!==oo.cli,un.logger);o.prompts=Pu(o.prompts,()=>!!r.appAccess);let s={odata:[]},a=FCs(r,r.relatedEntityChoices),c=$Cs(5,r,o.answers,s),u=kCs(r.relatedEntityChoices,o.answers,r,s);return e.push(i,...o.prompts,VCs(o.answers,r),UCs(o.answers,r),...c,a,u),{questions:e,answers:{application:r,odataQueryResult:s,odataServiceAnswers:o.answers}}}function MCs(t,e,r){return{type:"input",guiType:"folder-browser",name:qy.appSelection,message:vr("prompts.appSelection.message"),default:n=>r??n.appSelection??t.appAccess?.app.appRoot,guiOptions:{mandatory:!0,breadcrumb:vr("prompts.appSelection.breadcrumb")},validate:async n=>{if(!n)return!1;if(n===t.appAccess?.app.appRoot)return!0;e.length=0,LCs(t);let i;try{i=await KK(n)}catch(u){let l=u;return u instanceof Error&&(l=u.message),un.logger.error(vr("prompts.appSelection.validation.selectedPathDoesNotContainValidApp",{error:l})),`${vr("prompts.appSelection.validation.selectedPathDoesNotContainValidApp")}${vr("texts.seeLogForDetails")}`}let o=i.app.services[i.app.mainService??"mainService"];if(!o?.odataVersion?.startsWith("4."))return vr("prompts.appSelection.validation.appMainServiceOdataVersionNotSupported",{serviceOdataVersion:o.odataVersion});let s=await Jyn(i);if(typeof s=="string")return s;t.appAccess=i,t.specification=s;let{servicePath:a,systemName:c}=await Xyn(i.app.appRoot,o);return a&&(t.servicePath=a,e.push(a)),t.systemName&&(t.systemName.value=c),t.connectPath&&(t.connectPath.value=a),!0}}}function kCs(t,e,r,n){let i;return{when:async o=>t.choices.length>0,name:qy.relatedEntitySelection,type:"checkbox",guiOptions:{applyDefaultWhenDirty:!0},message:vr("prompts.relatedEntitySelection.message"),choices:()=>t.choices,validate:async(o,s)=>{if(t.choices.forEach(a=>{a.disabled||(a.checked=o.some(c=>c.fullPath===a.value.fullPath))}),s&&!s[qy.skipDataDownload]?.[0]){if(i=await evn(s,e,r),typeof i=="string")return i;n.odata=i.odataQueryResult}return!0},additionalMessages:()=>{if(i&&typeof i!="string")return{message:vr("prompts.skipDataDownload.querySuccess",{count:i.odataQueryResult.length}),severity:Ift.Severity.information}},showOutputTabLink:()=>({show:!!i,linkMessage:vr("prompts.relatedEntitySelection.openLogs")})}}function FCs(t,e){let r,n,i;return{when:()=>{if((n!==t.systemName?.value||t.servicePath!==r)&&t.referencedEntities?.listEntity){let s=Yyn(t.referencedEntities.listEntity,t.referencedEntities.pageObjectEntities);s&&(e.choices=s.choices,Object.assign(e.entitySetsFlat,s.entitySetsFlat)),r=t.servicePath,n=t.systemName?.value}return e.choices.length>0},name:qy.toggleSelection,type:"confirm",message:vr("prompts.toggleSelection.message"),labelTrue:vr("prompts.toggleSelection.labelTrue"),labelFalse:vr("prompts.toggleSelection.labelFalse"),default:!1,validate:s=>(s!==i&&(e.choices.forEach(a=>{if(a.disabled)return;let c=a.value;a.checked=s===!1?c.entity.defaultSelected:!1}),i=s),!0)}}function $Cs(t,e,r,n){let i=[],o,s=0,a=c=>({when:async()=>{let u=e.referencedEntities?.listEntity.semanticKeys[c],l=!!u?.name&&u.name!=="IsActiveEntity";return l&&c>s&&(s=c),l},name:`entityKeyIdx:${c}`,message:()=>vr("prompts.entityKey.message",{keyName:`${e.referencedEntities?.listEntity.semanticKeys[c]?.name} (${e.referencedEntities?.listEntity.entitySetName})`}),type:"input",guiOptions:{hint:vr("prompts.entityKey.hint")},validate:async(u,l)=>{let p=e.referencedEntities?.listEntity.semanticKeys[c];if(p&&delete p.value,Zyn.includes(u))return vr("prompts.entityKey.validation.invalidKeyValueChars",{chars:Zyn.join()});if(u&&p)if(p.type==="Edm.Boolean")try{p.value=JSON.parse(u)}catch{return vr("prompts.entityKey.validation.invalidBooleanValue")}else if(["Edm.UUID","Edm.Guid"].includes(p.type)){let h=u.split(",");for(let d of h)if(!ICs.test(d.trim()))return vr("prompts.entityKey.validation.invalidGuidValue");p.value=u.trim()}else p.value=u.trim();let f=u.split(",");if(p?.type&&!["Edm.UUID","Edm.Guid"].includes(p.type)){for(let h of f)if(h.split("-").length>2)return p&&delete p.value,vr("prompts.entityKey.validation.invalidRangeSpecified")}if(l&&!e.relatedEntityChoices?.choices?.length&&c===s&&!l[qy.skipDataDownload]?.[0]&&e.referencedEntities?.listEntity.semanticKeys[c]?.name){if(o=await evn(l,r,e),typeof o=="string")return o;n.odata=o.odataQueryResult}return!0}});for(let c=0;c<t;c++)i.push(a(c));return i}function UCs(t,e){return{when:()=>!!t.metadata&&!!e.servicePath,name:qy.skipDataDownload,type:"checkbox",message:vr("prompts.skipDataDownload.message"),guiOptions:{hint:vr("prompts.skipDataDownload.hint")},default:!1,choices:[{name:vr("prompts.skipDataDownload.choiceLabel"),value:"skipDownload",checked:!1}]}}function VCs(t,e){let r;return{when:async()=>e.appAccess&&e.specification&&t?.metadata?(r=await Ryn(e.appAccess,e.specification,t.metadata),typeof r=="object"&&(e.referencedEntities=r),!0):!1,name:qy.updateMainServiceMetadata,type:"confirm",message:vr("prompts.updateMainServiceMetadata.message"),default:!1,additionalMessages:async()=>{if(typeof r=="string")return{message:r,severity:Ift.Severity.error}}}}function rvn(t){let e=[],r=n=>[{name:`${n.entitySetName}/${n.nodeProperty}/source`,type:"list",message:`Source: ${n.entitySetName} > ${n.missingReferentialConstraints?.navPropName}`,default:!1,choices:n.entityProperties.map(i=>({name:i,value:i}))},{name:`${n.entitySetName}/${n.nodeProperty}/target`,type:"list",message:`Target: ${n.entitySetName} > ${n.missingReferentialConstraints?.navPropName}`,default:!1,choices:n.entityProperties.map(i=>({name:i,value:i}))}];return t.forEach(n=>{!n.parentProperty&&n.missingReferentialConstraints?.navPropName&&e.push(...r(n))}),e}var avn=ve(jO()),cvn=ve(nx());var uvn=ve(svn()),lvn=require("node:path");function pvn(t,e,r){dh.resetExternalServiceCache();let n=rPs(t,e),i=[];return{questions:[{name:"valueHelpSelection",type:"checkbox",message:vr("prompts.valueHelpSelection.message"),choices:()=>n,validate:async s=>{if(!s||s.length===0)return dh.resetExternalServiceCache(),!0;let a=await tPs(s,r),c=(0,uvn.default)(i,a);return i.length=0,i.push(...c),await ePs(i,r),!0}}],valueHelpData:i}}async function ePs(t,e){let r=[],n={transformResponse:o=>typeof o=="string"?JSON.parse(o):o},i=t.map(async o=>{let s=o,[a]=s.path.split(";");dh.externalServiceRequestCache[a]??=[];let l=(0,avn.convert)((0,cvn.parse)(o.metadata)).entitySets.map(async p=>{let f=p.name;if(dh.externalServiceRequestCache[a].includes(f))return;dh.externalServiceRequestCache[a].push(f);let h=await e.get((0,lvn.join)(s.path,f),n);s.entityData=s.entityData??[],s.entityData?.push({entitySetName:f,items:h.data.value})});await Promise.allSettled(l),s.entityData&&r.push(s)});return await Promise.allSettled(i),r}async function tPs(t,e){let r=t.flat();return await e.fetchExternalServices(r)}function rPs(t,e){let r=X9(t,e,[]),n={};for(let o of r)if(o.type==="value-list"){if(Ayn.includes(o.target))continue;let[s]=o.value.split(";"),a=o.target.split("/").pop();a&&(n[s]??={},n[s][a]??=[],n[s][a].push(o))}else o.type==="code-list"&&(n[o.value]??={},n[o.value]["Code list"]??=[],n[o.value]["Code list"].push(o));let i=[];for(let o of Object.values(n))for(let[s,a]of Object.entries(o)){let c=a.map(u=>{if(u.type==="value-list")return u.target.replace(/\/[^/]*$/,"");if(u.type==="code-list"&&u.collectionPath)return u.collectionPath}).filter(u=>u!==void 0);i.push({name:`${s} (${c.join()})`,value:a})}return i.sort((o,s)=>o.name.localeCompare(s.name))}var un=class t extends dvn.default{vscode;appWizard;static _logger=bve;generatorVersion=this.rootGeneratorVersion();prompts;setPromptsCallback;state={};constructor(e,r){super(e,{...r,skipInstall:!0},{unique:"namespace"}),brt(this.env,!0),this.options.force=!0,this.prompts=new oCe.Prompts([{description:vr("steps.odataDownloader.description"),name:vr("steps.odataDownloader.name")},{description:vr("steps.valueHelpSelection.description"),name:vr("steps.valueHelpSelection.name")}]),this.setPromptsCallback=n=>{this.prompts&&this.prompts.setCallback(n)},typeof r.appWizard?.setHeaderTitle=="function"&&r.appWizard.setHeaderTitle(vr("texts.generatorTitle"),`${this.rootGeneratorName()}@${this.rootGeneratorVersion()}`)}static get logger(){return t._logger}async initializing(){await Jnt(),t._logger=this._configureLogging(this.options.logLevel,this.options.logger,this.options.vscode),await Pf.initTelemetrySettings(),Pf.sendTelemetry("ODATA_DOWNLOADER_STARTED",{startUpTime:Date()})}async prompting(){try{let{answers:{application:e,odataQueryResult:r,odataServiceAnswers:n},questions:i}=await tvn(this.options?.data),o=await this.prompt(i);if(this.state.entityOData=r.odata,this.state.entityPropertyToEntitySet=e.relatedEntityChoices.entitySetsFlat,this.state.appRootPath=e.appAccess?.getAppRoot(),this.state.mainServicePath=n.servicePath,this.state.mainServiceName=e.appAccess?.app.mainService,this.state.appEntities=e.referencedEntities,this.state.appRootPath){this.state.mockServerConfig=await LP(this.state.appRootPath);let s;this.state.mockServerConfig?.services&&(t.logger.debug(`Mock config: ${JSON.stringify(this.state.mockServerConfig)}`),s=this.state.mockServerConfig.services.find(a=>a.urlPath.replaceAll(/(^\/)|(\/$)/g,"")===this.state.mainServicePath?.replaceAll(/(^\/)|(\/$)/g,""))),this.state.mockDataRootPath=s?.mockdataPath??(0,nL.join)(Ps.Webapp,Ps.LocalService,Ps.Mockdata)}if(this.state.updateMainServiceMetadata=o[qy.updateMainServiceMetadata],this.state.mainServiceMetadata=n.metadata,o[qy.skipDataDownload]?.[0]||await this._promptMissingReferentialConstraints(e,o),n.servicePath&&n.metadata&&n.connectedSystem?.serviceProvider instanceof Xf){let{questions:s,valueHelpData:a}=pvn(n.servicePath,n.metadata,n.connectedSystem?.serviceProvider);await this.prompt(s),this.state.valueHelpData=a}}catch(e){t.logger.error(e),this._exitOnError(e)}}async writing(){if(this.state.appRootPath){if(this.state.entityOData&&this.state.entityPropertyToEntitySet&&this.state.appEntities)try{let e=Date.now();Pf.sendTelemetry("ODATA_DOWNLOADER_WRITE_DATA_FILES_START",{time:Date()}),this.destinationRoot((0,nL.join)(this.state.appRootPath));let r=wft(this.state.entityOData,this.state.entityPropertyToEntitySet,this.state.appEntities.listEntity.entitySetName,this.state.appEntities.hierarchyEntities);t.logger.info(vr("info.entityFilesToBeGenerated",{entities:Object.keys(r).join(", ")}));let n=Object.entries(r);n.forEach(([i,o])=>{this.writeDestinationJSON((0,nL.join)(this.state.mockDataRootPath,`${i}.json`),o)}),this.state.appEntities.hierarchyEntities?.filter(i=>i.missingReferentialConstraints&&n.some(([o])=>o===i.entitySetName))?.forEach(i=>{let o=(0,nL.join)(this.state.mockDataRootPath,`${i.entitySetName}.js`),s=this.destinationPath(o),{navPropName:a,constraints:c}=i.missingReferentialConstraints;if(this.fs.exists(s)){let u=this.fs.read(s),l=Lyn(u,a,c);l!==u?(this.writeDestination(o,l),t.logger.info(`Updated referential constraint file: ${i.entitySetName}.js`)):t.logger.debug(`Referential constraint for '${a}' already present in ${i.entitySetName}.js \u2014 skipping`)}else{let u=Iyn(a,c);this.writeDestination(o,u),t.logger.info(`Written referential constraint file: ${i.entitySetName}.js`)}}),Pf.sendTelemetry("ODATA_DOWNLOADER_WRITE_DATA_FILES_END",{writeFileDuration:`${Date.now()-e} ms`,numberOfFiles:`${n.length}`})}catch(e){t.logger.error(e),Pf.sendTelemetry("ODATA_DOWNLOADER_WRITING_DATA_ERROR",{writeFileErrorTime:Date()})}else t.logger.info(vr("info.noServiceEntityData"));if(this.state.valueHelpData?.length)try{let e=Date.now();Pf.sendTelemetry("ODATA_DOWNLOADER_WRITE_VALUE_HELP_FILES_START",{time:Date()});let r=(0,nL.join)(this.state.appRootPath,Ps.Webapp);if(await Hve(this.fs,r,this.state.valueHelpData,this.state.mainServiceName,this.state.mainServicePath),this.state.mockServerConfig){let n={webappPath:r,packageJsonConfig:{skip:!0},ui5MockYamlConfig:{overwrite:!0}};n.ui5MockYamlConfig&&this.state.mainServiceName&&(n.ui5MockYamlConfig.resolveExternalServiceReferences={[this.state.mainServiceName]:!0},await Sve(this.state.appRootPath,n,this.fs))}Pf.sendTelemetry("ODATA_DOWNLOADER_WRITE_VALUE_HELP_DATA_FILES_END",{writeFileDuration:`${Date.now()-e} ms`,numberOfExternalServices:`${this.state.valueHelpData.length}`})}catch(e){t.logger.error(e),Pf.sendTelemetry("ODATA_DOWNLOADER_WRITING_BALUE_HELP_DATA_ERROR",{writeFileErrorTime:Date()})}else t.logger.info(vr("info.noValueHelpData"));if(this.state.updateMainServiceMetadata&&this.state.mainServiceMetadata&&this.state.mainServiceName){let e=(0,nL.join)(this.state.appRootPath,Ps.Webapp,Ps.LocalService,this.state.mainServiceName,"metadata.xml");this.writeDestination(e,(0,fvn.default)(this.state.mainServiceMetadata,{indentation:" ",lineSeparator:`
3140
3140
  `,collapseContent:!0,throwOnFailure:!1}))}}}async _promptMissingReferentialConstraints(e,r){let n=e.referencedEntities?.listEntity.entitySetName,i=new Set([...n?[n]:[],...(r[qy.relatedEntitySelection]??[]).map(s=>s.entity.entitySetName)]),o=e.referencedEntities?.hierarchyEntities?.filter(s=>!s.parentProperty&&s.missingReferentialConstraints&&i.has(s.entitySetName))??[];if(o.length>0){this.prompts.splice(1,0,[{name:vr("steps.addConstraints.name"),description:vr("steps.addConstraints.description")}]);let s=rvn(o),a=await this.prompt(s),c=[e.referencedEntities?.listEntity,...e.referencedEntities?.pageObjectEntities??[]];o.forEach(u=>{let l=a[`${u.entitySetName}/${u.nodeProperty}/source`],p=a[`${u.entitySetName}/${u.nodeProperty}/target`];if(l&&p){u.missingReferentialConstraints.constraints=[{sourceProperty:l,targetProperty:p}],u.parentProperty=l;let f=c.find(h=>h?.entitySetName===u.entitySetName)?.entityType;u.parentPropertyType=f?.entityProperties.find(h=>h.name===l)?.type??"Edm.String"}})}}_exitOnError(e){throw ag()!==oo.cli&&this.appWizard?.showError(e,oCe.MessageType.notification),new Error(e)}_configureLogging(e,r,n){let i=new Eve(this.rootGeneratorName(),this.log,e,r,n);return i.info(vr("info.loggingInitialised",{logLevel:i.getLogLevel()})),i}};
3141
3141
  /*! Bundled license information:
3142
3142
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@sap-ux/generator-odata-downloader",
3
3
  "displayName": "Fiori Elements Data Downloader",
4
4
  "description": "Yeoman generator that supports download of app data, typically for mock data server use.",
5
- "version": "0.3.37",
5
+ "version": "0.3.38",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "https://github.com/SAP/open-ux-tools.git",
@@ -47,11 +47,11 @@
47
47
  "@sap-ux/axios-extension": "2.0.8",
48
48
  "@sap-ux/btp-utils": "2.0.6",
49
49
  "@sap-ux/fiori-generator-shared": "1.2.6",
50
- "@sap-ux/inquirer-common": "1.0.30",
50
+ "@sap-ux/inquirer-common": "1.0.31",
51
51
  "@sap-ux/logger": "1.0.3",
52
52
  "@sap-ux/mockserver-config-writer": "1.0.15",
53
- "@sap-ux/odata-service-inquirer": "3.2.7",
54
- "@sap-ux/odata-service-writer": "1.0.17",
53
+ "@sap-ux/odata-service-inquirer": "3.2.8",
54
+ "@sap-ux/odata-service-writer": "1.0.18",
55
55
  "@sap-ux/project-access": "2.1.10",
56
56
  "@sap-ux/store": "2.0.6",
57
57
  "@sap-ux/telemetry": "1.0.24",