@sap-ux/fiori-generator-shared 0.5.0 → 0.6.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.
package/dist/cap/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCapFolderPathsSync = void 0;
3
+ exports.getCapFolderPathsSync = getCapFolderPathsSync;
4
4
  const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
6
  /**
@@ -41,5 +41,4 @@ function getCapFolderPathsSync(capProjectPath) {
41
41
  }
42
42
  return capPaths;
43
43
  }
44
- exports.getCapFolderPathsSync = getCapFolderPathsSync;
45
44
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,4 @@
1
+ export declare const YEOMANUI_TARGET_FOLDER_CONFIG_PROP = "ApplicationWizard.TargetFolder";
2
+ export declare const LOGGING_LEVEL_CONFIG_PROP = "ApplicationWizard.loggingLevel";
3
+ export declare const DEFAULT_PROJECTS_FOLDER: string;
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DEFAULT_PROJECTS_FOLDER = exports.LOGGING_LEVEL_CONFIG_PROP = exports.YEOMANUI_TARGET_FOLDER_CONFIG_PROP = void 0;
7
+ const os_1 = __importDefault(require("os"));
8
+ const path_1 = require("path");
9
+ exports.YEOMANUI_TARGET_FOLDER_CONFIG_PROP = 'ApplicationWizard.TargetFolder';
10
+ exports.LOGGING_LEVEL_CONFIG_PROP = 'ApplicationWizard.loggingLevel';
11
+ exports.DEFAULT_PROJECTS_FOLDER = (0, path_1.join)(os_1.default.homedir(), 'projects');
12
+ //# sourceMappingURL=constants.js.map
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isCli = void 0;
3
+ exports.isCli = isCli;
4
4
  /**
5
5
  * Determine if the current prompting environment is cli .
6
6
  *
@@ -14,5 +14,4 @@ function isCli() {
14
14
  return false;
15
15
  }
16
16
  }
17
- exports.isCli = isCli;
18
17
  //# sourceMappingURL=environment.js.map
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPackageScripts = void 0;
3
+ exports.getPackageScripts = getPackageScripts;
4
4
  const i18n_1 = require("./i18n");
5
5
  /**
6
6
  * Builds the command for the `start-noflp` script in `package.json`.
@@ -129,5 +129,4 @@ function getPackageScripts({ localOnly, addMock = true, addTest = false, sapClie
129
129
  : getVariantPreviewAppScript(sapClient);
130
130
  return scripts;
131
131
  }
132
- exports.getPackageScripts = getPackageScripts;
133
132
  //# sourceMappingURL=getPackageScripts.js.map
package/dist/helpers.d.ts CHANGED
@@ -10,4 +10,11 @@ export declare function getBootstrapResourceUrls(isEdmxProjectType: boolean, fra
10
10
  uShellBootstrapResourceUrl: string;
11
11
  uiBootstrapResourceUrl: string;
12
12
  };
13
+ /**
14
+ * Determines the target folder for the project.
15
+ *
16
+ * @param vscode - the vscode instance
17
+ * @returns The default path, if it can be determined otherwise undefined.
18
+ */
19
+ export declare function getDefaultTargetFolder(vscode: any): string | undefined;
13
20
  //# sourceMappingURL=helpers.d.ts.map
