UNPKG

@sap/generator-fiori

Version:

Create an SAPUI5 application using SAP Fiori elements or a freestyle approach

1 lines 25 kB
"use strict";exports.id=3491,exports.ids=[3491],exports.modules={25077(e,a,n){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.updateCdsFilesWithAnnotations=async function updateCdsFilesWithAnnotations(e,a){if(Array.isArray(e))for(const n in e){const i=e[n],r=(0,o.join)(i.projectPath,i.appPath??"",i.projectName,"annotations.cds");a.exists(r)?a.append(r,i.cdsFileContents):a.write(r,i.cdsFileContents),await updateCdsIndexOrServiceFile(a,i)}else{const n=(0,o.join)(e.projectPath,e.appPath??"",e.projectName,"annotations.cds");a.write(n,e.cdsFileContents),await updateCdsIndexOrServiceFile(a,e)}},a.removeAnnotationsFromCDSFiles=async function removeAnnotationsFromCDSFiles(e,a){if(Array.isArray(e))for(const n in e){const i=e[n],r=(0,o.join)(i.projectPath,i.appPath??"",i.projectName,"annotations.cds");if(a.exists(r)){const e=a.read(r).replace(i.cdsFileContents,"");a.write(r,e)}await removeCdsIndexOrServiceFile(a,i)}else{const n=(0,o.join)(e.projectPath,e.appPath??"",e.projectName,"annotations.cds");if(a.exists(n)){const i=a.read(n).replace(e.cdsFileContents,"");a.write(n,i)}await removeCdsIndexOrServiceFile(a,e)}},a.writeLocalServiceAnnotationXMLFiles=async function writeLocalServiceAnnotationXMLFiles(e,a,n,i){if(await writeMetadata(e,a,i),i.localAnnotationsName){const r=getAnnotationNamespaces(i);e.copyTpl((0,o.join)(n,"add","annotation.xml"),(0,o.join)(a,l.DirName.Annotations,`${i.localAnnotationsName}.xml`),{...i,namespaces:r})}},a.writeMetadata=writeMetadata,a.removeRemoteServiceAnnotationXmlFiles=async function removeRemoteServiceAnnotationXmlFiles(e,a,n,i){const r=await(0,l.getWebappPath)(a,e);if(Array.isArray(i))for(const a in i){const s=i[a],c=(0,o.join)(r,l.DirName.LocalService,n,`${s.technicalName}.xml`);e.exists(c)&&e.delete(c)}else if(i?.xml){const a=(0,o.join)(r,l.DirName.LocalService,n,`${i.technicalName}.xml`);e.exists(a)&&e.delete(a)}},a.writeRemoteServiceAnnotationXmlFiles=async function writeRemoteServiceAnnotationXmlFiles(e,a,n,i){const r=await(0,l.getWebappPath)(a,e);if(Array.isArray(i))for(const a in i){const s=i[a];s?.xml&&e.write((0,o.join)(r,l.DirName.LocalService,n,`${s.name}.xml`),(0,c.default)(s.xml,{indent:4}))}else i?.xml&&e.write((0,o.join)(r,l.DirName.LocalService,n,`${i.name}.xml`),(0,c.default)(i.xml,{indent:4}))},a.getAnnotationNamespaces=getAnnotationNamespaces;const o=n(76760),r=n(24319),s=n(87572),c=i(n(93407)),l=n(20787);async function updateCdsIndexOrServiceFile(e,a){const n=(0,o.join)(a.projectName,l.DirName.Annotations),i=`\nusing from './${(0,o.normalize)(n).split(/[\\/]/g).join(o.posix.sep)}';`,r=(0,o.join)(a.projectPath,a.appPath??"","index.cds"),s=(0,o.join)(a.projectPath,a.appPath??"","services.cds");r&&e.exists(r)?e.append(r,i):e.exists(s)?e.append(s,i):e.write(s,i)}async function removeCdsIndexOrServiceFile(e,a){const n=(0,o.join)(a.projectName,l.DirName.Annotations),i=`\nusing from './${(0,o.normalize)(n).split(/[\\/]/g).join(o.posix.sep)}';`,r=(0,o.join)(a.projectPath,a.appPath??"","index.cds"),s=(0,o.join)(a.projectPath,a.appPath??"","services.cds");if(r&&e.exists(r)){const a=e.read(r).replace(i,"");e.write(r,a)}else if(e.exists(s)){const a=e.read(s).replace(i,"");e.write(s,a)}}async function writeMetadata(e,a,n){n.metadata&&e.write((0,o.join)(a,l.DirName.LocalService,n.name??"mainService","metadata.xml"),(0,c.default)(n.metadata,{indent:4}))}function getAnnotationNamespacesForSingleAnnotation(e,a){if(e?.xml){const n=xmlToJson(e.xml);return a.map(a=>{const i=e.xml&&a.namespace?function getAliasFromAnnotation(e,a){let n=e["edmx:Edmx"]?.["edmx:Reference"];Array.isArray(n)||(n=[n]);const i=n.find(e=>e["edmx:Include"]?.Namespace===a&&e["edmx:Include"]?.Alias);return i?i["edmx:Include"]?.Alias:""}(n,a.namespace):"";return i&&(a.alias=i),a})}return a}function getAnnotationNamespaces({metadata:e,annotations:a}){let n=e?function getNamespaces(e){const a=xmlToJson(e);let n=a["edmx:Edmx"]?.["edmx:DataServices"]?.Schema;if(!n)return[];Array.isArray(n)||(n=[n]);return n.map(e=>({namespace:e.Namespace,alias:e.Alias||""}))}(e):[];if(Array.isArray(a))for(const e in a){n=getAnnotationNamespacesForSingleAnnotation(a[e],n)}else{n=getAnnotationNamespacesForSingleAnnotation(a,n)}return n}function xmlToJson(e){const a={attributeNamePrefix:"",ignoreAttributes:!1,ignoreNameSpace:!0,parseAttributeValue:!0};try{return new r.XMLParser(a).parse(e,!0)}catch(e){throw new Error((0,s.t)("error.unparseableXML",{error:e}))}}},73814(e,a){Object.defineProperty(a,"__esModule",{value:!0}),a.DEFAULT_DATASOURCE_NAME=void 0,a.DEFAULT_DATASOURCE_NAME="mainService"},59581(e,a,n){Object.defineProperty(a,"__esModule",{value:!0}),a.enhanceData=async function enhanceData(e,a,n,l=!1){l||function setDefaultServicePath(e){e.path=e.path?.endsWith("/")?e.path:(e.path??"")+"/"}(a);await async function setDefaultServiceName(e,a,n,o){const c=(0,i.join)(await(0,s.getWebappPath)(e,n),s.FileName.Manifest),l=n.readJSON(c),d=l?.["sap.app"]?.dataSources;if(d){0===Object.values(d).filter(e=>"OData"===e.type).length?a.name=r.DEFAULT_DATASOURCE_NAME:a.name&&!o&&(a.name=function generateUniqueServiceName(e,a){let n=a,i=1,o=!0;do{e?.[n]?n=`${a}${i++}`:o=!1}while(o);return n}(d,a.name))}else a.name=r.DEFAULT_DATASOURCE_NAME}(e,a,n,l),await async function setDefaultServiceModel(e,a,n,o){const c=(0,i.join)(await(0,s.getWebappPath)(e,n),"manifest.json"),l=n.readJSON(c);if(!a.model){const e=l?.["sap.ui5"]?.models;if(e){const n=Object.values(e).filter(e=>e.dataSource);0===n.length||o&&n.find(e=>e.dataSource===r.DEFAULT_DATASOURCE_NAME)&&a.name===r.DEFAULT_DATASOURCE_NAME?a.model="":a.name&&(a.model=a.name)}else a.model=""}}(e,a,n,l),a.type=a.type??o.ServiceType.EDMX,a.type===o.ServiceType.EDMX&&function setDefaultAnnotationsName(e){if(Array.isArray(e.annotations)){const a=e.annotations;for(const n in a){setDefaultAnnotationName(a[n],e.name)}}else if(e.annotations){setDefaultAnnotationName(e.annotations,e.name)}}(a);await async function setDefaultPreviewSettings(e,a,n,o=!1){const r=function getPreviewSettings(e){const a={path:e.previewSettings?.path??`/${e.path?.split("/").find(e=>""!==e)??""}`,url:e.previewSettings?.url??e.url??"http://localhost"};e.client&&!e.previewSettings?.client&&(a.client=e.client);e.destination&&!e.previewSettings?.destination&&(a.destination=e.destination.name,e.destination.instance&&(a.destinationInstance=e.destination.instance));return a}(a),l=a.previewSettings?.path;a.previewSettings={...r,...a.previewSettings};const d=(0,i.join)(e,s.FileName.Ui5Yaml);if(!n.exists(d))return;const u=n.read(d),p=(await c.UI5Config.newInstance(u)).getBackendConfigsFromFioriToolsProxyMiddleware();o?function preserveExistingBackendConfig(e,a,n){const i=a.find(a=>a.path===e.previewSettings?.path);if(!i)return;i.pathPrefix&&(e.previewSettings.pathPrefix=i.pathPrefix);n||(e.previewSettings.path=e.path)}(a,p,l):p.find(e=>"/sap"===e.path)&&function adjustPreviewPathForNewService(e,a){a.find(e=>"/sap"===e.path)&&(e.previewSettings.path=e.path)}(a,p)}(e,a,n,l)};const i=n(76760),o=n(40963),r=n(73814),s=n(20787),c=n(8231);function setDefaultAnnotationName(e,a){e?.technicalName&&!e.name&&(e.name=e?.technicalName?.replace(/\//g,"_")?.replace(/^_/,"")),e.name===a&&(e.name+="_Annotation")}},90645(e,a,n){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.writeExternalServiceMetadata=function writeExternalServiceMetadata(e,a,n,i=u.DEFAULT_DATASOURCE_NAME,r){if(!n.length||!r)return;const c=new Set;for(const l of n){const n=getServiceRoot(r,l.path),u=[a,d.DirName.LocalService,i,n],p=l.path.split(";")[0];if(l.entityData&&!c.has(p)){for(const a of l.entityData){const n=(0,o.join)(...u,`${a.entitySetName}.json`);e.write(n,JSON.stringify(a.items,void 0,4))}c.add(p)}"value-list"===l.type&&u.push(l.target),u.push("metadata.xml");const m=(0,o.join)(...u);l.metadata&&e.write(m,(0,s.default)(l.metadata,{indent:4}))}},a.getExternalServiceReferences=function getExternalServiceReferences(e,a,n=[],i){const o=function getOptions(e){if(!e)return{...p};return{valueListReferences:e.valueListReferences??p.valueListReferences,codeLists:e.codeLists??p.codeLists}}(i);if(!a)return[];const r=[a,...n.map(e=>e.Definitions)],s=[];for(const a of r){const n="string"==typeof a?(0,c.convert)((0,l.parse)(a)):a;for(const a of Object.values(n.annotations))for(const i of a){collectExternalServiceReferences(o,s,i.target.replace(n.namespace+".",""),i,e)}}return s};const o=n(76760),r=n(53916),s=i(n(93407)),c=n(91125),l=n(39933),d=n(20787),u=n(73814);function getServiceRoot(e,a){const[n]=a.split(";"),i=n.split("/");let o="/",s=i.shift();for(;void 0!==s;){const a=(0,r.join)(o,s);if(!e.startsWith(a))break;o=a,s=i.shift()}return n.replace(o,"")}const p={valueListReferences:!0,codeLists:!0};function collectExternalServiceReferences(e,a,n,i,o){for(const r of i.annotations)collectValueListReferences(e,a,n,r,o),collectCodeLists(e,a,r,o)}function collectValueListReferences(e,a,n,i,o){if(e.valueListReferences&&"com.sap.vocabularies.Common.v1.ValueListReferences"===i.term)for(const e of i.collection??[])if("String"===e.type){const i=e;a.push({type:"value-list",serviceRootPath:o,target:n,value:i.String})}}function collectCodeLists(e,a,n,i){if(e.codeLists&&("com.sap.vocabularies.CodeList.v1.CurrencyCodes"===n.term||"com.sap.vocabularies.CodeList.v1.UnitsOfMeasure"===n.term)&&n.record){const e=getPropertyValue(n.record,"CollectionPath"),o=getPropertyValue(n.record,"Url");o&&a.push({type:"code-list",serviceRootPath:i,value:o,collectionPath:e??void 0})}}function getPropertyValue(e,a){const n=e.propertyValues.find(e=>e.name===a);if("String"===n?.value?.type){return n.value.String}}},92275(e,a,n){var i=this&&this.__createBinding||(Object.create?function(e,a,n,i){void 0===i&&(i=n);var o=Object.getOwnPropertyDescriptor(a,n);o&&!("get"in o?!a.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return a[n]}}),Object.defineProperty(e,i,o)}:function(e,a,n,i){void 0===i&&(i=n),e[i]=a[n]}),o=this&&this.__exportStar||function(e,a){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(a,n)||i(a,e,n)};Object.defineProperty(a,"__esModule",{value:!0}),o(n(59581),a),o(n(25077),a),o(n(90645),a)},27758(e,a,n){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.deleteServiceFromManifest=function deleteServiceFromManifest(e,a,n){const i=a.name??"mainService",s=(0,o.join)(e,"webapp","manifest.json"),c=n.readJSON(s),l="sap.app",d=c?.[l]?.id;if(!d)throw new Error((0,r.t)("error.requiredProjectPropertyNotFound",{property:`'${l}'.id`,path:s}));const u=c?.[l]?.dataSources;u?.[i]&&removeFileForDataSource(n,s,u?.[i]);const p=u?.[i]?.settings;p?.annotations&&p.annotations.length>0&&function removeAnnotations(e,a,n,i){for(const o of n){const n=i?.[o];"ODataAnnotation"===n?.type&&(n.uri===n?.settings?.localUri||n&&(removeFileForDataSource(e,a,n),delete i?.[o]))}}(n,s,p.annotations,u);u?.[i]&&delete u[i];const m=c?.["sap.ui5"]?.models;if(m)for(const e of Object.keys(m)){const a=m[e];a?.dataSource===i&&delete m[e]}n.writeJSON(s,c)},a.updateManifest=async function updateManifest(e,a,n,i=!1){const l=await(0,s.getWebappPath)(e,n),d=(0,o.join)(l,"manifest.json"),u=n.readJSON(d),p="sap.app",m=u?.[p]?.id,f=u[p]?.dataSources??{};if(!m)throw new Error((0,r.t)("error.requiredProjectPropertyNotFound",{property:`'${p}'.id`,path:d}));if(i&&a.name&&!f?.[a.name])throw new Error((0,r.t)("error.requiredProjectPropertyNotFound",{property:`'${p}.dataSources.${a.name}'`,path:d}));if(!i&&a.path&&Object.values(f).find(e=>e.uri===a.path))throw new Error((0,r.t)("error.requiredServiceAlreadyExists",{uri:a.path}));const v=await async function addMultipleServiceSupportToManifest(e,a,n){const i=a?.["sap.app"]?.dataSources;for(const a in i){const o=i[a];if("OData"===o?.type){convertSingleService(e,a,o,n);const r=o.settings?.annotations;r&&r.forEach(o=>{const r=i[o];r&&convertSingleService(e,a,r,n)})}}return a}(l,u,n);(function enhanceManifest(e,a,n,i,r){const l=(0,s.getMinimumUI5Version)(a),d=Object.assign(e,function getModelSettings(e){let a=!1;e&&(a=c.default.satisfies(e,"<=1.110"));return{includeSynchronizationMode:a}}(l));d.name&&d.path&&void 0!==d.model&&(!function enhanceManifestDatasources(e,a,n){const{serviceName:i,servicePath:r,serviceVersion:s,manifest:c,forceServiceUpdate:l,serviceMetadata:d,serviceRemoteAnnotations:u,serviceLocalAnnotations:p}=n,m=c?.["sap.app"].dataSources??{},f=function addRemoteAnnotationDataSources(e,a,n,i,r,s){const c=[];Array.isArray(r)?r.forEach(e=>{e.name&&(n[e.name]={uri:`/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Annotations(TechnicalName='${encodeURIComponent(e.technicalName)}',Version='0001')/$value/`,type:"ODataAnnotation",settings:{localUri:`localService/${i}/${e.name}.xml`}},c.push(e.name))}):r?.name&&(n[r.name]={uri:`/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Annotations(TechnicalName='${encodeURIComponent(r.technicalName)}',Version='0001')/$value/`,type:"ODataAnnotation",settings:{localUri:`localService/${i}/${r.name}.xml`}},c.push(r.name));s&&function removeUnusedAnnotations(e,a,n,i,r){const s=n?.[i].settings?.annotations??[];s.forEach(i=>{const s=n[i];if("ODataAnnotation"===s?.type&&s.uri!==s.settings?.localUri&&!r.includes(i)){const r=s.settings?.localUri;r&&e.exists((0,o.join)(a,r))&&e.delete((0,o.join)(a,r)),delete n[i]}})}(e,a,n,i,c);return c}(e,a,m,i,u,l),v=function addLocalAnnotationDataSources(e,a,n,i){const o=[];if(i){(e?.[a]?.settings?.annotations??[]).forEach(a=>{const n=e[a];"ODataAnnotation"===n?.type&&n.uri===n.settings?.localUri&&o.push(a)})}else Array.isArray(n)?n.forEach(a=>{e[a]={type:"ODataAnnotation",uri:`annotations/${a}.xml`,settings:{localUri:`annotations/${a}.xml`}},o.push(a)}):n&&(e[n]={type:"ODataAnnotation",uri:`annotations/${n}.xml`,settings:{localUri:`annotations/${n}.xml`}},o.push(n));return o}(m,i,p,l),S={annotations:[...f,...v]};d&&(S.localUri=`localService/${i}/metadata.xml`);let g;"4"===s?g=d&&function getOdataVersionFromMetadata(e){const a=/Version="([^"]+)"/.exec(e.slice(0,500));return"4.01"===a?.[1]?"4.01":void 0}(d)||"4.0":"2"===s&&(g="2.0");g&&(S.odataVersion=g);m[i]={uri:r,type:"OData",settings:S},c["sap.app"].dataSources=m}(i,n,{serviceName:d.name,servicePath:d.path,serviceVersion:d.version,manifest:a,forceServiceUpdate:r,serviceMetadata:d.metadata,serviceRemoteAnnotations:d.annotations,serviceLocalAnnotations:d.localAnnotationsName}),function enhanceManifestModels(e,a,n,i,o){const r=o?.["sap.ui5"]?.models??{};let s={};"4"===a&&(i&&(s.synchronizationMode="None"),s.operationMode="Server",s.autoExpandSelect=!0,s.earlyRequests=!0);r[n]?.settings?(s={...r[n].settings,...s},r[n]={...r[n],dataSource:e,preload:!0,settings:s}):r[n]={dataSource:e,preload:!0,settings:s};o["sap.ui5"]?o["sap.ui5"]={...o["sap.ui5"],models:r}:Object.assign(o,{"sap.ui5":{models:{...r}}})}(d.name,d.version,d.model,d.includeSynchronizationMode,a))})(a,v,l,n,i),n.writeJSON(d,v)};const o=n(76760),r=n(87572),s=n(20787),c=i(n(85263));function convertSingleService(e,a,n,i){const r=n.settings;if(r){const n=r.localUri,c=n?n.split("/"):void 0;if(c?.[0]===s.DirName.LocalService&&2===c.length){const n=c[c.length-1];r.localUri=`${s.DirName.LocalService}/${a}/${n}`;const l=(0,o.join)(e,c.join(o.sep)),d=(0,o.join)(e,s.DirName.LocalService,a,n);i.exists(l)&&i.move(l,d)}}}function removeFileForDataSource(e,a,n){const i=n.settings??{};if(i?.localUri){const n=(0,o.join)((0,o.dirname)(a),i?.localUri);e.exists(n)&&e.delete(n)}}},60999(e,a,n){Object.defineProperty(a,"__esModule",{value:!0}),a.updatePackageJson=function updatePackageJson(e,a,n){const o=JSON.parse(a.read(e));o.devDependencies=o.devDependencies??{},(0,i.hasUI5CliV3)(o.devDependencies)||(o.ui5=o.ui5??{},o.ui5.dependencies=o.ui5.dependencies??[],o.ui5.dependencies.includes("@sap/ux-ui5-tooling")||o.ui5.dependencies.push("@sap/ux-ui5-tooling"),!n||o.ui5.dependencies.includes("@sap/ux-ui5-fe-mockserver-middleware")||o.ui5.dependencies.includes("@sap-ux/ui5-middleware-fe-mockserver")||o.ui5.dependencies.push("@sap-ux/ui5-middleware-fe-mockserver"));o.devDependencies["@sap/ux-ui5-tooling"]||(o.devDependencies["@sap/ux-ui5-tooling"]="1");n&&(o.devDependencies["@sap/ux-ui5-fe-mockserver-middleware"]||o.devDependencies["@sap-ux/ui5-middleware-fe-mockserver"]||(o.devDependencies["@sap-ux/ui5-middleware-fe-mockserver"]="2"));a.writeJSON(e,o)};const i=n(20787)},62315(e,a,n){Object.defineProperty(a,"__esModule",{value:!0}),a.deleteServiceData=async function deleteServiceData(e,a,n,s){if((0,o.deleteServiceFromManifest)(e,n,s),n.path&&n.name){let o,c,l;a.ui5Yaml&&(o=await i.UI5Config.newInstance(s.read(a.ui5Yaml)),o.removeBackendFromFioriToolsProxyMiddleware(n.path),s.write(a.ui5Yaml,o.toString()));const d=function getEDMXAnnotationPaths(e){const a=[];if(Array.isArray(e))e.forEach(e=>{const n=encodeURIComponent(e.technicalName);a.push(`/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Annotations(TechnicalName='${n}',Version='0001')/$value/`)});else{const n=encodeURIComponent(e.technicalName);a.push(`/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Annotations(TechnicalName='${n}',Version='0001')/$value/`)}return a}(n.annotations);a.ui5LocalYaml&&(c=await i.UI5Config.newInstance(s.read(a.ui5LocalYaml)),c.removeBackendFromFioriToolsProxyMiddleware(n.path),c.removeServiceFromMockServerMiddleware(n.path,d),s.write(a.ui5LocalYaml,c.toString())),a.ui5MockYaml&&(l=await i.UI5Config.newInstance(s.read(a.ui5MockYaml)),l.removeBackendFromFioriToolsProxyMiddleware(n.path),l.removeServiceFromMockServerMiddleware(n.path,d),s.write(a.ui5MockYaml,l.toString())),await(0,r.removeRemoteServiceAnnotationXmlFiles)(s,e,n.name,n.annotations)}};const i=n(8231),o=n(27758),r=n(25077)},87572(e,a,n){var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(a,"__esModule",{value:!0}),a.i18n=void 0,a.initI18n=initI18n,a.t=function t(e,n){return a.i18n.t(e,n)};const o=i(n(68801)),r=i(n(39057)),s="odata-service-writer";async function initI18n(){await a.i18n.init({resources:{en:{[s]:r.default}},lng:"en",fallbackLng:"en",defaultNS:s,ns:[s],showSupportNotice:!1})}a.i18n=o.default.createInstance(),initI18n().catch(()=>{})},10894(e,a,n){Object.defineProperty(a,"__esModule",{value:!0}),a.writeExternalServiceMetadata=a.getAnnotationNamespaces=a.getExternalServiceReferences=a.ServiceType=a.OdataVersion=void 0,a.generate=async function generate(e,a,n){n||(n=(0,r.create)((0,o.create)()));const l=await findProjectFiles(e,n);ensureExists(await(0,p.getWebappPath)(e,n),["manifest.json"],n),await(0,c.enhanceData)(e,a,n);const u=a.type===d.ServiceType.EDMX,f=(0,i.join)(__dirname,"../templates");await(0,m.updateManifest)(e,a,n),u?await(0,s.addServicesData)(e,l,f,a,n):!u&&a.annotations&&await(0,c.updateCdsFilesWithAnnotations)(a.annotations,n);return n},a.update=async function update(e,a,n,i=!0){n||(n=(0,r.create)((0,o.create)()));const l=await findProjectFiles(e,n);ensureExists(await(0,p.getWebappPath)(e,n),["manifest.json"],n),await(0,c.enhanceData)(e,a,n,!0);const u=a.type===d.ServiceType.EDMX;await(0,m.updateManifest)(e,a,n,!0),u&&await(0,s.updateServicesData)(e,l,a,n,i);return n},a.remove=async function remove(e,a,n){n||(n=(0,r.create)((0,o.create)()));const i=await findProjectFiles(e,n);a.type===d.ServiceType.EDMX?await(0,u.deleteServiceData)(e,i,a,n):await(0,c.removeAnnotationsFromCDSFiles)(a.annotations,n);return n};const i=n(76760),o=n(64812),r=n(90718),s=n(37089),c=n(92275),l=n(87572),d=n(40963),u=n(62315),p=n(20787),m=n(27758);function ensureExists(e,a,n){a.forEach(a=>{if(!n.exists((0,i.join)(e,a)))throw new Error((0,l.t)("error.requiredProjectFileNotFound",{path:a}))})}async function findProjectFiles(e,a){const n={},o=e.split(i.sep);for(;o.length>0&&(!n.packageJson||!n.ui5Yaml||!n.ui5LocalYaml||!n.ui5MockYaml);){const e=o.join(i.sep);!n.packageJson&&a.exists((0,i.join)(e,"package.json"))&&(n.packageJson=(0,i.join)(e,"package.json")),!n.ui5Yaml&&a.exists((0,i.join)(e,"ui5.yaml"))&&(n.ui5Yaml=(0,i.join)(e,"ui5.yaml")),!n.ui5LocalYaml&&a.exists((0,i.join)(e,"ui5-local.yaml"))&&(n.ui5LocalYaml=(0,i.join)(e,"ui5-local.yaml")),!n.ui5MockYaml&&a.exists((0,i.join)(e,"ui5-mock.yaml"))&&(n.ui5MockYaml=(0,i.join)(e,"ui5-mock.yaml")),o.pop()}return n}var f=n(40963);Object.defineProperty(a,"OdataVersion",{enumerable:!0,get:function(){return f.OdataVersion}}),Object.defineProperty(a,"ServiceType",{enumerable:!0,get:function(){return f.ServiceType}});var v=n(92275);Object.defineProperty(a,"getExternalServiceReferences",{enumerable:!0,get:function(){return v.getExternalServiceReferences}}),Object.defineProperty(a,"getAnnotationNamespaces",{enumerable:!0,get:function(){return v.getAnnotationNamespaces}}),Object.defineProperty(a,"writeExternalServiceMetadata",{enumerable:!0,get:function(){return v.writeExternalServiceMetadata}})},40963(e,a){var n,i;Object.defineProperty(a,"__esModule",{value:!0}),a.ServiceType=a.OdataVersion=void 0,function(e){e.v2="2",e.v4="4"}(n||(a.OdataVersion=n={})),function(e){e.EDMX="edmx",e.CDS="cds"}(i||(a.ServiceType=i={}))},37089(e,a,n){Object.defineProperty(a,"__esModule",{value:!0}),a.addServicesData=async function addServicesData(e,a,n,i,u){const{ui5Config:p,ui5LocalConfig:m}=await async function updateUI5YamlConfigs(e,a,n){let i,o;n.ui5Yaml&&(i=await r.UI5Config.newInstance(e.read(n.ui5Yaml)),extendBackendMiddleware(e,a,i,n.ui5Yaml),n.ui5LocalYaml&&(o=await r.UI5Config.newInstance(e.read(n.ui5LocalYaml)),extendBackendMiddleware(e,a,o,n.ui5LocalYaml)));return{ui5Config:i,ui5LocalConfig:o}}(u,i,a),f=await(0,o.getWebappPath)(e,u);i.metadata&&(a.ui5Yaml&&p&&await async function generateAndUpdateMockserverConfig(e,a,n,i,o,c){const l={webappPath:i,ui5MockYamlConfig:{}};l.ui5MockYamlConfig&&n.name&&n.externalServices?.length&&(l.ui5MockYamlConfig.resolveExternalServiceReferences={[n.name]:!0});if(await(0,s.generateMockserverConfig)(e,l,c),await generateMockserverMiddlewareBasedOnUi5MockYaml(c,a.ui5Yaml,a.ui5LocalYaml,o),a.ui5MockYaml){const e=await r.UI5Config.newInstance(c.read(a.ui5MockYaml));extendBackendMiddleware(c,n,e,a.ui5MockYaml)}}(e,a,i,f,m,u),await(0,c.writeLocalServiceAnnotationXMLFiles)(u,f,n,i));a.packageJson&&a.ui5Yaml&&(0,l.updatePackageJson)(a.packageJson,u,!!i.metadata);a.ui5LocalYaml&&m&&u.write(a.ui5LocalYaml,m.toString());await(0,c.writeRemoteServiceAnnotationXmlFiles)(u,e,i.name??"mainService",i.annotations),i.externalServices&&f&&(0,d.writeExternalServiceMetadata)(u,f,i.externalServices,i.name,i.path)},a.updateServicesData=async function updateServicesData(e,a,n,i,l){let u,p;l&&(a.ui5Yaml&&(u=await r.UI5Config.newInstance(i.read(a.ui5Yaml)),extendBackendMiddleware(i,n,u,a.ui5Yaml,!0)),a.ui5LocalYaml&&(p=await r.UI5Config.newInstance(i.read(a.ui5LocalYaml)),extendBackendMiddleware(i,n,p,a.ui5LocalYaml,!0)));const m=await async function updateMetadata(e,a,n,i,l,d,u){if(!n.metadata)return;const p=await(0,o.getWebappPath)(e,d);if(a.ui5MockYaml&&a.ui5Yaml&&i&&u){const i={webappPath:p,packageJsonConfig:{skip:!0},ui5MockYamlConfig:{overwrite:!0}};if(i.ui5MockYamlConfig&&n.name&&n.externalServices?.length&&(i.ui5MockYamlConfig.resolveExternalServiceReferences={[n.name]:!0}),await(0,s.generateMockserverConfig)(e,i,d),await generateMockserverMiddlewareBasedOnUi5MockYaml(d,a.ui5Yaml,a.ui5LocalYaml,l),a.ui5MockYaml){const e=await r.UI5Config.newInstance(d.read(a.ui5MockYaml));extendBackendMiddleware(d,n,e,a.ui5MockYaml,!0)}}return await(0,c.writeMetadata)(d,p,n),p}(e,a,n,u,p,i,l);a.ui5LocalYaml&&p&&i.write(a.ui5LocalYaml,p.toString());await(0,c.writeRemoteServiceAnnotationXmlFiles)(i,e,n.name??"mainService",n.annotations),n.externalServices&&m&&(0,d.writeExternalServiceMetadata)(i,m,n.externalServices,n.name,n.path)};const i=n(76760),o=n(20787),r=n(8231),s=n(25403),c=n(25077),l=n(60999),d=n(92275);async function generateMockserverMiddlewareBasedOnUi5MockYaml(e,a,n,s){const c=(0,i.join)((0,i.dirname)(a),o.FileName.Ui5MockYaml),l=(await r.UI5Config.newInstance(e.read(c))).findCustomMiddleware("sap-fe-mockserver");n&&e.exists(n)&&s&&l&&s.updateCustomMiddleware(l)}function extendBackendMiddleware(e,a,n,i,o=!1){if(o)n.updateBackendToFioriToolsProxyMiddleware(a.previewSettings);else try{n.addBackendToFioriToolsProxyMiddleware(a.previewSettings,a.ignoreCertError)}catch(e){if(!(e instanceof r.YAMLError&&e.code===r.yamlErrorCode.nodeNotFound||"Could not find fiori-tools-proxy"===e.message))throw e;n.addFioriToolsProxyMiddleware({backend:[a.previewSettings],ignoreCertError:a.ignoreCertError})}e.write(i,n.toString())}},39057(e){e.exports=JSON.parse('{"error":{"requiredProjectFileNotFound":"Invalid project structure. Cannot find the required file: {{-path}}.","requiredProjectPropertyNotFound":"The required project property: {{-property}} was not found in the file: {{-path}}.","requiredServiceAlreadyExists":"A service with the {{-uri}} URI already exists. Choose another service.","unparseableXML":"Unparseable XML was specified: {{-error}}."}}')}};