@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.
- package/generators/app/index.js +1 -1
- package/package.json +4 -4
package/generators/app/index.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
54
|
-
"@sap-ux/odata-service-writer": "1.0.
|
|
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",
|