package/dist/helpers.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getBootstrapResourceUrls = void 0;
3
+ exports.getBootstrapResourceUrls = getBootstrapResourceUrls;
4
+ exports.getDefaultTargetFolder = getDefaultTargetFolder;
5
+ const fs_1 = require("fs");
6
+ const constants_1 = require("./constants");
4
7
  /**
5
8
  * Get the resource URLs for the UShell bootstrap and UI5 bootstrap based on project type and UI5 framework details.
6
9
  *
@@ -23,5 +26,27 @@ function getBootstrapResourceUrls(isEdmxProjectType, frameworkUrl, version) {
23
26
  const uiBootstrapResourceUrl = isEdmxProjectType || !frameworkUrl ? `..${relativeUiPath}` : `${frameworkUrl}${versionPath}${relativeUiPath}`;
24
27
  return { uShellBootstrapResourceUrl, uiBootstrapResourceUrl };
25
28
  }
26
- exports.getBootstrapResourceUrls = getBootstrapResourceUrls;
29
+ /**
30
+ * Determines the target folder for the project.
31
+ *
32
+ * @param vscode - the vscode instance
33
+ * @returns The default path, if it can be determined otherwise undefined.
34
+ */
35
+ function getDefaultTargetFolder(vscode) {
36
+ // CLI use will not define vscode
37
+ if (!vscode) {
38
+ return undefined;
39
+ }
40
+ const targetFolder = vscode.workspace?.getConfiguration().get(constants_1.YEOMANUI_TARGET_FOLDER_CONFIG_PROP);
41
+ if (targetFolder) {
42
+ return targetFolder;
43
+ }
44
+ const workspace = vscode.workspace;
45
+ // If this is not a workspace default to the first folder (`rootPath` is deprecated)
46
+ if (workspace.workspaceFolders?.length > 0 && workspace.workspaceFolders[0].uri.scheme === 'file') {
47
+ return workspace.workspaceFolders[0].uri.fsPath;
48
+ }
49
+ // Otherwise use <home-dir>/projects,
50
+ return (0, fs_1.existsSync)(constants_1.DEFAULT_PROJECTS_FOLDER) ? constants_1.DEFAULT_PROJECTS_FOLDER : undefined;
51
+ }
27
52
  //# sourceMappingURL=helpers.js.map
package/dist/i18n.js CHANGED
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.t = exports.initI18n = void 0;
6
+ exports.initI18n = initI18n;
7
+ exports.t = t;
7
8
  const i18next_1 = __importDefault(require("i18next"));
8
9
  const fiori_generator_shared_i18n_json_1 = __importDefault(require("./translations/fiori-generator-shared.i18n.json"));
9
10
  const NS = 'fiori-freestyle-writer';
@@ -23,7 +24,6 @@ async function initI18n() {
23
24
  ns: [NS]
24
25
  });
25
26
  }
