@sap/generator-fiori
Version:
Create an SAPUI5 application using SAP Fiori elements or a freestyle approach
1 lines • 47.1 kB
JavaScript
;exports.id=6108,exports.ids=[6108],exports.modules={97698(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),i.enableCardGeneratorConfig=async function enableCardGeneratorConfig(e,i,n,f){return f=f??(0,o.create)((0,a.create)()),await(0,d.updateMiddlewaresForPreview)(f,e,i,n),await async function updateMiddlewareConfigWithGeneratorPath(e,i,n,a){const o=n?(0,r.basename)(n):c.FileName.Ui5Yaml,d=await(0,c.readUi5Yaml)(i,o,e);if(d.findCustomMiddleware(u))try{d.removeCustomMiddleware(u),a?.info(`Removed '${u}' middleware configuration from ${o}. It is no longer needed because this feature has been integrated into fiori-tools-preview / preview-middleware.`)}catch(e){a?.warn(`Failed to remove '${u}' middleware: ${e.message}`)}const l=await(0,s.getPreviewMiddleware)(d,i,n,e);if(l){l.configuration??={};const n=l.configuration,s=n?.editors?.cardGenerator?.path??"/test/flpCardGeneratorSandbox.html";n.editors??={},n.editors.cardGenerator={path:s},d.updateCustomMiddleware(l),e.write((0,r.join)(i,o),d.toString()),a?.debug(`Updated preview middleware in ${o}.`)}}(f,e,i,n),await async function updatePackageJson(e,i,n,a){const o=(0,r.join)(e,"package.json");if(!i.exists(o))throw new Error("package.json not found");const d=i.readJSON(o)??{},u=n?(0,r.basename)(n):c.FileName.Ui5Yaml,f=await(0,c.readUi5Yaml)(e,u,i),p=await(0,s.getPreviewMiddleware)(f,e,u,i),g=(0,s.getIntentFromPreviewConfig)(p?.configuration)??"#app-preview",m=p?.configuration?.editors?.cardGenerator?.path??"/test/flpCardGeneratorSandbox.html",w=await(0,s.getCLIForPreview)(e,u,i);d.scripts??={},d.scripts["start-cards-generator"]=`${w} --open "${m}${g}"`,d.devDependencies?.[l]&&(delete d.devDependencies[l],a?.info(`Removed devDependency ${l} from package.json. It is no longer needed because this feature has been integrated into fiori-tools-preview / preview-middleware.`));i.writeJSON(o,d)}(e,f,i,n),f};const r=n(76760),a=n(64812),o=n(90718),s=n(57526),c=n(20787),d=n(42580),l="@sap-ux/cards-editor-middleware",u="sap-cards-generator"},35046(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),i.getScriptsFromPackageJson=getScriptsFromPackageJson,i.extractUrlDetails=extractUrlDetails,i.isValidPreviewScript=isValidPreviewScript,i.getRunScriptForYamlConfig=function getRunScriptForYamlConfig(e,i,n){const a=(0,r.join)(n,"package.json");if(!i.readJSON(a))return;for(const[r,a]of getScriptsFromPackageJson(i,n))if(isValidPreviewScript({name:r,value:a})&&extractYamlConfigFileName(a)===e)return{name:r,value:a};return},i.extractYamlConfigFileName=extractYamlConfigFileName,i.isTestPath=isTestPath,i.isFlpPath=function isFlpPath(e,i){const{path:n}=extractUrlDetails(e.value);if(!n)return!1;const r=i.rta?.editors?.some(e=>e.path===n)??i.editors?.rta?.endpoints?.some(e=>e.path===n)??!1,a=i.editors?.cardGenerator?.path===n;return!r&&!a&&!isTestPath(e,i)},i.getTestPathForUi5TestRunner=getTestPathForUi5TestRunner,i.isLowerThanMinimalVersion=function isLowerThanMinimalVersion(e,i,n,r=!0){let a=e?.devDependencies?.[i]??e?.dependencies?.[i];if(!a)return r;if("latest"===a)return!1;if((0,o.validRange)(a))return(0,o.outside)(n,a,">");(0,o.valid)(a)&&(a=`<=${a}`);return!(0,o.satisfies)(n,a)};const r=n(76760),a=n(20787),o=n(85263),s=new Map;function getScriptsFromPackageJson(e,i){const n=(0,r.join)(i,"package.json"),a=e.readJSON(n);return s.clear(),Object.entries(a?.scripts??{}).forEach(([e,i])=>{s.set(e,i??"")}),s}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}}function isValidPreviewScript(e,i=!1){const n="start-variants-management"!=e.name&&"start-control-property-editor"!=e.name&&"start-cards-generator"!=e.name,r=!(!e.value.includes("ui5 serve")&&!e.value.includes("fiori run")),{path:a}=extractUrlDetails(e.value),o=isTestPath(e??"");return n&&r&&!("index.html"===a)&&(!!i||!o)}function extractYamlConfigFileName(e){return/ (?:--config|-c) (\S*)/.exec(e)?.[1]??a.FileName.Ui5Yaml}function isTestPath(e,i){const{path:n}=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=>[...s.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=s.get(n);if(e?.includes(i))return e}})(n??""),r=extractUrl(n??"")),r?new URL(r).pathname:void 0}},42580(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),i.TEST_CONFIG_DEFAULTS=i.DEFAULT_FLP_PATH=void 0,i.sanitizeRtaConfig=sanitizeRtaConfig,i.getEnhancedReloadMiddleware=getEnhancedReloadMiddleware,i.createPreviewMiddlewareConfig=createPreviewMiddlewareConfig,i.updateMiddlewaresForPreview=async function updateMiddlewaresForPreview(e,i,n,a){const d=n?(0,r.basename)(n):o.FileName.Ui5Yaml,l=await(0,o.readUi5Yaml)(i,d,e);let u=await(0,s.getPreviewMiddleware)(l);if(u){const n=(0,c.getRunScriptForYamlConfig)(d,e,i);u=n?await updatePreviewMiddlewareConfig(u,n,i,e,a):sanitizePreviewMiddleware(u)}else a?.warn(`No preview middleware found in ${d}. Preview middleware will be added.`),u=createPreviewMiddlewareConfig(e,i);const f=await getEnhancedReloadMiddleware(l);f&&(u.afterMiddleware=f.name,l.updateCustomMiddleware(f),a?.debug(`Updated reload middleware in ${d}.`));l.updateCustomMiddleware(u),e.write((0,r.join)(i,d),l.toString()),a?.debug(`Updated preview middleware in ${d}.`)},i.sanitizePreviewMiddleware=sanitizePreviewMiddleware,i.updatePreviewMiddlewareConfig=updatePreviewMiddlewareConfig,i.updateTestConfig=updateTestConfig,i.sanitizeTestScript=sanitizeTestScript;const r=n(76760),a=n(62323),o=n(20787),s=n(57526),c=n(35046),d="app",l="preview";function sanitizeRtaConfig(e,i){let n;if(e){const{editors:r,...a}=e;n={...a,endpoints:[...r]},i?.warn("The configuration option 'rta' is deprecated and has been adjusted to 'editors.rta'.")}return n}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"),o=e.readJSON(n);return{name:o?.devDependencies?.["@sap/ux-ui5-tooling"]?a.MiddlewareConfigs.FioriToolsPreview:a.MiddlewareConfigs.PreviewMiddleware,afterMiddleware:"compression"}}function sanitizePreviewMiddleware(e,i){if(!e.configuration)return e;if("rta"in e.configuration){const n=sanitizeRtaConfig(e.configuration.rta,i);delete e.configuration.rta,e.configuration.editors??={},e.configuration.editors.rta=n}if(!(0,s.isFioriToolsDeprecatedPreviewConfig)(e.configuration))return e;const n=e.configuration.ui5Theme;if(delete e.configuration,!n)return e;const r={flp:{}};return r.flp.theme=n,e.configuration=r,e}async function updatePreviewMiddlewareConfig(e,n,r,a,o){const{path:s,intent:u}=(0,c.extractUrlDetails)(n.value),f=`${d}-${l}`,p=sanitizePreviewMiddleware(e,o),g={...p.configuration};let m=!1;if((0,c.isFlpPath)(n,g))s?.includes(i.DEFAULT_FLP_PATH)||(g.flp=g.flp??{},g.flp.path=s,m=!0),u&&`${u?.object}-${u?.action}`!==f&&(g.flp=g.flp??{},g.flp.intent={object:u.object,action:u.action},m=!0);else if(s&&(0,c.isTestPath)(n,g))g.test=await updateTestConfig(g.test,s,r,a,o),m=!0;else if(!s){const e=(0,c.getTestPathForUi5TestRunner)(n.name);e&&(g.test=await updateTestConfig(g.test,e,r,a),m=!0)}return m&&(p.configuration=g),p}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}),l=e,l?.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."))}var l;return e}async function sanitizeTestScript(e,i,n,a,c){const d=(0,r.join)(await(0,o.getWebappPath)(i),n.replace(".html",".js")),l=(0,r.join)(await(0,o.getWebappPath)(i),n.replace(".html",".ts")),u=e.exists(d)?d: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)}`,c?.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,s.deleteFiles)(e,[u])}}i.DEFAULT_FLP_PATH="/test/flp.html",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"}}},57526(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),i.isFioriToolsDeprecatedPreviewConfig=isFioriToolsDeprecatedPreviewConfig,i.getPreviewMiddleware=getPreviewMiddleware,i.getIntentFromPreviewConfig=function getIntentFromPreviewConfig(e){if(isFioriToolsDeprecatedPreviewConfig(e))return;const i=e?.flp?.intent;return i?`#${i.object}-${i.action}`:void 0},i.getCLIForPreview=async function getCLIForPreview(e,i,n){const r=await getPreviewMiddleware(void 0,e,i,n);return r?.name===a.MiddlewareConfigs.PreviewMiddleware?"ui5 serve":"fiori run"},i.deleteFiles=async function deleteFiles(e,i,n){i.forEach(i=>{e.exists(i)&&(e.delete(i),n?.info(`Deleted the '${(0,o.basename)(i)}' file. This file is no longer needed for the virtual endpoints.`))})};const r=n(20787),a=n(62323),o=n(76760);function isFioriToolsDeprecatedPreviewConfig(e){return void 0!==e?.component}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)}},96587(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),i.generateEslintConfig=async function generateEslintConfig(e,i){const n=i.fs??(0,a.create)((0,r.create)()),d=i.logger;if(!await async function checkPrerequisites(e,i,n){const r=(0,s.join)(e,o.FileName.Package),a=i.readJSON(r);if(!a)return n?.error(`No package.json found at path '${r}'`),!1;if((0,o.hasDependency)(a,"eslint"))return n?.error(`EsLint already exists in this project. Found 'eslint' dependency in package.json at path '${r}'`),!1;const c=(0,s.join)(e,"eslint.config.mjs");if(i.exists(c))return n?.error(`An ESLint configuration file already exists at path '${c}'`),!1;return!0}(e,n,d))throw new Error("The prerequisites are not met. For more information, see the log messages above.");return await async function addEslintConfig(e,i,n="recommended"){if(await(0,c.addEslintFeature)(e,i),"recommended-for-s4hana"===n){const n=(0,s.join)(e,"eslint.config.mjs");let r=i.read(n);r=r.replace("...fioriTools.configs.recommended","...fioriTools.configs['recommended-for-s4hana']"),await i.write((0,s.join)(e,"eslint.config.mjs"),r)}}(e,n,i?.config),n};const r=n(64812),a=n(90718),o=n(20787),s=n(76760),c=n(57727)},67647(e,i,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(i,"__esModule",{value:!0}),i.convertEslintConfig=async function convertEslintConfig(e,i){const n=i.fs??(0,a.create)((0,o.create)()),r=i.logger;if(!await async function checkPrerequisites(e,i,n){const r=(0,s.join)(e,c.FileName.Package),a=i.readJSON(r);if(!a)return n?.error(`No package.json found at path '${r}'`),!1;if(!(0,c.hasDependency)(a,p))return n?.error(`Did not find ESLint dependency in package.json at path '${r}'. You might want to use the \`add eslint-config\` command instead.'`),!1;if(!(0,d.isLowerThanMinimalVersion)(a,p,"9.0.0"))return n?.error(`ESLint version is already 9.0.0 or higher in this project. Found ESLint dependency with version '${a.devDependencies?.eslint}' in package.json at path '${r}'`),!1;if((0,c.hasDependency)(a,"@fxu/fincode"))return n?.error(`Dependency to '@fxu/fincode' found at path '${e}'. Please remove the dependency and any usage of this package before running the conversion.`),!1;if(!i.exists((0,s.join)(e,".eslintrc.json"))&&!i.exists((0,s.join)(e,".eslintrc")))return n?.error(`No .eslintrc.json or .eslintrc found at path '${e}'`),!1;return!0}(e,n,r))throw new Error("The prerequisites are not met. For more information, see the log messages above.");const P=await async function removeFioriToolsFromExistingConfig(e,i,n){const r=(0,s.join)(e,".eslintrc.json"),a=(0,s.join)(e,".eslintrc"),o=i.exists(r)?r:a,c=i.readJSON(o);if(!c||"object"!=typeof c)throw new Error(`Existing eslint config at path '${o}' is not a valid JSON object.`);Array.isArray(c.plugins)&&(c.plugins=c.plugins.filter(e=>!e.includes(m)),0===c.plugins.length&&delete c.plugins);const{eslintRecommended:d,tsStripped:l}=function stripNativeExtendsFromConfig(e){const i="string"==typeof e.extends?[e.extends]:e.extends??[];let n=!1,r=!1;const a=[];for(const e of i)e.includes(m)||(e.startsWith(v)?r=!0:h.includes(e)?n=!0:a.push(e));i.length>0&&(0===a.length?delete e.extends:"string"==typeof e.extends?e.extends=a[0]:e.extends=a);return{eslintRecommended:n,tsStripped:r}}(c);return function warnIfFileScopeDropped(e,i,n,r){if(!i&&!n)return;const a=[];i&&a.push("'eslint:recommended'");n&&a.push("'plugin:@typescript-eslint/*'");const o=`${a.join(" and ")} ${a.length>1?"were":"was"} removed from the legacy config and will not be re-injected. Its rules are already covered by '@sap-ux/eslint-plugin-fiori-tools', so no manual re-addition is needed.`,s=e?` The legacy config had a 'files' scope (${JSON.stringify(e)}) that cannot be automatically preserved.`:"";r?.warn(o+s)}(c.files,d,l,n),n?.debug(`Removed SAP Fiori tools plugin references from ${o}`),JSON.stringify(c,null,2)}(e,n,r);return await async function runMigrationCommand(e,i,n){const r=(0,u.mkdtempSync)((0,s.join)((0,f.tmpdir)(),"eslint-migration-"));try{const a=(0,s.join)(e,".eslintrc.json"),o=i.exists(a)?".eslintrc.json":".eslintrc";(0,u.writeFileSync)((0,s.join)(r,o),n,"utf-8");const c=(0,s.join)(e,".eslintignore");(0,u.existsSync)(c)&&(0,u.writeFileSync)((0,s.join)(r,".eslintignore"),(0,u.readFileSync)(c,"utf-8"),"utf-8"),await async function spawnMigrationCommand(e,i){return new Promise((n,r)=>{const a=(0,l.default)("npx",["--yes",g,i],{cwd:e,shell:!1,stdio:"inherit"});a.on("close",e=>{0===e?n():r(new Error(`Migration command failed with exit code ${e??"unknown"}. ${y}`))}),a.on("error",e=>{r(new Error(`Migration command failed: ${e.message}. ${y}`))})})}(r,o);const d=(0,s.join)(e,"eslint.config.mjs"),f=(0,u.readFileSync)((0,s.join)(r,"eslint.config.mjs"),"utf-8");i.write(d,f)}finally{(0,u.rmSync)(r,{recursive:!0,force:!0})}}(e,n,P),await async function injectFioriToolsIntoMigratedConfig(e,i,n="recommended",r){const a=(0,s.join)(e,"eslint.config.mjs");let o=i.read(a);const c=`import fioriTools from '${m}';\n`;o.includes(c)||(o=c+o);const d=o.lastIndexOf("]);");if(-1===d)throw new Error("Unexpected format of migrated eslint config. Could not inject the SAP Fiori tools plugin configuration.");o=o.slice(0,d)+`,\n ...fioriTools.configs['${n}'],\n`+o.slice(d),i.write(a,o),r?.debug(`Injected SAP Fiori tools plugin into ${a}`)}(e,n,i.config,r),await async function updatePackageJson(e,i,n){const r=(0,s.join)(e,c.FileName.Package),a=i.readJSON(r);a.devDependencies??={},a.devDependencies[p]="^10.0.0",a.devDependencies[m]="^10.0.0",delete a.devDependencies[w],a.scripts??={},a.scripts.lint&&n?.info("The `lint` script in the `package.json` file will be overwritten.");a.scripts.lint="eslint ./",i.writeJSON(r,a)}(e,n,r),n};const a=n(90718),o=n(64812),s=n(76760),c=n(20787),d=n(35046),l=r(n(19822)),u=n(73024),f=n(48161),p="eslint",g="@eslint/migrate-config",m="@sap-ux/eslint-plugin-fiori-tools",w="eslint-plugin-fiori-custom",h=["eslint:recommended"],v="plugin:@typescript-eslint/",y="Migration to eslint version 9 failed. Check if there are error messages above. You can also delete the existing eslint `devDependency` and run `create add eslint` to create a eslint.config.mjs file with the flat config where you can transfer your old eslint config manually.` For more information, see [https://eslint.org/docs/latest/use/migrate-to-9.0.0#flat-config](Migrate to v9.x)."},91944(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),i.convertEslintConfig=i.generateEslintConfig=void 0;var r=n(96587);Object.defineProperty(i,"generateEslintConfig",{enumerable:!0,get:function(){return r.generateEslintConfig}});var a=n(67647);Object.defineProperty(i,"convertEslintConfig",{enumerable:!0,get:function(){return a.convertEslintConfig}})},31833(e,i,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(i,"__esModule",{value:!0}),i.i18n=i.NAV_CONFIG_NS=i.SMART_LINKS_NS=void 0,i.initI18n=initI18n,i.t=function t(e,n){return i.i18n.t(e,n)};const a=r(n(68801)),o=r(n(31722)),s=r(n(90194));async function initI18n(){await i.i18n.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],showSupportNotice:!1})}i.SMART_LINKS_NS="app-config-writer:smartLinksConfig",i.NAV_CONFIG_NS="app-config-writer:navConfig",i.i18n=a.default.createInstance(),initI18n().catch(()=>{})},91637(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),i.enableCardGeneratorConfig=i.convertToVirtualPreview=i.generateVariantsConfig=i.readManifest=i.generateInboundNavigationConfig=i.convertEslintConfig=i.generateEslintConfig=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(91944);Object.defineProperty(i,"generateEslintConfig",{enumerable:!0,get:function(){return o.generateEslintConfig}}),Object.defineProperty(i,"convertEslintConfig",{enumerable:!0,get:function(){return o.convertEslintConfig}});var s=n(54017);Object.defineProperty(i,"generateInboundNavigationConfig",{enumerable:!0,get:function(){return s.generateInboundNavigationConfig}}),Object.defineProperty(i,"readManifest",{enumerable:!0,get:function(){return s.readManifest}});var c=n(93577);Object.defineProperty(i,"generateVariantsConfig",{enumerable:!0,get:function(){return c.generateVariantsConfig}});var d=n(65323);Object.defineProperty(i,"convertToVirtualPreview",{enumerable:!0,get:function(){return d.convertToVirtualPreview}});var l=n(97698);Object.defineProperty(i,"enableCardGeneratorConfig",{enumerable:!0,get:function(){return l.enableCardGeneratorConfig}})},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:f,manifestPath:p}=await readManifest(e,u),g=`${i}-${n}`;if(!l&&f["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(f["sap.app"].crossNavigation??{},{inbounds:(0,s.mergeObjects)(f["sap.app"].crossNavigation?.inbounds,m)});return u.extendJSON(p,{"sap.app":Object.assign(f["sap.app"],{crossNavigation:w})}),u},i.readManifest=readManifest;const r=n(20787),a=n(64812),o=n(90718),s=n(8231),c=n(76760),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 new 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=>(0,s.hasDependency)(a,e)))return;a.devDependencies={...a.devDependencies,"@sap-ux/preview-middleware":"latest"},e.writeJSON(n,a)},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(76760),a=n(35046),o=n(93577),s=n(20787)},2036(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),i.checkPrerequisites=async function checkPrerequisites(e,i,n=!1,p){const g=(0,r.join)(e,a.FileName.Package),m=i.readJSON(g);let w=!0;if(!m)throw Error(`File '${a.FileName.Package}' not found at '${e}'`);(0,a.hasDependency)(m,f)&&(p?.error(`Conversion from '${f}' 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.`),w=!1);(0,o.isLowerThanMinimalVersion)(m,d,"3.0.0")&&(p?.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."),w=!1);(0,o.isLowerThanMinimalVersion)(m,l,"1.15.4",!1)&&(p?.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."),w=!1);(0,a.hasDependency)(m,u)||await async function isUsingCdsPluginUi5(e,i){const n=await(0,a.findCapProjectRoot)(e,!1,i);if(!n)return!1;return await(0,a.checkCdsUi5PluginEnabled)(n,i)}(e,i)||(p?.error(`Conversion from 'sap/ui/core/util/MockServer' or '@sap/ux-ui5-fe-mockserver-middleware' is not supported. You must migrate to '${u}' first. For more information, see https://www.npmjs.com/package/@sap-ux/ui5-middleware-fe-mockserver.`),w=!1);n&&(0,a.hasDependency)(m,c)&&p?.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&&(0,a.hasDependency)(m,s)&&p?.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 w};const r=n(76760),a=n(20787),o=n(35046),s="wdio-qunit-service",c="karma-ui5",d="@ui5/cli",l="@sap/ux-ui5-tooling",u="@sap-ux/ui5-middleware-fe-mockserver",f="@sap/grunt-sapui5-bestpractice-build"},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 c=(0,r.join)(await(0,a.getWebappPath)(i,e),"test"),d=[(0,r.join)(c,"locate-reuse-libs.js"),(0,r.join)(c,"changes_loader.js"),(0,r.join)(c,"changes_loader.ts"),(0,r.join)(c,"changes_preview.js"),(0,r.join)(c,"changes_preview.ts"),(0,r.join)(c,"flpSandbox.js"),(0,r.join)(c,"flpSandbox.ts"),(0,r.join)(c,"initFlpSandbox.js"),(0,r.join)(c,"initFlpSandbox.ts")];n&&(d.push((0,r.join)(c,"testsuite.qunit.js")),d.push((0,r.join)(c,"testsuite.qunit.ts")),d.push((0,r.join)(c,"integration","opaTests.qunit.js")),d.push((0,r.join)(c,"integration","opaTests.qunit.ts")),d.push((0,r.join)(c,"unit","unitTests.qunit.js")),d.push((0,r.join)(c,"unit","unitTests.qunit.ts")));await(0,s.deleteFiles)(e,d,o)};const r=n(76760),a=n(20787),o=n(42580),s=n(57526);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.`)}},77268(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),i.processUi5YamlConfig=processUi5YamlConfig,i.updateDefaultTestConfig=async function updateDefaultTestConfig(e,i,n){const o=await(0,s.getAllUi5YamlFileNames)(i,e);for(const n of o.filter(e=>e!==s.FileName.Ui5Yaml)){const r=await(0,s.readUi5Yaml)(i,n,e),a=await(0,c.getPreviewMiddleware)(r);if(a?.configuration?.test)return}let d;try{d=await(0,s.readUi5Yaml)(i,s.FileName.Ui5Yaml,e)}catch(e){return void n?.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(a.TEST_CONFIG_DEFAULTS)){if(l.configuration?.test?.some(e=>e.framework.toLowerCase()===r.framework.toLowerCase()))break;l.configuration.test=await(0,a.updateTestConfig)(l.configuration.test,r.path,i,e,n),n?.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)(i,s.FileName.Ui5Yaml);e.write(u,d.toString())},i.updatePreviewMiddlewareConfigs=async function updatePreviewMiddlewareConfigs(e,i,n,a){const c=await(0,s.getAllUi5YamlFileNames)(i,e),u=[...c];for(const[s,f]of(0,d.getScriptsFromPackageJson)(e,i)){const p={name:s,value:f};if(!f||!(0,d.isValidPreviewScript)(p,n))continue;const g=(0,r.basename)((0,d.extractYamlConfigFileName)(f));if(u.splice(u.indexOf(g),1),!isUi5YamlToBeConverted(g,s,c,a)||await isUi5YamlFlpPathAlreadyConverted(e,i,g,p,n,a))continue;try{await processUi5YamlConfig(e,i,g,p,a)}catch(e){a?.warn(`Skipping script '${s}', which refers to the UI5 YAML configuration file '${g}'. ${e.message}`);continue}const{path:m}=(0,d.extractUrlDetails)(f);m&&await(0,l.renameSandbox)(e,i,m,a),(0,o.ensurePreviewMiddlewareDependency)(e,i),a?.info(`The UI5 YAML configuration file '${g}', has been updated according to script, '${s}'.`)}for(const n of u){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(76760),a=n(42580),o=n(966),s=n(20787),c=n(57526),d=n(35046),l=n(79701);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,o,s){const l=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:f}=(0,d.extractUrlDetails)(r.value);return!(!l||u==f||o&&(0,d.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??a.DEFAULT_FLP_PATH} whereas script '${r.name}' uses '${f}'.`),!0)}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 f=await(0,c.getPreviewMiddleware)(u);if(l&&!f)return;f||(f=(0,a.createPreviewMiddlewareConfig)(e,i)),f=await(0,a.updatePreviewMiddlewareConfig)(f,o,i,e,d),u.updateCustomMiddleware(f);const p=(0,r.join)(i,n);e.write(p,u.toString())}},63452(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",{type:"",file:""}),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:f,destination:p}=await(0,a.prompt)(d,n);return{url:u,client:f,destination:p}})(n,i),f=await async function getCredentialsPrompt(e,i){if((0,o.isAppStudio)()&&e.destination){const n=await(0,o.listDestinations)(),r=n?.[e.destination];if("NoAuthentication"===r?.Authentication)return i?.info((0,c.t)("info.credentialsRequired")),await promptUserPass(i);if(r)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:f,ignoreCertErrors:n?.ignoreCertErrors}};const r=n(26042),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(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(76760),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,p.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,f.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),a=r.services?.ClientSideTargetResolution?.adapter?.config?.inbounds;if(a)return Object.entries(i).forEach(([e,i])=>{a[e]=i}),a;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,p.addUi5YamlServeStaticMiddleware)(e,n,r)};const r=n(26042),a=n(29473),o=n(76760),s=n(60987),c=n(75199),d=n(20787),l=n(2218),u=n(31833),f=n(98874),p=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 new 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});if(i?.info((0,r.cyan)((0,u.t)("info.connectSuccess"))),200!==o.status||!o.data)throw new Error(`Invalid response from ${e.target.url??e.target.destination}: status: ${o.status}. data: '${o.data}'.`);return JSON.parse(o.data)}catch(e){throw i?.debug(`Request failed. ${e}`),new Error(e.message||"Unknown error occurred")}}async function getTargetMappingsConfig(e,i){const n=await async function getTargetMappings(e,i){const n=await sendRequest(e,i);if(!n?.targetMappings)throw new Error((0,u.t)("error.noTarget",{file:`${e.target.destination??e.target.url}`}));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(76760)},62323(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.updateMiddlewaresForPreview)(c,e,i,n),await(0,s.addVariantsManagementScript)(c,e,i,n),c};const r=n(90718),a=n(64812),o=n(42580),s=n(25096)},93577(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,d){const l=(0,r.join)(i,"package.json"),u=e.readJSON(l),f=n?(0,r.basename)(n):s.FileName.Ui5Yaml;if(!u)throw new Error(`${c} File 'package.json' not found at ${i}`);u.scripts||(d?.warn("File 'package.json' does not contain a script section. Script section added."),u.scripts={});const p=await(0,a.getRTAUrl)(i,(0,a.getRTAUrlParameters)(u),f,e),g=await(0,o.getCLIForPreview)(i,f,e);if(!p)throw new Error(`${c} No RTA editor specified in ui5.yaml.`);const m=f!==s.FileName.Ui5Yaml?` --config ./${(0,r.basename)(f)}`:"",w=u.scripts["start-variants-management"]??void 0,h=`${g}${m} --open "${p}"`;if(w){if(w===h)return void d?.info("Script 'start-variants-management' is already up-to-date.");d?.warn("Script 'start-variants-management' already exists but is outdated. Script will be updated.")}else d?.debug("Script 'start-variants-management' not found. Script will be added.");u.scripts["start-variants-management"]=h,e.writeJSON(l,u),d?.debug("Script 'start-variants-management' written to 'package.json'.")};const r=n(76760),a=n(74180),o=n(57526),s=n(20787),c="Script 'start-variants-management' cannot be written to package.json."},74180(e,i,n){Object.defineProperty(i,"__esModule",{value:!0}),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,o.satisfies)(n,"<0.16.89"))??(r&&(0,o.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,a.stringify)(i)},i.getRTAUrl=async function getRTAUrl(e,i,n,a){let o;try{o=await(0,s.getPreviewMiddleware)(void 0,e,n,a)}catch(e){throw new Error(`No ${n} file found. ${e}`)}if(o?.name===r.MiddlewareConfigs.PreviewMiddleware&&!getRTAMountPoint(o?.configuration))return;const c=getRTAMountPoint(o?.configuration)??"/preview.html",d=(0,s.getIntentFromPreviewConfig)(o?.configuration)??"#app-preview",l=i?"?"+i:"";return(0,s.isFioriToolsDeprecatedPreviewConfig)(o?.configuration)?`${c}${l}#preview-app`:`${c}${l}${d}`};const r=n(62323),a=n(41792),o=n(85263),s=n(57526);function getRTAMountPoint(e){let i=e&&"rta"in e?e?.rta?.editors:void 0;if(i??=e&&"editors"in e?e?.editors?.rta?.endpoints:void 0,i)for(const e of i)if(!("developerMode"in e))return e.path}},90194(e){e.exports=JSON.parse('{"error":{"sapAppNotDefined":"The `manifest.json` file is missing the `sap.app` required section.","manifestNotFound":"The `manifest.json` file was not found at path: {{- path}}. Check the file exists.","inboundExists":"An inbound definition already exists for key: {{inboundKey}}. Choose another key."}}')},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","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.","operationAborted":"Operation aborted by the user.","connectTo":"Connecting to","connectSuccess":"Connected"},"error":{"target":"Please provide a target for the configuration.","noTarget":"No target definition found: {{-file}}.","emptyUsername":"Username cannot be empty. Provide a value for the username.","emptyPassword":"Password cannot be empty. Provide a value for the password."}}')}};