@ui5/mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +201 -0
  3. package/LICENSES/Apache-2.0.txt +73 -0
  4. package/README.md +131 -0
  5. package/bin/ui5mcp.js +2 -0
  6. package/lib/Context.d.ts +28 -0
  7. package/lib/Context.js +71 -0
  8. package/lib/Context.js.map +1 -0
  9. package/lib/api.d.ts +3 -0
  10. package/lib/api.js +3 -0
  11. package/lib/api.js.map +1 -0
  12. package/lib/cli.d.ts +1 -0
  13. package/lib/cli.js +12 -0
  14. package/lib/cli.js.map +1 -0
  15. package/lib/registerTools.d.ts +133 -0
  16. package/lib/registerTools.js +59 -0
  17. package/lib/registerTools.js.map +1 -0
  18. package/lib/resources/documentation/getDocumentation.d.ts +18 -0
  19. package/lib/resources/documentation/getDocumentation.js +70 -0
  20. package/lib/resources/documentation/getDocumentation.js.map +1 -0
  21. package/lib/server.d.ts +10 -0
  22. package/lib/server.js +113 -0
  23. package/lib/server.js.map +1 -0
  24. package/lib/tools/create_ui5_app/ODataMetadata.d.ts +55 -0
  25. package/lib/tools/create_ui5_app/ODataMetadata.js +99 -0
  26. package/lib/tools/create_ui5_app/ODataMetadata.js.map +1 -0
  27. package/lib/tools/create_ui5_app/createSuccessMessage.d.ts +13 -0
  28. package/lib/tools/create_ui5_app/createSuccessMessage.js +45 -0
  29. package/lib/tools/create_ui5_app/createSuccessMessage.js.map +1 -0
  30. package/lib/tools/create_ui5_app/create_ui5_app.d.ts +8 -0
  31. package/lib/tools/create_ui5_app/create_ui5_app.js +273 -0
  32. package/lib/tools/create_ui5_app/create_ui5_app.js.map +1 -0
  33. package/lib/tools/create_ui5_app/index.d.ts +3 -0
  34. package/lib/tools/create_ui5_app/index.js +58 -0
  35. package/lib/tools/create_ui5_app/index.js.map +1 -0
  36. package/lib/tools/create_ui5_app/isValidUrl.d.ts +16 -0
  37. package/lib/tools/create_ui5_app/isValidUrl.js +59 -0
  38. package/lib/tools/create_ui5_app/isValidUrl.js.map +1 -0
  39. package/lib/tools/create_ui5_app/schema.d.ts +135 -0
  40. package/lib/tools/create_ui5_app/schema.js +67 -0
  41. package/lib/tools/create_ui5_app/schema.js.map +1 -0
  42. package/lib/tools/create_ui5_app/templateProcessor.d.ts +67 -0
  43. package/lib/tools/create_ui5_app/templateProcessor.js +59 -0
  44. package/lib/tools/create_ui5_app/templateProcessor.js.map +1 -0
  45. package/lib/tools/create_ui5_app/ui5Version.d.ts +2 -0
  46. package/lib/tools/create_ui5_app/ui5Version.js +6 -0
  47. package/lib/tools/create_ui5_app/ui5Version.js.map +1 -0
  48. package/lib/tools/get_api_reference/createUriForSymbol.d.ts +2 -0
  49. package/lib/tools/get_api_reference/createUriForSymbol.js +49 -0
  50. package/lib/tools/get_api_reference/createUriForSymbol.js.map +1 -0
  51. package/lib/tools/get_api_reference/getApiReference.d.ts +10 -0
  52. package/lib/tools/get_api_reference/getApiReference.js +51 -0
  53. package/lib/tools/get_api_reference/getApiReference.js.map +1 -0
  54. package/lib/tools/get_api_reference/index.d.ts +3 -0
  55. package/lib/tools/get_api_reference/index.js +38 -0
  56. package/lib/tools/get_api_reference/index.js.map +1 -0
  57. package/lib/tools/get_api_reference/lib/ApiReferenceProvider.d.ts +85 -0
  58. package/lib/tools/get_api_reference/lib/ApiReferenceProvider.js +452 -0
  59. package/lib/tools/get_api_reference/lib/ApiReferenceProvider.js.map +1 -0
  60. package/lib/tools/get_api_reference/lib/apiReferenceResources.d.ts +18 -0
  61. package/lib/tools/get_api_reference/lib/apiReferenceResources.js +138 -0
  62. package/lib/tools/get_api_reference/lib/apiReferenceResources.js.map +1 -0
  63. package/lib/tools/get_api_reference/lib/formatSymbol.d.ts +24 -0
  64. package/lib/tools/get_api_reference/lib/formatSymbol.js +109 -0
  65. package/lib/tools/get_api_reference/lib/formatSymbol.js.map +1 -0
  66. package/lib/tools/get_api_reference/schema.d.ts +16 -0
  67. package/lib/tools/get_api_reference/schema.js +12 -0
  68. package/lib/tools/get_api_reference/schema.js.map +1 -0
  69. package/lib/tools/get_guidelines/guidelines.d.ts +1 -0
  70. package/lib/tools/get_guidelines/guidelines.js +6 -0
  71. package/lib/tools/get_guidelines/guidelines.js.map +1 -0
  72. package/lib/tools/get_guidelines/index.d.ts +3 -0
  73. package/lib/tools/get_guidelines/index.js +30 -0
  74. package/lib/tools/get_guidelines/index.js.map +1 -0
  75. package/lib/tools/get_project_info/getProjectInfo.d.ts +2 -0
  76. package/lib/tools/get_project_info/getProjectInfo.js +205 -0
  77. package/lib/tools/get_project_info/getProjectInfo.js.map +1 -0
  78. package/lib/tools/get_project_info/index.d.ts +3 -0
  79. package/lib/tools/get_project_info/index.js +28 -0
  80. package/lib/tools/get_project_info/index.js.map +1 -0
  81. package/lib/tools/get_project_info/schema.d.ts +87 -0
  82. package/lib/tools/get_project_info/schema.js +28 -0
  83. package/lib/tools/get_project_info/schema.js.map +1 -0
  84. package/lib/tools/get_version_info/getVersionInfo.d.ts +8 -0
  85. package/lib/tools/get_version_info/getVersionInfo.js +41 -0
  86. package/lib/tools/get_version_info/getVersionInfo.js.map +1 -0
  87. package/lib/tools/get_version_info/index.d.ts +9 -0
  88. package/lib/tools/get_version_info/index.js +33 -0
  89. package/lib/tools/get_version_info/index.js.map +1 -0
  90. package/lib/tools/get_version_info/schema.d.ts +66 -0
  91. package/lib/tools/get_version_info/schema.js +16 -0
  92. package/lib/tools/get_version_info/schema.js.map +1 -0
  93. package/lib/tools/get_version_info/types.d.ts +5 -0
  94. package/lib/tools/get_version_info/types.js +2 -0
  95. package/lib/tools/get_version_info/types.js.map +1 -0
  96. package/lib/tools/run_ui5_linter/index.d.ts +3 -0
  97. package/lib/tools/run_ui5_linter/index.js +86 -0
  98. package/lib/tools/run_ui5_linter/index.js.map +1 -0
  99. package/lib/tools/run_ui5_linter/migrationGuides.d.ts +6 -0
  100. package/lib/tools/run_ui5_linter/migrationGuides.js +88 -0
  101. package/lib/tools/run_ui5_linter/migrationGuides.js.map +1 -0
  102. package/lib/tools/run_ui5_linter/resultContext.d.ts +3 -0
  103. package/lib/tools/run_ui5_linter/resultContext.js +236 -0
  104. package/lib/tools/run_ui5_linter/resultContext.js.map +1 -0
  105. package/lib/tools/run_ui5_linter/runUi5Linter.d.ts +2 -0
  106. package/lib/tools/run_ui5_linter/runUi5Linter.js +72 -0
  107. package/lib/tools/run_ui5_linter/runUi5Linter.js.map +1 -0
  108. package/lib/tools/run_ui5_linter/schema.d.ts +340 -0
  109. package/lib/tools/run_ui5_linter/schema.js +55 -0
  110. package/lib/tools/run_ui5_linter/schema.js.map +1 -0
  111. package/lib/utils/cdnHelper.d.ts +9 -0
  112. package/lib/utils/cdnHelper.js +50 -0
  113. package/lib/utils/cdnHelper.js.map +1 -0
  114. package/lib/utils/dataStorageHelper.d.ts +2 -0
  115. package/lib/utils/dataStorageHelper.js +65 -0
  116. package/lib/utils/dataStorageHelper.js.map +1 -0
  117. package/lib/utils/ui5Framework.d.ts +4 -0
  118. package/lib/utils/ui5Framework.js +6 -0
  119. package/lib/utils/ui5Framework.js.map +1 -0
  120. package/lib/utils.d.ts +10 -0
  121. package/lib/utils.js +87 -0
  122. package/lib/utils.js.map +1 -0
  123. package/npm-shrinkwrap.json +7880 -0
  124. package/package.json +121 -0
  125. package/resources/docs/1.136.7/00737d6c1b864dc3ab72ef56611491c4.md +155 -0
  126. package/resources/docs/1.136.7/0187ea5e2eff4166b0453b9dcc8fc64f.md +164 -0
  127. package/resources/docs/1.136.7/032be2cb2e1d4115af20862673bedcdb.md +12 -0
  128. package/resources/docs/1.136.7/28fcd55b04654977b63dacbee0552712.md +317 -0
  129. package/resources/docs/1.136.7/676b636446c94eada183b1218a824717.md +135 -0
  130. package/resources/docs/1.136.7/a87ca843bcee469f82a9072927a7dcdb.md +355 -0
  131. package/resources/docs/1.136.7/b0fb4de7364f4bcbb053a99aa645affe.md +126 -0
  132. package/resources/docs/1.136.7/fe1a6dba940e479fb7c3bc753f92b28c.md +670 -0
  133. package/resources/docs/1.136.7/index.json +58 -0
  134. package/resources/guidelines.md +104 -0
  135. package/resources/migrationGuides/deprecated-controller-factory.md +116 -0
  136. package/resources/migrationGuides/deprecated-getLibraryResourceBundle.md +62 -0
  137. package/resources/migrationGuides/deprecated-jquery-sap-require.md +141 -0
  138. package/resources/migrationGuides/deprecated-messagePage.md +162 -0
  139. package/resources/migrationGuides/deprecated-table-table-property.md +154 -0
  140. package/resources/template-js/LICENSE +201 -0
  141. package/resources/template-js/README.md +87 -0
  142. package/resources/template-js/_.editorconfig +22 -0
  143. package/resources/template-js/_.gitignore +17 -0
  144. package/resources/template-js/eslint.config.js +68 -0
  145. package/resources/template-js/karma-ci-cov.conf.js +20 -0
  146. package/resources/template-js/karma-ci.conf.js +9 -0
  147. package/resources/template-js/karma.conf.js +9 -0
  148. package/resources/template-js/package.json +34 -0
  149. package/resources/template-js/ui5-dist.yaml +18 -0
  150. package/resources/template-js/ui5.yaml +24 -0
  151. package/resources/template-js/webapp/Component.js +41 -0
  152. package/resources/template-js/webapp/controller/App.controller.js +10 -0
  153. package/resources/template-js/webapp/controller/BaseController.js +67 -0
  154. package/resources/template-js/webapp/controller/Main.controller.js +14 -0
  155. package/resources/template-js/webapp/i18n/i18n.properties +3 -0
  156. package/resources/template-js/webapp/i18n/i18n_en.properties +3 -0
  157. package/resources/template-js/webapp/index-cdn.html +34 -0
  158. package/resources/template-js/webapp/index.html +34 -0
  159. package/resources/template-js/webapp/manifest.json +103 -0
  160. package/resources/template-js/webapp/model/formatter.js +9 -0
  161. package/resources/template-js/webapp/model/models.js +11 -0
  162. package/resources/template-js/webapp/test/Test.qunit.html +16 -0
  163. package/resources/template-js/webapp/test/integration/HelloJourney.js +85 -0
  164. package/resources/template-js/webapp/test/integration/opaTests.qunit.js +1 -0
  165. package/resources/template-js/webapp/test/integration/pages/Main.js +112 -0
  166. package/resources/template-js/webapp/test/testsuite.qunit.html +18 -0
  167. package/resources/template-js/webapp/test/testsuite.qunit.js +37 -0
  168. package/resources/template-js/webapp/test/unit/controller/Main.qunit.js +11 -0
  169. package/resources/template-js/webapp/test/unit/unitTests.qunit.js +1 -0
  170. package/resources/template-js/webapp/test-lt1_124/integration/HelloJourney.js +85 -0
  171. package/resources/template-js/webapp/test-lt1_124/integration/opaTests.qunit.html +31 -0
  172. package/resources/template-js/webapp/test-lt1_124/integration/opaTests.qunit.js +11 -0
  173. package/resources/template-js/webapp/test-lt1_124/integration/pages/Main.js +112 -0
  174. package/resources/template-js/webapp/test-lt1_124/testsuite.qunit.html +13 -0
  175. package/resources/template-js/webapp/test-lt1_124/testsuite.qunit.js +9 -0
  176. package/resources/template-js/webapp/test-lt1_124/unit/controller/Main.qunit.js +11 -0
  177. package/resources/template-js/webapp/test-lt1_124/unit/unitTests.qunit.html +30 -0
  178. package/resources/template-js/webapp/test-lt1_124/unit/unitTests.qunit.js +12 -0
  179. package/resources/template-js/webapp/view/App.view.xml +9 -0
  180. package/resources/template-js/webapp/view/Main.view.xml +90 -0
  181. package/resources/template-ts/LICENSE +201 -0
  182. package/resources/template-ts/README.md +101 -0
  183. package/resources/template-ts/_.editorconfig +23 -0
  184. package/resources/template-ts/_.gitignore +18 -0
  185. package/resources/template-ts/_.nycrc.json +7 -0
  186. package/resources/template-ts/_tsconfig.json +21 -0
  187. package/resources/template-ts/eslint.config.mjs +27 -0
  188. package/resources/template-ts/package.json +40 -0
  189. package/resources/template-ts/ui5-coverage.yaml +40 -0
  190. package/resources/template-ts/ui5-dist.yaml +18 -0
  191. package/resources/template-ts/ui5.yaml +27 -0
  192. package/resources/template-ts/webapp/Component.ts +49 -0
  193. package/resources/template-ts/webapp/controller/App.controller.ts +11 -0
  194. package/resources/template-ts/webapp/controller/BaseController.ts +83 -0
  195. package/resources/template-ts/webapp/controller/Main.controller.ts +19 -0
  196. package/resources/template-ts/webapp/i18n/i18n.properties +3 -0
  197. package/resources/template-ts/webapp/i18n/i18n_en.properties +3 -0
  198. package/resources/template-ts/webapp/index-cdn.html +35 -0
  199. package/resources/template-ts/webapp/index.html +35 -0
  200. package/resources/template-ts/webapp/manifest.json +105 -0
  201. package/resources/template-ts/webapp/model/formatter.ts +5 -0
  202. package/resources/template-ts/webapp/model/models.ts +15 -0
  203. package/resources/template-ts/webapp/test/Test.qunit.html +16 -0
  204. package/resources/template-ts/webapp/test/integration/HelloJourney.ts +84 -0
  205. package/resources/template-ts/webapp/test/integration/opaTests.qunit.ts +2 -0
  206. package/resources/template-ts/webapp/test/integration/pages/MainPage.ts +112 -0
  207. package/resources/template-ts/webapp/test/testsuite.qunit.html +18 -0
  208. package/resources/template-ts/webapp/test/testsuite.qunit.ts +33 -0
  209. package/resources/template-ts/webapp/test/unit/controller/Main.qunit.ts +8 -0
  210. package/resources/template-ts/webapp/test/unit/unitTests.qunit.ts +2 -0
  211. package/resources/template-ts/webapp/test-lt1_124/integration/HelloJourney.ts +86 -0
  212. package/resources/template-ts/webapp/test-lt1_124/integration/opaTests.qunit.html +34 -0
  213. package/resources/template-ts/webapp/test-lt1_124/integration/opaTests.qunit.ts +8 -0
  214. package/resources/template-ts/webapp/test-lt1_124/integration/pages/MainPage.ts +112 -0
  215. package/resources/template-ts/webapp/test-lt1_124/testsuite.qunit.html +13 -0
  216. package/resources/template-ts/webapp/test-lt1_124/testsuite.qunit.ts +9 -0
  217. package/resources/template-ts/webapp/test-lt1_124/unit/controller/Main.qunit.ts +8 -0
  218. package/resources/template-ts/webapp/test-lt1_124/unit/unitTests.qunit.html +37 -0
  219. package/resources/template-ts/webapp/test-lt1_124/unit/unitTests.qunit.ts +8 -0
  220. package/resources/template-ts/webapp/view/App.view.xml +9 -0
  221. package/resources/template-ts/webapp/view/Main.view.xml +90 -0