26
- exports.initI18n = initI18n;
27
27
  /**
28
28
  * Helper function facading the call call to i18next.
29
29
  *
@@ -34,7 +34,6 @@ exports.initI18n = initI18n;
34
34
  function t(key, options) {
35
35
  return i18next_1.default.t(key, options);
36
36
  }
37
- exports.t = t;
38
37
  initI18n().catch(() => {
39
38
  // Ignore any errors since the write will still work
40
39
  });
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  export * from './cap';
2
2
  export * from './environment';
3
3
  export { getPackageScripts } from './getPackageScripts';
4
- export { getBootstrapResourceUrls } from './helpers';
4
+ export { getBootstrapResourceUrls, getDefaultTargetFolder } from './helpers';
5
5
  export { generateReadMe } from './read-me';
6
6
  export * from './system-utils';
7
- export { PackageJsonScripts } from './types';
7
+ export { PackageJsonScripts, YeomanEnvironment, VSCodeInstance } from './types';
8
+ export * from './logWrapper';
8
9
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -14,14 +14,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.generateReadMe = exports.getBootstrapResourceUrls = exports.getPackageScripts = void 0;
17
+ exports.generateReadMe = exports.getDefaultTargetFolder = exports.getBootstrapResourceUrls = exports.getPackageScripts = void 0;
18
18
  __exportStar(require("./cap"), exports);
19
19
  __exportStar(require("./environment"), exports);
20
20
  var getPackageScripts_1 = require("./getPackageScripts");
21
21
  Object.defineProperty(exports, "getPackageScripts", { enumerable: true, get: function () { return getPackageScripts_1.getPackageScripts; } });
22
22
  var helpers_1 = require("./helpers");
23
23
  Object.defineProperty(exports, "getBootstrapResourceUrls", { enumerable: true, get: function () { return helpers_1.getBootstrapResourceUrls; } });
24
+ Object.defineProperty(exports, "getDefaultTargetFolder", { enumerable: true, get: function () { return helpers_1.getDefaultTargetFolder; } });
24
25
  var read_me_1 = require("./read-me");
25
26
  Object.defineProperty(exports, "generateReadMe", { enumerable: true, get: function () { return read_me_1.generateReadMe; } });
26
27
  __exportStar(require("./system-utils"), exports);
28
+ __exportStar(require("./logWrapper"), exports);
27
29
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,95 @@
1
+ import type { IVSCodeExtLogger, LogLevel, IChildLogger as ILogWrapper } from '@vscode-logging/logger';
2
+ import type { Logger } from 'yeoman-environment';
3
+ export type { ILogWrapper };
4
+ /**
5
+ * Empty Implementation of the Logger, this is not strictly necessary in app gen but
6
+ * other modules consuming parts of app gen need a dummy implementation (logs to console)
7
+ */
8
+ export declare const DefaultLogger: LogWrapper;
9
+ /**
10
+ * Creates a CLI logger based on the IChildLogger interface. This means we can use the
11
+ * same log functions for extension and cli logging. No files generated for CLI use currently.
12
+ *
13
+ * @param logName - name of the logger
14
+ * @param logLevel - defaults to off on cli
15
+ * @returns {ILogWrapper} - the logger
16
+ */
17
+ export declare function createCLILogger(logName: string, logLevel?: LogLevel): ILogWrapper;
18
+ /**
19
+ * Log to vscode extension logger and yeoman logger simultaneously.
20
+ * This allows use of Application Wizard log config and log file use but still have a single output channel for
21
+ * App Gen logging.
22
+ */
23
+ export declare class LogWrapper implements ILogWrapper {
24
+ private static _vscodeLogger;
25
+ private static _yoLogger;
26
+ private static _logLevel;
27
+ static readonly consoleFormat: import("logform").Format;
28
+ /**
29
+ * Create a new LogWrapper instance.
30
+ *
31
+ * @param logName - name of the logger
32
+ * @param yoLogger - yeoman logger
33
+ * @param logLevel - log level
34
+ * @param extLogger - vscode extension logger
35
+ * @param vscode - vscode instance
36
+ */
37
+ constructor(logName: string, yoLogger?: Logger, logLevel?: LogLevel, extLogger?: IVSCodeExtLogger, vscode?: any);
38
+ static readonly logAtLevel: (level: LogLevel, message: string, ...args: any[]) => void;
39
+ /**
40
+ * Log a message at the fatal level.
41
+ *
42
+ * @param msg - message to log
43
+ * @param {...any} args - additional arguments
44
+ */
45
+ fatal(msg: string, ...args: any[]): void;
46
+ /**
47
+ * Log a message at the error level.
48
+ *
49
+ * @param msg - message to log
50
+ * @param {...any} args - additional arguments
51
+ */
52
+ error(msg: string, ...args: any[]): void;
53
+ /**
54
+ * Log a message at the warn level.
55
+ *
56
+ * @param msg - message to log
57
+ * @param {...any} args - additional arguments
58
+ */
59
+ warn(msg: string, ...args: any[]): void;
60
+ /**
61
+ * Log a message at the info level.
62
+ *
63
+ * @param msg - message to log
64
+ * @param {...any} args - additional arguments
65
+ */
66
+ info(msg: string, ...args: any[]): void;
67
+ /**
68
+ * Log a message at the debug level.
69
+ *
70
+ * @param msg - message to log
71
+ * @param {...any} args - additional arguments
72
+ */
73
+ debug(msg: string, ...args: any[]): void;
74
+ /**
75
+ * Log a message at the trace level.
76
+ *
77
+ * @param msg - message to log
78
+ * @param {...any} args - additional arguments
79
+ */
80
+ trace(msg: string, ...args: any[]): void;
81
+ /**
82
+ * Log a message at the info level.
83
+ *
84
+ * @param msg - message to log
85
+ */
86
+ static log(msg: string): void;
87
+ /**
88
+ * Get the currently configured log level.
89
+ *
90
+ * @returns {LogLevel} The current log level.
91
+ */
92
+ getLogLevel(): LogLevel;
93
+ getChildLogger(): ILogWrapper;
94
+ }
95
+ //# sourceMappingURL=logWrapper.d.ts.map
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogWrapper = exports.DefaultLogger = void 0;
4
+ exports.createCLILogger = createCLILogger;
5
+ const logger_1 = require("@vscode-logging/logger");
6
+ const logform_1 = require("logform");
7
+ const i18n_1 = require("./i18n");
8
+ const constants_1 = require("./constants");
9
+ /**
10
+ * Empty Implementation of the Logger, this is not strictly necessary in app gen but
11
+ * other modules consuming parts of app gen need a dummy implementation (logs to console)
12
+ */
13
+ exports.DefaultLogger = {
14
+ fatal: (msg) => {
15
+ console.log(msg);
16
+ },
17
+ error: (msg) => {
18
+ console.error(msg);
19
+ },
20
+ warn: (msg) => {
21
+ console.warn(msg);
22
+ },
23
+ info: (msg) => {
24
+ console.log(msg);
25
+ },
26
+ debug: (msg) => {
27
+ console.log(msg);
28
+ },
29
+ trace: (msg) => {
30
+ console.trace(msg);
31
+ },
32
+ getChildLogger: () => exports.DefaultLogger,
33
+ getLogLevel: () => 'off'
34
+ };
35
+ const LOG_LEVEL_KEYS = {
36
+ off: -1,
37
+ fatal: 0,
38
+ error: 1,
39
+ warn: 2,
40
+ info: 3,
41
+ debug: 4,
42
+ trace: 5
43
+ };
44
+ /**
45
+ * Creates a CLI logger based on the IChildLogger interface. This means we can use the
46
+ * same log functions for extension and cli logging. No files generated for CLI use currently.
47
+ *
48
+ * @param logName - name of the logger
49
+ * @param logLevel - defaults to off on cli
50
+ * @returns {ILogWrapper} - the logger
51
+ */
52
+ function createCLILogger(logName, logLevel = 'off') {
53
+ const extensionLoggerOpts = {
54
+ extName: logName,
55
+ level: logLevel,
56
+ logConsole: true
57
+ };
58
+ return (0, logger_1.getExtensionLogger)(extensionLoggerOpts);
59
+ }
60
+ /**
61
+ * Log to vscode extension logger and yeoman logger simultaneously.
62
+ * This allows use of Application Wizard log config and log file use but still have a single output channel for
63
+ * App Gen logging.
64
+ */
65
+ class LogWrapper {
66
+ static _vscodeLogger;
67
+ static _yoLogger;
68
+ static _logLevel;
69
+ static consoleFormat = logform_1.format.combine(logform_1.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), logform_1.format.printf((msgJson) => {
70
+ return `[${msgJson.timestamp}] ${msgJson.level.toUpperCase()}: ${msgJson.message}`;
71
+ }));
72
+ /**
73
+ * Create a new LogWrapper instance.
74
+ *
75
+ * @param logName - name of the logger
76
+ * @param yoLogger - yeoman logger
77
+ * @param logLevel - log level
78
+ * @param extLogger - vscode extension logger
79
+ * @param vscode - vscode instance
80
+ */
81
+ constructor(logName, yoLogger, logLevel, extLogger, vscode) {
82
+ LogWrapper._yoLogger = yoLogger;
83
+ if (extLogger) {
84
+ LogWrapper._logLevel = vscode
85
+ ? vscode.workspace.getConfiguration().get(constants_1.LOGGING_LEVEL_CONFIG_PROP)
86
+ : logLevel ?? 'info';
87
+ LogWrapper._vscodeLogger = extLogger.getChildLogger({ label: logName });
88
+ }
89
+ else {
90
+ if (!LogWrapper._yoLogger) {
91
+ LogWrapper._vscodeLogger = createCLILogger(logName, logLevel);
92
+ }
93
+ LogWrapper._logLevel = logLevel === 'off' || !logLevel ? 'info' : logLevel;
94
+ }
95
+ LogWrapper._vscodeLogger?.debug((0, i18n_1.t)('debug.loggingConfigured', { logLevel: LogWrapper._logLevel }));
96
+ }
97
+ static logAtLevel = (level, message, ...args) => {
98
+ if (LogWrapper._vscodeLogger && level !== 'off') {
99
+ LogWrapper._vscodeLogger[level](message, ...args);
100
+ }
101
+ if (LogWrapper._yoLogger) {
102
+ if (LOG_LEVEL_KEYS[level] <= LOG_LEVEL_KEYS[LogWrapper._logLevel]) {
103
+ LogWrapper._yoLogger(LogWrapper.consoleFormat.transform({
104
+ level,
105
+ message
106
+ })[Symbol.for('message')]);
107
+ }
108
+ }
109
+ else {
110
+ exports.DefaultLogger.error((0, i18n_1.t)('error.logWrapperNotInitialised'));
111
+ }
112
+ };
113
+ /**
114
+ * Log a message at the fatal level.
115
+ *
116
+ * @param msg - message to log
117
+ * @param {...any} args - additional arguments
118
+ */
119
+ fatal(msg, ...args) {
120
+ LogWrapper.logAtLevel('fatal', msg, ...args);
121
+ }
122
+ /**
123
+ * Log a message at the error level.
124
+ *
125
+ * @param msg - message to log
126
+ * @param {...any} args - additional arguments
127
+ */
128
+ error(msg, ...args) {
129
+ LogWrapper.logAtLevel('error', msg, ...args);
130
+ }
131
+ /**
132
+ * Log a message at the warn level.
133
+ *
134
+ * @param msg - message to log
135
+ * @param {...any} args - additional arguments
136
+ */
137
+ warn(msg, ...args) {
138
+ LogWrapper.logAtLevel('warn', msg, ...args);
139
+ }
140
+ /**
141
+ * Log a message at the info level.
142
+ *
143
+ * @param msg - message to log
144
+ * @param {...any} args - additional arguments
145
+ */
146
+ info(msg, ...args) {
147
+ LogWrapper.logAtLevel('info', msg, ...args);
148
+ }
149
+ /**
150
+ * Log a message at the debug level.
151
+ *
152
+ * @param msg - message to log
153
+ * @param {...any} args - additional arguments
154
+ */
155
+ debug(msg, ...args) {
156
+ LogWrapper.logAtLevel('debug', msg, ...args);
157
+ }
158
+ /**
159
+ * Log a message at the trace level.
160
+ *
161
+ * @param msg - message to log
162
+ * @param {...any} args - additional arguments
163
+ */
164
+ trace(msg, ...args) {
165
+ LogWrapper.logAtLevel('trace', msg, ...args);
166
+ }
167
+ /**
168
+ * Log a message at the info level.
169
+ *
170
+ * @param msg - message to log
171
+ */
172
+ static log(msg) {
173
+ LogWrapper.logAtLevel('info', msg);
174
+ }
175
+ /**
176
+ * Get the currently configured log level.
177
+ *
178
+ * @returns {LogLevel} The current log level.
179
+ */
180
+ getLogLevel() {
181
+ return LogWrapper._logLevel;
182
+ }
183
+ getChildLogger( /* opts: { label: string } */) {
184
+ throw new Error((0, i18n_1.t)('error.methodNotImplemented'));
185
+ }
186
+ }
187
+ exports.LogWrapper = LogWrapper;
188
+ //# sourceMappingURL=logWrapper.js.map
package/dist/read-me.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateReadMe = void 0;
3
+ exports.generateReadMe = generateReadMe;
4
4
  const path_1 = require("path");
