@sap/generator-fiori
Version:
Create an SAPUI5 application using SAP Fiori elements or a freestyle approach
1 lines • 36.1 kB
JavaScript
;exports.id=108,exports.ids=[108],exports.modules={31833:function(e,i,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(i,"__esModule",{value:!0}),i.NAV_CONFIG_NS=i.SMART_LINKS_NS=void 0,i.initI18n=initI18n,i.t=function t(e,i){return a.default.t(e,i)};const a=r(n(43075)),o=r(n(31722)),s=r(n(90194));async function initI18n(){await a.default.init({resources:{en:{[i.SMART_LINKS_NS]:o.default,[i.NAV_CONFIG_NS]:s.default}},lng:"en",fallbackLng:"en",defaultNS:i.SMART_LINKS_NS,ns:[i.SMART_LINKS_NS,i.NAV_CONFIG_NS]})}i.SMART_LINKS_NS="app-config-writer:smartLinksConfig",i.NAV_CONFIG_NS="app-config-writer:navConfig",initI18n().catch((()=>{}))},91637:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.convertToVirtualPreview=i.generateVariantsConfig=i.readManifest=i.generateInboundNavigationConfig=i.generateSmartLinksConfig=i.includeTestRunnersPrompt=i.simulatePrompt=i.getSmartLinksTargetFromPrompt=void 0;var r=n(63452);Object.defineProperty(i,"getSmartLinksTargetFromPrompt",{enumerable:!0,get:function(){return r.getSmartLinksTargetFromPrompt}}),Object.defineProperty(i,"simulatePrompt",{enumerable:!0,get:function(){return r.simulatePrompt}}),Object.defineProperty(i,"includeTestRunnersPrompt",{enumerable:!0,get:function(){return r.includeTestRunnersPrompt}});var a=n(89889);Object.defineProperty(i,"generateSmartLinksConfig",{enumerable:!0,get:function(){return a.generateSmartLinksConfig}});var o=n(54017);Object.defineProperty(i,"generateInboundNavigationConfig",{enumerable:!0,get:function(){return o.generateInboundNavigationConfig}}),Object.defineProperty(i,"readManifest",{enumerable:!0,get:function(){return o.readManifest}});var s=n(93577);Object.defineProperty(i,"generateVariantsConfig",{enumerable:!0,get:function(){return s.generateVariantsConfig}});var c=n(65323);Object.defineProperty(i,"convertToVirtualPreview",{enumerable:!0,get:function(){return c.convertToVirtualPreview}})},54017:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.generateInboundNavigationConfig=async function generateInboundNavigationConfig(e,{semanticObject:i,action:n,title:r,subTitle:c},l=!1,u){u||(u=(0,o.create)((0,a.create)()));const{manifest:p,manifestPath:f}=await readManifest(e,u),g=`${i}-${n}`;if(!l&&p["sap.app"].crossNavigation?.inbounds[g])throw Error((0,d.t)("error.inboundExists",{inboundKey:g,ns:d.NAV_CONFIG_NS}));const m={[g]:{semanticObject:i,action:n,title:r,subTitle:c,signature:{parameters:{},additionalParameters:"allowed"}}},w=Object.assign(p["sap.app"].crossNavigation??{},{inbounds:(0,s.mergeObjects)(p["sap.app"].crossNavigation?.inbounds,m)});return u.extendJSON(f,{"sap.app":Object.assign(p["sap.app"],{crossNavigation:w})}),u},i.readManifest=readManifest;const r=n(20787),a=n(64812),o=n(90718),s=n(8231),c=n(16928),d=n(31833);async function readManifest(e,i){const n=(0,c.join)(await(0,r.getWebappPath)(e,i),r.FileName.Manifest),a=i.readJSON(n);if(!a)throw Error((0,d.t)("error.manifestNotFound",{path:n,ns:d.NAV_CONFIG_NS}));if(!a["sap.app"])throw Error((0,d.t)("error.sapAppNotDefined",{ns:d.NAV_CONFIG_NS}));return{manifest:a,manifestPath:n}}},65323:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.convertToVirtualPreview=async function convertToVirtualPreview(e,i){const n=i.fs??(0,o.create)((0,a.create)()),l=i.logger,u=i.convertTests??!1;if(!await(0,r.checkPrerequisites)(e,n,u,l))throw Error("The prerequisites are not met. For more information, see the log messages above.");await(0,c.updatePreviewMiddlewareConfigs)(n,e,u,l),await(0,s.renameDefaultSandboxes)(n,e,l),u&&(await(0,s.renameDefaultTestFiles)(n,e,l),await(0,c.updateDefaultTestConfig)(n,e,l));return await(0,s.deleteNoLongerUsedFiles)(n,e,u,l),await(0,d.updateVariantsCreationScript)(n,e,l),n};const r=n(2036),a=n(64812),o=n(90718),s=n(79701),c=n(77268),d=n(966)},966:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.ensurePreviewMiddlewareDependency=function ensurePreviewMiddlewareDependency(e,i){const n=(0,r.join)(i,"package.json"),a=e.readJSON(n);if(!a)return;if(["@sap-ux/preview-middleware","@sap/ux-ui5-tooling"].some((e=>(e=>!!a?.devDependencies?.[e]||!!a?.dependencies?.[e])(e))))return;a.devDependencies={...a.devDependencies,"@sap-ux/preview-middleware":"latest"},e.writeJSON(n,a)},i.extractUrlDetails=extractUrlDetails,i.isValidPreviewScript=function isValidPreviewScript(e,i=!1){const n="start-variants-management"!=e.name&&"start-control-property-editor"!=e.name,r=!(!e.value.includes("ui5 serve")&&!e.value.includes("fiori run")),{path:o}=extractUrlDetails(e.value),s=(0,a.isTestPath)(e??""),c="index.html"===o;return n&&r&&!c&&(!!i||!s)},i.updateVariantsCreationScript=async function updateVariantsCreationScript(e,i,n){const s=(0,r.join)(i,"package.json"),c=e.readJSON(s);if(c?.scripts?.["start-variants-management"]){const s=(0,r.basename)((0,a.extractYamlConfigFileName)(c?.scripts?.["start-variants-management"])),d=(0,r.join)(i,s);await(0,o.generateVariantsConfig)(i,d,n,e)}};const r=n(16928),a=n(77268),o=n(93577);function extractUrlDetails(e){let i=/ (?:--open|-o|--o) (\S*)/.exec(e)?.[1]??void 0;i=i?.replace(/['"]/g,"");const n=/^[^?#]+\.html/.exec(i??"")?.[0]??void 0,r=/(?<=#)\w+-\w+/.exec(i??"")?.[0]??void 0;return{path:n,intent:r?{object:r?.split("-")[0],action:r?.split("-")[1]}:void 0}}},2036:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.checkPrerequisites=async function checkPrerequisites(e,i,n=!1,a){const o=(0,r.join)(e,"package.json"),s=i.readJSON(o);let c=!0;if(!s)throw Error(`File 'package.json' not found at '${e}'`);(s?.devDependencies?.["@sap/grunt-sapui5-bestpractice-build"]||s?.dependencies?.["@sap/grunt-sapui5-bestpractice-build"])&&(a?.error("Conversion from '@sap/grunt-sapui5-bestpractice-build' is not supported. You must migrate to UI5 CLI version 3.0.0 or higher. For more information, see https://sap.github.io/ui5-tooling/v3/updates/migrate-v3."),c=!1);isLowerThanMinimalVersion(s,"@ui5/cli","3.0.0")&&(a?.error("UI5 CLI version 3.0.0 or higher is required to convert the preview to virtual files. For more information, see https://sap.github.io/ui5-tooling/v3/updates/migrate-v3."),c=!1);isLowerThanMinimalVersion(s,"@sap/ux-ui5-tooling","1.15.4",!1)&&(a?.error("UX UI5 Tooling version 1.15.4 or higher is required to convert the preview to virtual files. For more information, see https://www.npmjs.com/package/@sap/ux-ui5-tooling."),c=!1);const d=!!s?.devDependencies?.["@sap-ux/ui5-middleware-fe-mockserver"]||!!s?.dependencies?.["@sap-ux/ui5-middleware-fe-mockserver"],l=!!s?.devDependencies?.["cds-plugin-ui5"]||!!s?.dependencies?.["cds-plugin-ui5"];d||l||(a?.error("Conversion from 'sap/ui/core/util/MockServer' is not supported. You must migrate from '@sap-ux/ui5-middleware-fe-mockserver'. For more information, see https://www.npmjs.com/package/@sap-ux/ui5-middleware-fe-mockserver."),c=!1);n&&(s?.devDependencies?.["karma-ui5"]??s?.dependencies?.["karma-ui5"])&&a?.warn("This app seems to use Karma as a test runner. Please note that the converter does not convert any Karma configuration files. Please update your karma configuration ('ui5.configPath' and 'ui5.testpage') according to the new virtual endpoints after the conversion.");n&&(s?.devDependencies?.["wdio-qunit-service"]??s?.dependencies?.["wdio-qunit-service"])&&a?.warn("This app seems to use the WebdriverIO QUnit Service as a test runner. Please note that the converter does not convert any WebdriverIO configuration files. Please update your WebdriverIO QUnit Service test paths according to the new virtual endpoints after the conversion.");return c};const r=n(16928),a=n(85263);function isLowerThanMinimalVersion(e,i,n,r=!0){let o=e?.devDependencies?.[i]??e?.dependencies?.[i];return o?"latest"!==o&&((0,a.valid)(o)&&(o=`<=${o}`),!(0,a.satisfies)(n,o)):r}},79701:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.renameSandbox=renameSandbox,i.renameDefaultSandboxes=async function renameDefaultSandboxes(e,i,n){const a=[(0,r.join)("test","flpSandbox.html"),(0,r.join)("test","flpSandboxMockserver.html")];for(const r of a)await renameSandbox(e,i,r,n)},i.renameDefaultTestFiles=async function renameDefaultTestFiles(e,i,n){for(const r of Object.values(o.TEST_CONFIG_DEFAULTS).map((e=>e.path)))await renameSandbox(e,i,r,n)},i.deleteNoLongerUsedFiles=async function deleteNoLongerUsedFiles(e,i,n,o){const s=(0,r.join)(await(0,a.getWebappPath)(i,e),"test"),c=[(0,r.join)(s,"locate-reuse-libs.js"),(0,r.join)(s,"changes_loader.js"),(0,r.join)(s,"changes_loader.ts"),(0,r.join)(s,"changes_preview.js"),(0,r.join)(s,"changes_preview.ts"),(0,r.join)(s,"flpSandbox.js"),(0,r.join)(s,"flpSandbox.ts"),(0,r.join)(s,"initFlpSandbox.js"),(0,r.join)(s,"initFlpSandbox.ts")];n&&(c.push((0,r.join)(s,"testsuite.qunit.js")),c.push((0,r.join)(s,"testsuite.qunit.ts")),c.push((0,r.join)(s,"integration","opaTests.qunit.js")),c.push((0,r.join)(s,"integration","opaTests.qunit.ts")),c.push((0,r.join)(s,"unit","unitTests.qunit.js")),c.push((0,r.join)(s,"unit","unitTests.qunit.ts")));await deleteFiles(e,c,o)},i.deleteFiles=deleteFiles;const r=n(16928),a=n(20787),o=n(77268);async function renameSandbox(e,i,n,o){const s=(0,r.join)(await(0,a.getWebappPath)(i),n);e.exists(s)?(e.move(s,s.replace(".html","_old.html")),o?.info((e=>`Renamed '${e}' to '${e.slice(0,-5)}_old.html'. This file is no longer needed for the virtual endpoints. If you have not modified this file, you can delete it. If you have modified this file, move the modified content to a custom init script for the preview middleware. For more information, see https://github.com/SAP/open-ux-tools/tree/main/packages/preview-middleware#migration.`)(n))):0===Object.keys(e.dump(void 0,(e=>e.history.includes(s)&&"deleted"!==e.state))).length?o?.debug(`The file '${n}', has already been renamed. Skipping renaming.`):o?.debug(`The file '${n}', has not been found. Skipping renaming.`)}async function deleteFiles(e,i,n){i.forEach((i=>{e.exists(i)&&(e.delete(i),n?.info(`Deleted the '${(0,r.basename)(i)}' file. This file is no longer needed for the virtual endpoints.`))}))}},77268:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.TEST_CONFIG_DEFAULTS=void 0,i.isTestPath=isTestPath,i.getTestPathForUi5TestRunner=getTestPathForUi5TestRunner,i.extractYamlConfigFileName=extractYamlConfigFileName,i.processUi5YamlConfig=processUi5YamlConfig,i.updatePreviewMiddlewareConfig=updatePreviewMiddlewareConfig,i.sanitizeTestScript=sanitizeTestScript,i.updateTestConfig=updateTestConfig,i.updateDefaultTestConfig=async function updateDefaultTestConfig(e,n,a){const o=await(0,s.getAllUi5YamlFileNames)(n,e);for(const i of o.filter((e=>e!==s.FileName.Ui5Yaml))){const r=await(0,s.readUi5Yaml)(n,i,e);if((await(0,c.getPreviewMiddleware)(r))?.configuration?.test)return}let d;try{d=await(0,s.readUi5Yaml)(n,s.FileName.Ui5Yaml,e)}catch(e){return void a?.warn(`The UI5 YAML configuration file 'ui5.yaml', can't be updated to support test frameworks: '${e}'. Please manually add the test configuration to the UI5 YAML configuration file used for testing according to https://github.com/SAP/open-ux-tools/tree/main/packages/preview-middleware#configuration-option-test.`)}const l=await(0,c.getPreviewMiddleware)(d);for(const r of Object.values(i.TEST_CONFIG_DEFAULTS)){if(l.configuration?.test?.some((e=>e.framework.toLowerCase()===r.framework.toLowerCase())))break;l.configuration.test=await updateTestConfig(l.configuration.test,r.path,n,e,a),a?.info(`The UI5 YAML configuration file 'ui5.yaml', has been updated to support the test framework '${r.framework}'. Please consider transferring the test configuration to the UI5 YAML configuration file used for testing.`)}d.updateCustomMiddleware(l);const u=(0,r.join)(n,s.FileName.Ui5Yaml);e.write(u,d.toString())},i.getScriptsFromPackageJson=getScriptsFromPackageJson,i.updatePreviewMiddlewareConfigs=async function updatePreviewMiddlewareConfigs(e,i,n,a){const c=await(0,s.getAllUi5YamlFileNames)(i,e),l=[...c];for(const[s,u]of getScriptsFromPackageJson(e,i)){const p={name:s,value:u};if(!u||!(0,o.isValidPreviewScript)(p,n))continue;const f=(0,r.basename)(extractYamlConfigFileName(u));if(l.splice(l.indexOf(f),1),!isUi5YamlToBeConverted(f,s,c,a)||await isUi5YamlFlpPathAlreadyConverted(e,i,f,p,n,a))continue;try{await processUi5YamlConfig(e,i,f,p,a)}catch(e){a?.warn(`Skipping script '${s}', which refers to the UI5 YAML configuration file '${f}'. ${e.message}`);continue}const{path:g}=(0,o.extractUrlDetails)(u);g&&await(0,d.renameSandbox)(e,i,g,a),(0,o.ensurePreviewMiddlewareDependency)(e,i),a?.info(`The UI5 YAML configuration file '${f}', has been updated according to script, '${s}'.`)}for(const n of l){const r={name:"",value:""};try{await processUi5YamlConfig(e,i,n,r,a,!0)}catch(e){a?.warn(`Skipping UI5 YAML configuration file '${n}'. ${e.mesage}`)}a?.warn(`The UI5 YAML configuration file '${n}', is not used in any preview script. Outdated preview middleware will be adjusted, if necessary.`)}};const r=n(16928),a=n(47778),o=n(966),s=n(20787),c=n(74180),d=n(79701),l="/test/flp.html",u="app",p="preview";i.TEST_CONFIG_DEFAULTS={qunit:{path:"/test/unitTests.qunit.html",framework:"QUnit"},opa5:{path:"/test/opaTests.qunit.html",framework:"OPA5"},testsuite:{path:"/test/testsuite.qunit.html",framework:"Testsuite"}};const f=new Map;function isUi5YamlToBeConverted(e,i,n,r){return!!n.includes(e)||(r?.warn(`Skipping script '${i}', because the UI5 YAML configuration file, '${e}', could not be found.`),!1)}async function isUi5YamlFlpPathAlreadyConverted(e,i,n,r,a,s){const d=Object.keys(e.dump(i,(e=>e.basename===n&&"modified"===e.state))).length>0,u=(await(0,c.getPreviewMiddleware)(void 0,i,n,e))?.configuration?.flp?.path,{path:p}=(0,o.extractUrlDetails)(r.value);return!(!d||u==p||a&&isTestPath(r))&&(s?.warn(`Skipping script '${r.name}', because another script also refers to UI5 YAML configuration file, '${n}'. Adjust the 'flp.path' property in the UI5 YAML configuration file to the correct endpoint or create a separate UI5 YAML configuration file for script '${r.name}'. ${n} currently uses ${u??l} whereas script '${r.name}' uses '${p}'.`),!0)}function isTestPath(e,i){const{path:n}=(0,o.extractUrlDetails)(e.value);return n?!!n.includes(".qunit.html")||(i?.test?.some((e=>e.path===n))??!1):!!getTestPathForUi5TestRunner(e.name)}function getTestPathForUi5TestRunner(e){const i="ui5-test-runner",extractUrl=e=>/ (?:--url|-u|--testsuite) (\S*)/.exec(e)?.[1]??void 0;let n=(e=>[...f.values()].find((i=>i.includes(` ${e} `))))(e),r=n?.includes(i)?extractUrl(n):void 0;return r||(n=(e=>{for(const n of e.split(" ")){const e=f.get(n);if(e?.includes(i))return e}})(n??""),r=extractUrl(n??"")),r?new URL(r).pathname:void 0}function extractYamlConfigFileName(e){return/ (?:--config|-c) (\S*)/.exec(e)?.[1]??s.FileName.Ui5Yaml}async function processUi5YamlConfig(e,i,n,o,d,l=!1){let u;try{u=await(0,s.readUi5Yaml)(i,n,e,{validateSchema:!0})}catch(e){throw new Error(`An error occurred when reading '${n}': ${e.message}`)}let p=await(0,c.getPreviewMiddleware)(u);if(l&&!p)return;p||(p=(0,a.createPreviewMiddlewareConfig)(e,i)),p=await updatePreviewMiddlewareConfig(p,o,i,e,d),u.updateCustomMiddleware(p);const f=(0,r.join)(i,n);e.write(f,u.toString())}async function updatePreviewMiddlewareConfig(e,i,n,r,a){const{path:s,intent:d}=(0,o.extractUrlDetails)(i.value),f=`${u}-${p}`,g=function sanitizePreviewMiddleware(e){if(!(0,c.isFioriToolsDeprecatedPreviewConfig)(e.configuration))return e;const i=e.configuration.ui5Theme;if(delete e.configuration,!i)return e;const n={flp:{}};return n.flp.theme=i,e.configuration=n,e}(e),m={...g.configuration};let w=!1;if(function isFlpPath(e,i){const{path:n}=(0,o.extractUrlDetails)(e.value);return!!n&&(!i.rta?.editors?.some((e=>e.path===n))&&!isTestPath(e,i))}(i,m))s?.includes(l)||(m.flp=m.flp??{},m.flp.path=s,w=!0),d&&`${d?.object}-${d?.action}`!==f&&(m.flp=m.flp??{},m.flp.intent={object:d.object,action:d.action},w=!0);else if(s&&isTestPath(i,m))m.test=await updateTestConfig(m.test,s,n,r,a),w=!0;else if(!s){const e=getTestPathForUi5TestRunner(i.name);e&&(m.test=await updateTestConfig(m.test,e,n,r),w=!0)}return w&&(g.configuration=m),g}async function sanitizeTestScript(e,i,n,a,o){const c=(0,r.join)(await(0,s.getWebappPath)(i),n.replace(".html",".js")),l=(0,r.join)(await(0,s.getWebappPath)(i),n.replace(".html",".ts")),u=e.exists(c)?c:l;if(e.exists(u)){if(e.read(u).includes("sap/fe/test/JourneyRunner")){const i=u.replace(/(\.([jt])s)$/,".custom$1");e.move(u,i),a.pattern=`/test/**/${(0,r.basename)(i)}`,o?.info(`Renamed '${(0,r.basename)(u)}' to '${(0,r.basename)(i)}'. This file creates the JourneyRunner for OPA5 tests. As the handling of journey runners is not part of the virtual OPA5 test runner endpoint, this file has been renamed and added to the respective UI5 YAML configuration.`)}else await(0,d.deleteFiles)(e,[u])}}async function updateTestConfig(e,n,r,a,o){let s;if(e=e??[],n?.includes("testsuite.qunit.html")?s="Testsuite":n?.includes("opaTests.qunit.html")?s="OPA5":n?.includes("unitTests.qunit.html")&&(s="QUnit"),!s)return e;const c=i.TEST_CONFIG_DEFAULTS[s.toLowerCase()].path,d=e.find((e=>e.framework===s));if(d)d.path=n,d.path===c&&delete d.path;else{const i={framework:s,...n&&c!==(n.startsWith("/")?n:`/${n}`)&&{path:n}};await sanitizeTestScript(a,r,n??c,i,o),e.push({...i}),e?.some((e=>"Testsuite"===e.framework))||(e.push({framework:"Testsuite"}),o?.info("The test framework 'Testsuite' has been added because at least one test runner has been found."))}return e}function getScriptsFromPackageJson(e,i){const n=(0,r.join)(i,"package.json"),a=e.readJSON(n);return f.clear(),Object.entries(a?.scripts??{}).forEach((([e,i])=>{f.set(e,i??"")})),f}},63452:function(e,i,n){var r=this&&this.__createBinding||(Object.create?function(e,i,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(i,n);a&&!("get"in a?!i.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return i[n]}}),Object.defineProperty(e,r,a)}:function(e,i,n,r){void 0===r&&(r=n),e[r]=i[n]}),a=this&&this.__exportStar||function(e,i){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(i,n)||r(i,e,n)};Object.defineProperty(i,"__esModule",{value:!0}),i.promptUserPass=i.getSmartLinksTargetFromPrompt=void 0;var o=n(53455);Object.defineProperty(i,"getSmartLinksTargetFromPrompt",{enumerable:!0,get:function(){return o.getSmartLinksTargetFromPrompt}}),Object.defineProperty(i,"promptUserPass",{enumerable:!0,get:function(){return o.promptUserPass}}),a(n(33859),i)},33859:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.simulatePrompt=async function simulatePrompt(){const e={type:"confirm",name:"simulate",initial:!0,message:"The converter renames the local HTML files, deletes the JavaScript and TypeScript files used for the existing preview functionality, and configures virtual endpoints instead.\nDo you want to simulate the conversion?"};return(await(0,r.prompt)([e])).simulate??await Promise.reject(new Error("An error has occurred. The conversion has been canceled."))},i.includeTestRunnersPrompt=async function includeTestRunnersPrompt(){const e={type:"confirm",name:"includeTests",initial:!1,message:"Do you want to convert the test runners?"};return(await(0,r.prompt)([e])).includeTests??await Promise.reject(new Error("An error has occurred. The conversion has been canceled."))};const r=n(17694)},53455:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.promptUserPass=promptUserPass,i.getSmartLinksTargetFromPrompt=async function getSmartLinksTargetFromPrompt(e,i){const n=await(0,d.getTargetDefinition)(e,i),u=await(async(e,i)=>{const n={onCancel:()=>(i?.info((0,r.yellow)((0,c.t)("info.operationAborted"))),process.exit(1))},d=(e=>{const i=[];(0,o.isAppStudio)()&&((e,i)=>{(i?.destination||i?.url)&&e.push({name:i?.destination?l.TargetType.destination:l.TargetType.url,message:(0,c.t)("questions.useTarget",{target:i.destination||i.url}),type:"confirm",initial:!0,format:e=>e?i.destination||i.url:e});e.push({name:"select",type:e=>e?null:"select",message:(0,c.t)("questions.target"),choices:[{title:(0,c.t)("questions.enter",{type:l.TargetType.destination}),value:l.TargetType.destination},{title:(0,c.t)("questions.enter",{type:l.TargetType.url}),value:l.TargetType.url}]}),e.push({type:e=>e===l.TargetType.destination?"text":null,name:l.TargetType.destination,initial:i?.destination,message:(0,c.t)("questions.target",{type:l.TargetType.destination,file:i?.destination?`(${s.FileName.UI5DeployYaml})`:""}),validate:e=>validator(e,"error.target")})})(i,e);return i.push({type:e=>e&&e!==l.TargetType.url?null:"text",name:l.TargetType.url,initial:e?.url,message:(0,c.t)("questions.target",{type:l.TargetType.url,file:e?.url?`(${s.FileName.UI5DeployYaml})`:""}),validate:e=>validator(e,"error.target")},{name:"client",type:(e,i)=>i?.url?"text":null,initial:e?.client,message:(0,c.t)("questions.client",{file:e?.client?`(${s.FileName.UI5DeployYaml})`:""}),format:e=>"number"==typeof e?e.toString():e}),i})(e?.target),{url:u,client:p,destination:f}=await(0,a.prompt)(d,n);return{url:u,client:p,destination:f}})(n,i),p=await async function getCredentialsPrompt(e,i){if((0,o.isAppStudio)()&&e.destination){const n=(await(0,o.listDestinations)())?.[e.destination];if("NoAuthentication"===n?.Authentication)return i?.info((0,c.t)("info.credentialsRequired")),await promptUserPass(i);if(n)return void i?.info((0,c.t)("info.credentialsAvailable"))}else if(e.url){const n=await(0,d.getLocalStoredCredentials)(e.url,e.client,i);if(n?.username){const e=[{title:`Use ${n.username}`,value:n},{title:(0,c.t)("questions.credentialsDescription"),value:!1}],{credentials:i}=await(0,a.prompt)([{name:"credentials",type:"select",message:(0,c.t)("questions.credentials"),choices:e,initial:0}]);if(i)return i}}return promptUserPass(i)}(u,i);return{target:u,auth:p,ignoreCertErrors:n?.ignoreCertErrors}};const r=n(73373),a=n(17694),o=n(75199),s=n(20787),c=n(31833),d=n(89889),l=n(62323),validator=(e,i)=>!!e?.trim()||(0,c.t)(i);async function promptUserPass(e){const{username:i,password:n}=await(0,a.prompt)([{type:"text",name:"username",message:`${(0,r.cyan)((0,c.t)("info.username"))}`,validate:e=>!!e?.trim()||`${(0,c.t)("error.emptyUsername")}`},{type:"invisible",name:"password",message:`${(0,r.cyan)((0,c.t)("info.password"))}`,validate:e=>!!e?.trim()||`${(0,c.t)("error.emptyPassword")}`}],{onCancel:()=>(e?.info((0,r.yellow)((0,c.t)("info.operationAborted"))),process.exit(1))});return{username:i,password:n}}},32848:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.generateSmartLinksConfig=async function generateSmartLinksConfig(e,i,n,s){s||(s=(0,a.create)((0,r.create)()));return await(0,o.writeSmartLinksConfig)(e,i,s,n),s};const r=n(64812),a=n(90718),o=n(51468)},89889:function(e,i,n){var r=this&&this.__createBinding||(Object.create?function(e,i,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(i,n);a&&!("get"in a?!i.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return i[n]}}),Object.defineProperty(e,r,a)}:function(e,i,n,r){void 0===r&&(r=n),e[r]=i[n]}),a=this&&this.__exportStar||function(e,i){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(i,n)||r(i,e,n)};Object.defineProperty(i,"__esModule",{value:!0}),i.getLocalStoredCredentials=i.getTargetDefinition=void 0,a(n(32848),i);var o=n(51468);Object.defineProperty(i,"getTargetDefinition",{enumerable:!0,get:function(){return o.getTargetDefinition}}),Object.defineProperty(i,"getLocalStoredCredentials",{enumerable:!0,get:function(){return o.getLocalStoredCredentials}})},80458:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.readUi5DeployConfigTarget=async function readUi5DeployConfigTarget(e){const i=(await(0,a.readUi5Yaml)(e,a.FileName.UI5DeployYaml)).findCustomTask(s.DeployConfig.DeployToAbap);if(!i?.configuration?.target)throw Error((0,o.t)("error.noTarget",{file:`(${a.FileName.UI5DeployYaml})`}));const{target:n,ignoreCertError:r}=i?.configuration||{};return{target:n,ignoreCertErrors:r}},i.addUi5YamlServeStaticMiddleware=async function addUi5YamlServeStaticMiddleware(e,i,n){const o=[a.FileName.Ui5Yaml,a.FileName.Ui5MockYaml,a.FileName.Ui5LocalYaml];for(const c of o){let o;try{o=await(0,a.readUi5Yaml)(e,c)}catch(e){n?.debug(`File ${c} not existing`);continue}const d=!!o.findCustomMiddleware(s.DeployConfig.FioriToolsProxy),l=o.findCustomMiddleware(s.DeployConfig.FioriToolsServestatic),u=getFioriToolsServeStaticMiddlewareConfig(l?.configuration.paths||[],d);if(u){const n=o.updateCustomMiddleware(u).toString();i.write((0,r.join)(e,c),n)}}};const r=n(16928),a=n(20787),o=n(31833),s=n(62323);const getFioriToolsServeStaticMiddlewareConfig=(e,i)=>{const n={path:"/appconfig",src:"appconfig",fallthrough:!1};if(e.find((e=>e.path===n.path&&e.src===n.src)))return;return{name:"fiori-tools-servestatic",...i?{beforeMiddleware:"fiori-tools-proxy"}:{afterMiddleware:"compression"},configuration:{paths:[...e,n]}}}},51468:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.getLocalStoredCredentials=async function getLocalStoredCredentials(e,i,n){try{const r=await(0,l.getService)({logger:n,entityName:"system"}),a=await r.read(new l.BackendSystemKey({url:e,client:i}));return a?.username?{username:a.username,password:a.password||""}:void 0}catch(e){n?.warn((0,u.t)("warnings.useCredentialsFailed")),n?.debug(e)}return},i.sendRequest=sendRequest,i.getTargetDefinition=async function getTargetDefinition(e,i){i?.info((0,u.t)("info.searchTarget",{file:d.FileName.UI5DeployYaml}));try{const n=await(0,f.readUi5DeployConfigTarget)(e);return i?.info((0,r.cyan)((0,u.t)("info.targetFound",{file:d.FileName.UI5DeployYaml}))),n}catch(e){return i?.warn(e.message),void i?.debug(e)}},i.getTargetMappingsConfig=getTargetMappingsConfig,i.writeSmartLinksConfig=async function writeSmartLinksConfig(e,i,n,r){let s=await getTargetMappingsConfig(i,r);const c=(0,p.getTemplatePath)("smartlinks-config/fioriSandboxConfig.json"),d=(0,o.join)(e,"appconfig","fioriSandboxConfig.json");if(n.exists(d)){s=function mergeTargetMappings(e,i,n){const r=n.readJSON(e).services?.ClientSideTargetResolution?.adapter?.config?.inbounds;if(r)return Object.entries(i).forEach((([e,i])=>{r[e]=i})),r;return i}(d,s,n);const e=(0,a.render)(n.read(c),{inboundTargets:s},{});n.extendJSON(d,JSON.parse(e))}else n.copyTpl(c,d,{inboundTargets:s});await(0,f.addUi5YamlServeStaticMiddleware)(e,n,r)};const r=n(73373),a=n(29473),o=n(16928),s=n(60987),c=n(75199),d=n(20787),l=n(2218),u=n(31833),p=n(98874),f=n(80458),g={so:"*",action:"*",systemAliasesFormat:"object","sap-language":"EN",shellType:"FLP",depth:0};async function sendRequest(e,i){const n=(0,c.isAppStudio)()&&e.target.destination?e.target.destination:e.target.url;if(!n)throw Error((0,u.t)("error.target"));try{const a=function createSmartLinksProvider(e){const{target:i,auth:n,ignoreCertErrors:r}=e;let a;return(0,c.isAppStudio)()&&i.destination?(a=(0,s.createForDestination)({auth:n},{Name:i.destination}),delete a.defaults.params.saml2):a=(0,s.createForAbap)({baseURL:i.url,auth:n,ignoreCertErrors:r,params:i.client?{"sap-client":i.client}:void 0}),a}(e);i?.info(`${(0,r.cyan)((0,u.t)("info.connectTo"))} ${n}`);const o=await a.get("/sap/bc/ui2/start_up",{params:g});return i?.info((0,r.cyan)((0,u.t)("info.connectSuccess"))),JSON.parse(o.data)}catch(e){throw i?.debug(e),Error(e.message)}}async function getTargetMappingsConfig(e,i){const n=await async function getTargetMappings(e,i){const n=await sendRequest(e,i);if(!n?.targetMappings)throw Error((0,u.t)("error.noTarget"));return n.targetMappings}(e,i),r={};for(const e in n){const i=n[e];r[e]={semanticObject:i.semanticObject,action:i.semanticAction,title:i.text,signature:{additionalParameters:"ignored",parameters:{},...i.signature},resolutionResult:{}}}return r}},98874:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.getTemplatePath=function getTemplatePath(e=""){return(0,r.join)(__dirname,"../templates",e)};const r=n(16928)},62323:function(e,i,n){var r=this&&this.__createBinding||(Object.create?function(e,i,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(i,n);a&&!("get"in a?!i.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return i[n]}}),Object.defineProperty(e,r,a)}:function(e,i,n,r){void 0===r&&(r=n),e[r]=i[n]}),a=this&&this.__exportStar||function(e,i){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(i,n)||r(i,e,n)};Object.defineProperty(i,"__esModule",{value:!0}),a(n(94165),i),a(n(75735),i),a(n(40149),i)},40149:(e,i)=>{Object.defineProperty(i,"__esModule",{value:!0})},94165:(e,i)=>{var n,r;Object.defineProperty(i,"__esModule",{value:!0}),i.TargetType=i.DeployConfig=void 0,function(e){e.DeployToAbap="deploy-to-abap",e.FioriToolsProxy="fiori-tools-proxy",e.FioriToolsServestatic="fiori-tools-servestatic"}(n||(i.DeployConfig=n={})),function(e){e.destination="destination",e.url="url"}(r||(i.TargetType=r={}))},75735:(e,i)=>{var n;Object.defineProperty(i,"__esModule",{value:!0}),i.MiddlewareConfigs=void 0,function(e){e.FioriToolsPreview="fiori-tools-preview",e.PreviewMiddleware="preview-middleware",e.ReloadMiddleware="reload-middleware",e.FioriToolsAppreload="fiori-tools-appreload"}(n||(i.MiddlewareConfigs=n={}))},40750:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.generateVariantsConfig=async function generateVariantsConfig(e,i,n,c){c||(c=(0,r.create)((0,a.create)()));return await(0,o.updateMiddlewares)(c,e,i,n),await(0,s.addVariantsManagementScript)(c,e,i,n),c};const r=n(90718),a=n(64812),o=n(47778),s=n(25096)},93577:function(e,i,n){var r=this&&this.__createBinding||(Object.create?function(e,i,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(i,n);a&&!("get"in a?!i.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return i[n]}}),Object.defineProperty(e,r,a)}:function(e,i,n,r){void 0===r&&(r=n),e[r]=i[n]}),a=this&&this.__exportStar||function(e,i){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(i,n)||r(i,e,n)};Object.defineProperty(i,"__esModule",{value:!0}),a(n(40750),i)},25096:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.addVariantsManagementScript=async function addVariantsManagementScript(e,i,n,c){const d=(0,r.join)(i,"package.json"),l=e.readJSON(d),u=n?(0,r.basename)(n):o.FileName.Ui5Yaml;if(!l)throw new Error(`${s} File 'package.json' not found at ${i}`);l.scripts||(c?.warn("File 'package.json' does not contain a script section. Script section added."),l.scripts={});const p=await(0,a.getRTAUrl)(i,(0,a.getRtaUrlParameters)(l),u,e),f=await(0,a.getRTAServe)(i,u,e);if(!p)throw new Error(`${s} No RTA editor specified in ui5.yaml.`);const g=u!==o.FileName.Ui5Yaml?` --config ./${(0,r.basename)(u)}`:"",m=l.scripts["start-variants-management"]??void 0,w=`${f}${g} --open "${p}"`;if(m){if(m===w)return c?.info("Script 'start-variants-management' is already up-to-date."),Promise.resolve();c?.warn("Script 'start-variants-management' already exists but is outdated. Script will be updated.")}else c?.debug("Script 'start-variants-management' not found. Script will be added.");return l.scripts["start-variants-management"]=w,e.writeJSON(d,l),c?.debug("Script 'start-variants-management' written to 'package.json'."),Promise.resolve()};const r=n(16928),a=n(74180),o=n(20787),s="Script 'start-variants-management' cannot be written to package.json."},47778:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.getEnhancedReloadMiddleware=getEnhancedReloadMiddleware,i.createPreviewMiddlewareConfig=createPreviewMiddlewareConfig,i.updateMiddlewares=async function updateMiddlewares(e,i,n,a){const c=n?(0,r.basename)(n):o.FileName.Ui5Yaml,d=await(0,o.readUi5Yaml)(i,c,e);let l=await(0,s.getPreviewMiddleware)(d);const u=await getEnhancedReloadMiddleware(d);l||(a?.warn(`No preview middleware found in ${c}. Preview middleware will be added.`),l=createPreviewMiddlewareConfig(e,i));u&&(l.afterMiddleware=u.name,d.updateCustomMiddleware(u),a?.debug(`Updated reload middleware in ${c}.`));d.updateCustomMiddleware(l),e.write((0,r.join)(i,c),d.toString()),a?.debug(`Updated preview middleware in ${c}.`)};const r=n(16928),a=n(62323),o=n(20787),s=n(74180);async function getEnhancedReloadMiddleware(e){const i=e.findCustomMiddleware(a.MiddlewareConfigs.FioriToolsAppreload)??e.findCustomMiddleware(a.MiddlewareConfigs.ReloadMiddleware);if(i)return i?.configuration?.delay||(i.configuration={...i.configuration,delay:300}),i}function createPreviewMiddlewareConfig(e,i){const n=(0,r.join)(i,"package.json");return{name:e.readJSON(n)?.devDependencies?.["@sap/ux-ui5-tooling"]?a.MiddlewareConfigs.FioriToolsPreview:a.MiddlewareConfigs.PreviewMiddleware,afterMiddleware:"compression"}}},74180:(e,i,n)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.getPreviewMiddleware=getPreviewMiddleware,i.isFioriToolsDeprecatedPreviewConfig=isFioriToolsDeprecatedPreviewConfig,i.getRtaUrlParameters=function getRtaUrlParameters(e){const getDependencyVersion=(e,i)=>e?.devDependencies?.[i]??e?.dependencies?.[i],i={},n=getDependencyVersion(e,"@sap-ux/preview-middleware"),r=getDependencyVersion(e,"@sap/ux-ui5-tooling");((n&&(0,s.satisfies)(n,"<0.16.89"))??(r&&(0,s.satisfies)(r,"<1.15.4"))??(!n&&!r))&&(i["fiori-tools-rta-mode"]="true",i["sap-ui-rta-skip-flex-validation"]="true",i["sap-ui-xx-condense-changes"]="true",i["sap-ui-xx-viewCache"]="false");return(0,o.stringify)(i)},i.getRTAServe=async function getRTAServe(e,i,n){return(await getPreviewMiddleware(void 0,e,i,n))?.name===a.MiddlewareConfigs.PreviewMiddleware?"ui5 serve":"fiori run"},i.getRTAUrl=async function getRTAUrl(e,i,n,r){let o;try{o=await getPreviewMiddleware(void 0,e,n,r)}catch(e){throw new Error(`No ${n} file found. ${e}`)}if(o?.name===a.MiddlewareConfigs.PreviewMiddleware&&!getRTAMountPoint(o?.configuration))return;const s=getRTAMountPoint(o?.configuration)??"/preview.html",c=function getRTAIntent(e){if(isFioriToolsDeprecatedPreviewConfig(e))return;const i=e?.flp?.intent;return i?`#${i.object}-${i.action}`:void 0}(o?.configuration)??"#app-preview",d=i?"?"+i:"";return isFioriToolsDeprecatedPreviewConfig(o?.configuration)?`${s}${d}#preview-app`:`${s}${d}${c}`};const r=n(20787),a=n(62323),o=n(83480),s=n(85263);async function getPreviewMiddleware(e,i,n=r.FileName.Ui5Yaml,o){if(!i&&!e)throw new Error("Either base path or yaml config must be provided.");return(e=e??await(0,r.readUi5Yaml)(i,n,o)).findCustomMiddleware(a.MiddlewareConfigs.FioriToolsPreview)??e.findCustomMiddleware(a.MiddlewareConfigs.PreviewMiddleware)}function isFioriToolsDeprecatedPreviewConfig(e){return void 0!==e?.component}function getRTAMountPoint(e){if(!isFioriToolsDeprecatedPreviewConfig(e)&&e?.rta?.editors){const i=e.rta.editors;for(const e of i)if(!("developerMode"in e))return e.path}}},90194:e=>{e.exports=JSON.parse('{"error":{"sapAppNotDefined":"Manifest is missing required section \'sap.app\'","manifestNotFound":"Manifest not found at path: {{- path}}","inboundExists":"Inbound definition already exists for key: {{inboundKey}}"}}')},31722:e=>{e.exports=JSON.parse('{"questions":{"enter":"Enter {{-type}}","useTarget":"Do you want to use {{-target}}","target":"SmartLinks configuration source {{-type}} {{-file}}","client":"SAP client {{-file}}","credentials":"Credentials to be used","credentialsDescription":"Provide username and password"},"warnings":{"useCredentialsFailed":"Retrieving stored credentials failed."},"info":{"username":"Username","password":"Password","searchTarget":"Searching for deploy target definition {{-file}}","targetFound":"Deploy target definition found {{-file}}","credentialsAvailable":"Credentials taken from stored system","credentialsRequired":"Credentials are required. Please enter your credentials below","authNeeded":"Credentials might be required. Do you want to enter your credentials?","operationAborted":"Operation aborted by the user.","connectTo":"Connecting to","connectSuccess":"Connection successful"},"error":{"target":"Please provide a target for configuration","noTarget":"No target definition found {{-file}}","emptyUsername":"Username can not be empty.","emptyPassword":"Password can not be empty."}}')}};