@@ -0,0 +1,24 @@
1
+ import { ConcreteSymbol } from "./api-json.js";
2
+ import { ConcreteSymbolField, SymbolKind } from "./ApiReferenceProvider.js";
3
+ export interface FormattedSymbol {
4
+ kind: SymbolKind;
5
+ name: string;
6
+ library: string;
7
+ module?: string;
8
+ export?: string;
9
+ [k: string]: unknown;
10
+ }
11
+ export interface FormattedSymbolSummary {
12
+ _summaryInfo: string;
13
+ kind: SymbolKind;
14
+ name: string;
15
+ library: string;
16
+ module?: string;
17
+ export?: string;
18
+ description?: string;
19
+ deprecatedText?: string;
20
+ experimentalText?: string;
21
+ extends?: string | string[];
22
+ }
23
+ export declare function formatSymbol(inputSymbol: ConcreteSymbol | ConcreteSymbolField, libraryName: string, moduleName: string | undefined): FormattedSymbol;
24
+ export declare function summarizeSymbol(inputSymbol: ConcreteSymbol, libraryName: string, moduleName: string | undefined): FormattedSymbolSummary;
@@ -0,0 +1,109 @@
1
+ const REMOVE_ATTRIBUTES = [
2
+ "basename",
3
+ "resource",
4
+ "visibility",
5
+ ];
6
+ const SUMMARY_ATTRIBUTES = [
7
+ "kind",
8
+ "name",
9
+ "module",
10
+ "library",
11
+ "export",
12
+ "description",
13
+ "extends",
14
+ ];
15
+ export function formatSymbol(inputSymbol, libraryName, moduleName) {
16
+ const symbol = JSON.parse(JSON.stringify(inputSymbol));
17
+ deleteEmptyAttributes(symbol);
18
+ deleteRestricted(symbol);
19
+ removeAttributes(symbol, REMOVE_ATTRIBUTES);
20
+ if (moduleName && !("module" in inputSymbol)) {
21
+ // Do not overwrite existing module names, but add them to symbols that do not have one (like properties)
22
+ // Some symbols like some namespaces might not have a module (e.g. sap.ui.model.odata)
23
+ symbol.module = moduleName;
24
+ }
25
+ symbol.library = libraryName;
26
+ return symbol;
27
+ }
28
+ export function summarizeSymbol(inputSymbol, libraryName, moduleName) {
29
+ const symbol = formatSymbol(inputSymbol, libraryName, moduleName);
30
+ if (symbol.deprecated) {
31
+ symbol.deprecatedText = symbol.deprecated.text;
32
+ }
33
+ if (symbol.experimental) {
34
+ symbol.experimentalText = symbol.experimental.text;
35
+ }
36
+ keepAttributes(symbol, SUMMARY_ATTRIBUTES);
37
+ symbol._summaryInfo = `Note: This object is a shortened version of the full API object`;
38
+ return symbol;
39
+ }
40
+ /* eslint-disable
41
+ @typescript-eslint/no-unsafe-assignment,
42
+ @typescript-eslint/no-explicit-any,
43
+ @typescript-eslint/no-unsafe-member-access,
44
+ @typescript-eslint/no-unsafe-argument */
45
+ function deleteEmptyAttributes(symbol) {
46
+ for (const key of Object.keys(symbol)) {
47
+ const value = symbol[key];
48
+ if (value === null || value === undefined || value === "") {
49
+ delete symbol[key];
50
+ }
51
+ else if (Array.isArray(value) && value.length === 0) {
52
+ delete symbol[key];
53
+ }
54
+ else if (typeof value === "object") {
55
+ deleteEmptyAttributes(value);
56
+ // If the object is now empty, remove it
57
+ if (Object.keys(value).length === 0) {
58
+ delete symbol[key];
59
+ }
60
+ }
61
+ }
62
+ }
63
+ /**
64
+ * Recursively delete all object that have a key "visibility" with a value of either "private" or "restricted"
65
+ * Also remove the "visibility" key from all other objects
66
+ */
67
+ function deleteRestricted(symbol) {
68
+ for (const [key, value] of Object.entries(symbol)) {
69
+ if (Array.isArray(value)) {
70
+ // If the value is an array, filter out all entries that are private or restricted
71
+ const filtered = value.filter((entry) => {
72
+ if (typeof entry === "object" && entry !== null) {
73
+ return entry.visibility !== "private" && entry.visibility !== "restricted";
74
+ }
75
+ return true;
76
+ });
77
+ // Recursively delete restricted entries in the remaining entries
78
+ for (const entry of filtered) {
79
+ if (typeof entry === "object" && entry !== null) {
80
+ deleteRestricted(entry);
81
+ }
82
+ }
83
+ symbol[key] = filtered;
84
+ }
85
+ else if (typeof value === "object" && value !== null && "visibility" in value) {
86
+ if (value.visibility === "private" || value.visibility === "restricted") {
87
+ delete symbol[key];
88
+ }
89
+ }
90
+ }
91
+ }
92
+ function removeAttributes(symbol, attrToRemove) {
93
+ for (const attr of attrToRemove) {
94
+ delete symbol[attr];
95
+ }
96
+ }
97
+ function keepAttributes(symbol, attrsToKeep) {
98
+ for (const key of Object.keys(symbol)) {
99
+ if (!attrsToKeep.includes(key)) {
100
+ delete symbol[key];
101
+ }
102
+ }
103
+ }
104
+ /* eslint-enable
105
+ @typescript-eslint/no-unsafe-assignment,
106
+ @typescript-eslint/no-explicit-any,
107
+ @typescript-eslint/no-unsafe-member-access,
108
+ @typescript-eslint/no-unsafe-argument */
109
+ //# sourceMappingURL=formatSymbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatSymbol.js","sourceRoot":"","sources":["../../../../src/tools/get_api_reference/lib/formatSymbol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ export declare const inputSchema: {
3
+ projectDir: z.ZodString;
4
+ query: z.ZodString;
5
+ };
6
+ export declare const inputSchemaObject: z.ZodObject<{
7
+ projectDir: z.ZodString;
8
+ query: z.ZodString;
9
+ }, "strip", z.ZodTypeAny, {
10
+ query: string;
11
+ projectDir: string;
12
+ }, {
13
+ query: string;
14
+ projectDir: string;
15
+ }>;
16
+ export type GetApiReferenceParams = z.infer<typeof inputSchemaObject>;
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ export const inputSchema = {
3
+ projectDir: z.string().describe("The root directory of the UI5 project, containing the 'package.json' and 'ui5.yaml' files. " +
4
+ "This is used to determine the UI5 framework version and libraries used in the project. "),
5
+ query: z.string()
6
+ .regex(/^[^<>"'()]+$/, { message: `Characters < > ( ) " ' are not allowed.` })
7
+ .describe("Name of the UI5 module or symbol using either dot or slash notation. " +
8
+ "Examples: 'sap.m.Button', 'sap/ui/core/Core'. Individual symbols can be requested as well, e.g. " +
9
+ "'sap.m.Button#text', 'sap.ui.core.Core#init'"),
10
+ };
11
+ export const inputSchemaObject = z.object(inputSchema);
12
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/tools/get_api_reference/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAC9B,6FAA6F;QAC7F,yFAAyF,CACzF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SACf,KAAK,CAAC,cAAc,EAAE,EAAC,OAAO,EAAE,yCAAyC,EAAC,CAAC;SAC3E,QAAQ,CACR,uEAAuE;QACvE,kGAAkG;QAClG,8CAA8C,CAC9C;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function getGuidelines(): Promise<string>;
@@ -0,0 +1,6 @@
1
+ import { readFile } from "node:fs/promises";
2
+ const guidelinesFileUrl = new URL("../../../resources/guidelines.md", import.meta.url);
3
+ export async function getGuidelines() {
4
+ return readFile(guidelinesFileUrl, { encoding: "utf-8" });
5
+ }
6
+ //# sourceMappingURL=guidelines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guidelines.js","sourceRoot":"","sources":["../../../src/tools/get_guidelines/guidelines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAE1C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,aAAa;IAClC,OAAO,QAAQ,CAAC,iBAAiB,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import Context from "../../Context.js";
2
+ import { RegisterTool } from "../../registerTools.js";
3
+ export default function registerTool(registerTool: RegisterTool, _context: Context): void;
@@ -0,0 +1,30 @@
1
+ import { getGuidelines } from "./guidelines.js";
2
+ import { getLogger } from "@ui5/logger";
3
+ const log = getLogger("tools:get_guidelines");
4
+ export default function registerTool(registerTool, _context) {
5
+ registerTool("get_guidelines", {
6
+ description: "This tool MUST be called once to retrieve UI5 guidelines " +
7
+ "before working on any UI5 (SAPUI5/OpenUI5) related task or project " +
8
+ "or creating a UI5 project. " +
9
+ "The guidelines provided by this tool MUST be followed to ensure " +
10
+ "best practices and avoid common pitfalls in UI5 development.",
11
+ annotations: {
12
+ title: "Get UI5 Guidelines",
13
+ readOnlyHint: true,
14
+ idempotentHint: true,
15
+ openWorldHint: false,
16
+ },
17
+ }, async () => {
18
+ log.info("Retrieving UI5 guidelines...");
19
+ const guidelines = await getGuidelines();
20
+ return {
21
+ content: [
22
+ {
23
+ type: "text",
24
+ text: guidelines,
25
+ },
26
+ ],
27
+ };
28
+ });
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/get_guidelines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAItC,MAAM,GAAG,GAAG,SAAS,CAAC,sBAAsB,CAAC,CAAC;AAE9C,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,YAA0B,EAAE,QAAiB;IACjF,YAAY,CAAC,gBAAgB,EAAE;QAC9B,WAAW,EAAE,2DAA2D;YACvE,qEAAqE;YACrE,6BAA6B;YAC7B,kEAAkE;YAClE,8DAA8D;QAC/D,WAAW,EAAE;YACZ,KAAK,EAAE,oBAAoB;YAC3B,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACpB;KACD,EAAE,KAAK,IAAI,EAAE;QACb,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU;iBAChB;aACD;SACD,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { GetProjectInfoResult } from "./schema.js";
2
+ export default function getProjectInfo(projectDir: string, includeVersionInfo?: boolean): Promise<GetProjectInfoResult>;
@@ -0,0 +1,205 @@
1
+ import path from "node:path";
2
+ import { graphFromObject } from "@ui5/project/graph";
3
+ import { dirExists, fileExists, InvalidInputError } from "../../utils.js";
4
+ import getVersionInfo from "../get_version_info/getVersionInfo.js";
5
+ import semver from "semver";
6
+ import { isUi5Framework } from "../../utils/ui5Framework.js";
7
+ export default async function getProjectInfo(projectDir, includeVersionInfo = false) {
8
+ if (!await dirExists(projectDir)) {
9
+ // If a file path was provided, use the directory of the file
10
+ projectDir = path.dirname(projectDir);
11
+ }
12
+ let graph;
13
+ try {
14
+ // First attempt to crate project with the provided path
15
+ graph = await getProjectGraph(projectDir);
16
+ }
17
+ catch (initialError) {
18
+ // If that fails, try to search for the correct project root path
19
+ const projectRootDir = await findProjectRoot(projectDir);
20
+ try {
21
+ graph = await getProjectGraph(projectRootDir);
22
+ }
23
+ catch (_) {
24
+ // If that fails as well, throw the initial error
25
+ throw initialError;
26
+ }
27
+ }
28
+ const project = graph.getRoot();
29
+ const res = {
30
+ projectDir: project.getRootPath(),
31
+ projectName: project.getName(),
32
+ projectType: project.getType(),
33
+ frameworkName: project.getFrameworkName(),
34
+ frameworkVersion: project.getFrameworkVersion(),
35
+ frameworkLibraries: project.getFrameworkDependencies().map((lib) => lib.name),
36
+ };
37
+ if (includeVersionInfo) {
38
+ res.versionInfo = await getVersionInfoForProject(project);
39
+ }
40
+ return res;
41
+ }
42
+ const KNOWN_SRC_DIRS = [
43
+ "webapp", "src",
44
+ ];
45
+ async function findProjectRoot(dir) {
46
+ let currentDir = dir;
47
+ let lastDirName;
48
+ while (currentDir !== path.parse(currentDir).root) {
49
+ const ui5YamlPath = path.join(currentDir, "ui5.yaml");
50
+ const packageJsonPath = path.join(currentDir, "package.json");
51
+ if (await fileExists(ui5YamlPath) || await fileExists(packageJsonPath)) {
52
+ return currentDir;
53
+ }
54
+ if (lastDirName && KNOWN_SRC_DIRS.includes(lastDirName)) {
55
+ // If the current directory contains a known source directory,
56
+ // we assume it is the root directory of a UI5 project
57
+ return currentDir;
58
+ }
59
+ lastDirName = path.basename(currentDir);
60
+ currentDir = path.dirname(currentDir);
61
+ }
62
+ throw new InvalidInputError(`Unable to locate a UI5 project in directory ${dir} or any of its parents`);
63
+ }
64
+ async function getProjectGraph(rootDir) {
65
+ let rootConfigPath, rootConfiguration;
66
+ // Prefer ui5-local.yaml over ui5.yaml since that is usually where a framework version is configured
67
+ const ui5YamlPaths = ["ui5-local.yaml", "ui5.yaml"];
68
+ // Check if ui5.yaml or ui5-local.yaml exists in the root directory
69
+ for (const yamlPath of ui5YamlPaths) {
70
+ const fullPath = path.join(rootDir, yamlPath);
71
+ if (await fileExists(fullPath)) {
72
+ rootConfigPath = fullPath;
73
+ break;
74
+ }
75
+ }
76
+ if (!rootConfigPath) {
77
+ // Could not find a ui5.yaml file
78
+ // => Attempt to create a "virtual" project depending on the directory structure
79
+ const dirChecks = await Promise.all([
80
+ dirExists(path.join(rootDir, "webapp")),
81
+ dirExists(path.join(rootDir, "src", "main", "webapp")),
82
+ dirExists(path.join(rootDir, "src", "main", "jslib")),
83
+ dirExists(path.join(rootDir, "src", "main", "js")),
84
+ dirExists(path.join(rootDir, "src", "main", "uilib")),
85
+ dirExists(path.join(rootDir, "src")),
86
+ dirExists(path.join(rootDir, "WebContent")),
87
+ ]);
88
+ if (dirChecks[0]) {
89
+ // Common app with webapp folder
90
+ rootConfiguration = createProjectConfig("application", "webapp");
91
+ }
92
+ else if (dirChecks[1]) {
93
+ // Legacy app with src/main/webapp folder
94
+ rootConfiguration = createProjectConfig("application", "src/main/webapp");
95
+ }
96
+ else if (dirChecks[2]) {
97
+ // Library with src/main/jslib folder
98
+ rootConfiguration = createProjectConfig("library", "src/main/jslib", "src/test/jslib");
99
+ }
100
+ else if (dirChecks[3]) {
101
+ // Library with src/main/js folder
102
+ rootConfiguration = createProjectConfig("library", "src/main/js", "src/test/js");
103
+ }
104
+ else if (dirChecks[4]) {
105
+ // Library with src/main/uilib folder
106
+ rootConfiguration = createProjectConfig("library", "src/main/uilib", "src/test/uilib");
107
+ }
108
+ else if (dirChecks[5]) {
109
+ // Library with src folder
110
+ rootConfiguration = createProjectConfig("library", "src", "test");
111
+ }
112
+ else if (dirChecks[6]) {
113
+ // Legacy app with WebContent folder
114
+ rootConfiguration = createProjectConfig("application", "WebContent");
115
+ }
116
+ }
117
+ if (!rootConfigPath && !rootConfiguration) {
118
+ throw new InvalidInputError(`Unable to find a UI5 project at ${rootDir}. ` +
119
+ `Make sure the provided path is correct and contains a valid UI5 project`);
120
+ }
121
+ try {
122
+ return await graphFromObject({
123
+ dependencyTree: {
124
+ id: "ui5-project",
125
+ version: "1.0.0",
126
+ path: rootDir,
127
+ dependencies: [],
128
+ },
129
+ rootConfigPath,
130
+ rootConfiguration,
131
+ resolveFrameworkDependencies: false,
132
+ });
133
+ }
134
+ catch (err) {
135
+ throw new InvalidInputError(`Unable to use the UI5 project located at ${rootDir}. ` +
136
+ `Make sure the provided path is correct and contains a valid UI5 project. ` +
137
+ `Error: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
138
+ }
139
+ }
140
+ function createProjectConfig(projectType, projectSrcPath, projectTestPath) {
141
+ let resourcesConfig = {
142
+ configuration: {
143
+ paths: {},
144
+ },
145
+ };
146
+ if (projectType === "application") {
147
+ resourcesConfig.configuration.paths.webapp = projectSrcPath ?? "webapp";
148
+ }
149
+ else if (projectType === "library") {
150
+ resourcesConfig.configuration.paths.src = projectSrcPath ?? "src";
151
+ resourcesConfig.configuration.paths.test = projectTestPath ?? "test";
152
+ }
153
+ else {
154
+ // Do not set a resources configuration for other project types
155
+ resourcesConfig = undefined;
156
+ }
157
+ return {
158
+ specVersion: "4.0",
159
+ type: projectType,
160
+ metadata: {
161
+ name: "ui5-project-without-ui5-yaml",
162
+ },
163
+ resources: resourcesConfig,
164
+ };
165
+ }
166
+ async function getVersionInfoForProject(project) {
167
+ const frameworkName = project.getFrameworkName();
168
+ const frameworkVersion = project.getFrameworkVersion();
169
+ if (!frameworkVersion || !isUi5Framework(frameworkName)) {
170
+ return;
171
+ }
172
+ const { versions } = await getVersionInfo({
173
+ frameworkName,
174
+ });
175
+ const latestVersion = versions.latest.version;
176
+ const allLtsVersions = Object.values(versions).filter((v) => v.lts).map((v) => v.version);
177
+ const latestLtsVersion = semver.maxSatisfying(allLtsVersions, "*") ?? undefined;
178
+ for (const versionEntry of Object.values(versions)) {
179
+ if (versionEntry.version === frameworkVersion) {
180
+ return {
181
+ supportStatus: versionEntry.support,
182
+ isLts: versionEntry.lts,
183
+ latestVersion,
184
+ latestLtsVersion,
185
+ };
186
+ }
187
+ }
188
+ // Get major/minor for version
189
+ const key = `${semver.major(frameworkVersion)}.${semver.minor(frameworkVersion)}`;
190
+ if (versions[key]) {
191
+ const versionEntry = versions[key];
192
+ return {
193
+ supportStatus: `Outdated patch version. Upgrade to '${versionEntry.version}'.`,
194
+ isLts: versionEntry.lts,
195
+ latestVersion,
196
+ latestLtsVersion,
197
+ };
198
+ }
199
+ return {
200
+ supportStatus: "Out of Maintenance",
201
+ latestVersion,
202
+ latestLtsVersion,
203
+ };
204
+ }
205
+ //# sourceMappingURL=getProjectInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProjectInfo.js","sourceRoot":"","sources":["../../../src/tools/get_project_info/getProjectInfo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import Context from "../../Context.js";
2
+ import { RegisterTool } from "../../registerTools.js";
3
+ export default function registerTool(registerTool: RegisterTool, context: Context): void;
@@ -0,0 +1,28 @@
1
+ import { inputSchema, outputSchema } from "./schema.js";
2
+ import getProjectInfo from "./getProjectInfo.js";
3
+ import { getLogger } from "@ui5/logger";
4
+ const log = getLogger("tools:get_project_info");
5
+ export default function registerTool(registerTool, context) {
6
+ registerTool("get_project_info", {
7
+ description: "Get general information about a local UI5 project.",
8
+ annotations: {
9
+ title: "UI5 Project Info",
10
+ readOnlyHint: true,
11
+ idempotentHint: true,
12
+ },
13
+ inputSchema,
14
+ outputSchema,
15
+ }, async ({ projectDir }) => {
16
+ log.info(`Retrieving project info for project at '${projectDir}'`);
17
+ const resolvedProjectDir = await context.normalizePath(projectDir);
18
+ const info = await getProjectInfo(resolvedProjectDir, true);
19
+ return {
20
+ content: [{
21
+ type: "text",
22
+ text: JSON.stringify(info, null, 2),
23
+ }],
24
+ structuredContent: info,
25
+ };
26
+ });
27
+ }
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/get_project_info/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AACtD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAItC,MAAM,GAAG,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;AAEhD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,YAA0B,EAAE,OAAgB;IAChF,YAAY,CAAC,kBAAkB,EAAE;QAChC,WAAW,EAAE,oDAAoD;QACjE,WAAW,EAAE;YACZ,KAAK,EAAE,kBAAkB;YACzB,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;SACpB;QACD,WAAW;QACX,YAAY;KACZ,EAAE,KAAK,EAAE,EAAC,UAAU,EAAC,EAAE,EAAE;QACzB,GAAG,CAAC,IAAI,CAAC,2CAA2C,UAAU,GAAG,CAAC,CAAC;QACnE,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO;YACN,OAAO,EAAE,CAAC;oBACT,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnC,CAAC;YACF,iBAAiB,EAAE,IAAI;SACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,87 @@
1
+ import { z } from "zod";
2
+ export declare const inputSchema: {
3
+ projectDir: z.ZodString;
4
+ };
5
+ export declare const inputSchemaObject: z.ZodObject<{
6
+ projectDir: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ projectDir: string;
9
+ }, {
10
+ projectDir: string;
11
+ }>;
12
+ export declare const outputSchema: {
13
+ projectDir: z.ZodString;
14
+ projectName: z.ZodString;
15
+ projectType: z.ZodString;
16
+ frameworkName: z.ZodOptional<z.ZodEnum<["OpenUI5", "SAPUI5"]>>;
17
+ frameworkVersion: z.ZodOptional<z.ZodString>;
18
+ frameworkLibraries: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
19
+ versionInfo: z.ZodOptional<z.ZodObject<{
20
+ supportStatus: z.ZodString;
21
+ isLts: z.ZodOptional<z.ZodBoolean>;
22
+ latestVersion: z.ZodString;
23
+ latestLtsVersion: z.ZodOptional<z.ZodString>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ supportStatus: string;
26
+ latestVersion: string;
27
+ isLts?: boolean | undefined;
28
+ latestLtsVersion?: string | undefined;
29
+ }, {
30
+ supportStatus: string;
31
+ latestVersion: string;
32
+ isLts?: boolean | undefined;
33
+ latestLtsVersion?: string | undefined;
34
+ }>>;
35
+ };
36
+ export declare const outputSchemaObject: z.ZodObject<{
37
+ projectDir: z.ZodString;
38
+ projectName: z.ZodString;
39
+ projectType: z.ZodString;
40
+ frameworkName: z.ZodOptional<z.ZodEnum<["OpenUI5", "SAPUI5"]>>;
41
+ frameworkVersion: z.ZodOptional<z.ZodString>;
42
+ frameworkLibraries: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
43
+ versionInfo: z.ZodOptional<z.ZodObject<{
44
+ supportStatus: z.ZodString;
45
+ isLts: z.ZodOptional<z.ZodBoolean>;
46
+ latestVersion: z.ZodString;
47
+ latestLtsVersion: z.ZodOptional<z.ZodString>;
48
+ }, "strip", z.ZodTypeAny, {
49
+ supportStatus: string;
50
+ latestVersion: string;
51
+ isLts?: boolean | undefined;
52
+ latestLtsVersion?: string | undefined;
53
+ }, {
54
+ supportStatus: string;
55
+ latestVersion: string;
56
+ isLts?: boolean | undefined;
57
+ latestLtsVersion?: string | undefined;
58
+ }>>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ projectDir: string;
61
+ projectName: string;
62
+ projectType: string;
63
+ frameworkName?: "OpenUI5" | "SAPUI5" | undefined;
64
+ frameworkVersion?: string | undefined;
65
+ frameworkLibraries?: string[] | undefined;
66
+ versionInfo?: {
67
+ supportStatus: string;
68
+ latestVersion: string;
69
+ isLts?: boolean | undefined;
70
+ latestLtsVersion?: string | undefined;
71
+ } | undefined;
72
+ }, {
73
+ projectDir: string;
74
+ projectName: string;
75
+ projectType: string;
76
+ frameworkName?: "OpenUI5" | "SAPUI5" | undefined;
77
+ frameworkVersion?: string | undefined;
78
+ frameworkLibraries?: string[] | undefined;
79
+ versionInfo?: {
80
+ supportStatus: string;
81
+ latestVersion: string;
82
+ isLts?: boolean | undefined;
83
+ latestLtsVersion?: string | undefined;
84
+ } | undefined;
85
+ }>;
86
+ export type GetProjectInfoParams = z.infer<typeof inputSchemaObject>;
87
+ export type GetProjectInfoResult = z.infer<typeof outputSchemaObject>;
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ import { Ui5FrameworkSchema } from "../../utils/ui5Framework.js";
3
+ export const inputSchema = {
4
+ projectDir: z.string()
5
+ .describe("Root directory of the UI5 project to analyze. Must be an absolute path. If a path to a file " +
6
+ "is provided, the root directory will be determined automatically."),
7
+ };
8
+ export const inputSchemaObject = z.object(inputSchema);
9
+ export const outputSchema = {
10
+ projectDir: z.string().describe("The root directory of the UI5 project, containing the 'package.json' and 'ui5.yaml' files."),
11
+ projectName: z.string().describe("The name of the project. Note that this may *not* be the namespace"),
12
+ projectType: z.string(),
13
+ frameworkName: Ui5FrameworkSchema.optional()
14
+ .describe("Whether the project uses OpenUI5 or SAPUI5"),
15
+ frameworkVersion: z.string().optional()
16
+ .describe("The version of the framework used in the project"),
17
+ frameworkLibraries: z.array(z.string()).optional()
18
+ .describe("The framework libraries used in the project"),
19
+ versionInfo: z.object({
20
+ supportStatus: z.string(),
21
+ isLts: z.boolean().optional()
22
+ .describe("Whether the framework version is a Long Term Support (LTS) version"),
23
+ latestVersion: z.string(),
24
+ latestLtsVersion: z.string().optional(),
25
+ }).optional(),
26
+ };
27
+ export const outputSchemaObject = z.object(outputSchema);
28
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/tools/get_project_info/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,kBAAkB,EAAC,MAAM,6BAA6B,CAAC;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;SACpB,QAAQ,CACR,8FAA8F;QAC9F,mEAAmE,CAAC;CACtE,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAC9B,4FAA4F,CAAC;IAC9F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;IACtG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,aAAa,EAAE,kBAAkB,CAAC,QAAQ,EAAE;SAC1C,QAAQ,CAAC,4CAA4C,CAAC;IACxD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACrC,QAAQ,CAAC,kDAAkD,CAAC;IAC9D,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;SAChD,QAAQ,CAAC,6CAA6C,CAAC;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACrB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,oEAAoE,CAAC;QAChF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC,CAAC,QAAQ,EAAE;CACb,CAAC;AACF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { GetVersionInfoParams, GetVersionInfoResult } from "./types.js";
2
+ /**
3
+ * Fetch version information for the specified UI5 framework
4
+ * @param framework The UI5 framework (OpenUI5 or SAPUI5)
5
+ * @returns The version information
6
+ * @throws {Error} If the version information cannot be fetched
7
+ */
8
+ export default function getVersionInfo(params: GetVersionInfoParams): Promise<GetVersionInfoResult>;