5
5
  /**
6
6
  * Generates a README file at the specified destination path using the provided configuration and file system editor.
@@ -18,5 +18,4 @@ function generateReadMe(destPath, readMe, fs) {
18
18
  fs.copyTpl(templateSourcePath, templateDestPath, readMe);
19
19
  return fs;
20
20
  }
21
- exports.generateReadMe = generateReadMe;
22
21
  //# sourceMappingURL=read-me.js.map
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSystemDisplayName = exports.Suffix = void 0;
3
+ exports.Suffix = void 0;
4
+ exports.getSystemDisplayName = getSystemDisplayName;
4
5
  /**
5
6
  * Relevant values for display extended system properties to the UI
6
7
  */
@@ -52,5 +53,4 @@ function getSystemDisplayName(systemName, displayUsername, isBtp = false, isS4HC
52
53
  }
53
54
  return `${systemDisplayName}${userDisplayName}`;
54
55
  }
55
- exports.getSystemDisplayName = getSystemDisplayName;
56
56
  //# sourceMappingURL=system-utils.js.map
@@ -1,5 +1,12 @@
1
1
  {
2
2
  "info": {
3
3
  "mockOnlyWarning": "This application was generated with a local metadata file and does not reference a live server. Please add the required server configuration or start this application with mock data using the target: npm run start-mock"
4
+ },
5
+ "error": {
6
+ "logWrapperNotInitialised": "LogWrapper is not initialised",
7
+ "methodNotImplemented": "Method not implemented"
8
+ },
9
+ "debug": {
10
+ "loggingConfigured": "Logging has been configured at log level: {{logLevel}}"
4
11
  }
5
12
  }
package/dist/types.d.ts CHANGED
@@ -53,6 +53,25 @@ export interface ReadMe {
53
53
  /** Additional custom entries for the application. */
54
54
  additionalEntries?: AdditionalEntries[];
55
55
  }
56
+ /**
57
+ * Interface for the yeoman environment.
58
+ */
59
+ export interface YeomanEnvironment {
60
+ conflicter: {
61
+ force: boolean;
62
+ };
63
+ adapter: {
64
+ actualAdapter: unknown;
65
+ };
66
+ }
67
+ /**
68
+ * Interface for the VSCode instance.
69
+ */
70
+ export interface VSCodeInstance {
71
+ commands: {
72
+ executeCommand: (command: string, ...rest: any[]) => Promise<void>;
73
+ };
74
+ }
56
75
  /**
57
76
  * Defines the structure for the `package.json` scripts section.
58
77
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sap-ux/fiori-generator-shared",
3
3
  "description": "Commonly used shared functionality and types to support the fiori generator.",
4
- "version": "0.5.0",
4
+ "version": "0.6.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/SAP/open-ux-tools.git",
@@ -17,15 +17,18 @@
17
17
  "!dist/**/*.map"
18
18
  ],
19
19
  "dependencies": {
20
+ "@vscode-logging/logger": "2.0.0",
20
21
  "i18next": "20.6.1",
22
+ "logform": "2.4.0",
21
23
  "mem-fs": "2.1.0",
22
24
  "mem-fs-editor": "9.4.0",
23
25
  "@sap-ux/btp-utils": "0.15.2",
24
- "@sap-ux/project-access": "1.27.4"
26
+ "@sap-ux/project-access": "1.27.5"
25
27
  },
26
28
  "devDependencies": {
27
29
  "@types/mem-fs-editor": "7.0.1",
28
- "@types/mem-fs": "1.1.2"
30
+ "@types/mem-fs": "1.1.2",
31
+ "@types/yeoman-environment": "2.10.11"
29
32
  },
30
33
  "engines": {
31
34
  "node": ">=18.x"