@sap-ux/generator-adp 0.7.21 → 0.7.24

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.
@@ -104,6 +104,14 @@ export default class extends Generator {
104
104
  * Indicates if the CF feature is enabled.
105
105
  */
106
106
  private readonly isCfFeatureEnabled;
107
+ /**
108
+ * Tools ID.
109
+ */
110
+ private toolsId;
111
+ /**
112
+ * Telemetry collector instance.
113
+ */
114
+ private telemetryCollector;
107
115
  /**
108
116
  * Creates an instance of the generator.
109
117
  *
@@ -120,6 +128,10 @@ export default class extends Generator {
120
128
  * Prompts the user for the CF project path.
121
129
  */
122
130
  private _promptForCfProjectPath;
131
+ /**
132
+ * Collects the telemetry data for the ADP generator.
133
+ */
134
+ private _collectTelemetryData;
123
135
  /**
124
136
  * Determines the target environment based on the current context.
125
137
  * Sets the target environment and updates related state accordingly.
@@ -6,18 +6,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const node_fs_1 = __importDefault(require("node:fs"));
7
7
  const node_path_1 = require("node:path");
8
8
  const yeoman_generator_1 = __importDefault(require("yeoman-generator"));
9
+ const uuid_1 = require("uuid");
9
10
  const yeoman_ui_types_1 = require("@sap-devx/yeoman-ui-types");
10
11
  const adp_tooling_1 = require("@sap-ux/adp-tooling");
11
12
  const fiori_generator_shared_1 = require("@sap-ux/fiori-generator-shared");
12
13
  const logger_1 = require("@sap-ux/logger");
13
14
  const feature_toggle_1 = require("@sap-ux/feature-toggle");
14
- const telemetryEvents_1 = require("../telemetryEvents");
15
+ const telemetry_1 = require("@sap-ux/telemetry");
15
16
  const appWizardCache_1 = require("../utils/appWizardCache");
16
17
  const deps_1 = require("../utils/deps");
17
18
  const i18n_1 = require("../utils/i18n");
18
19
  const logger_2 = __importDefault(require("../utils/logger"));
19
20
  const opts_1 = require("../utils/opts");
20
21
  const parse_json_input_1 = require("../utils/parse-json-input");
22
+ const telemetry_2 = require("../telemetry");
21
23
  const steps_1 = require("../utils/steps");
22
24
  const subgenHelpers_1 = require("../utils/subgenHelpers");
23
25
  const templates_1 = require("../utils/templates");
@@ -135,6 +137,14 @@ class default_1 extends yeoman_generator_1.default {
135
137
  * Indicates if the CF feature is enabled.
136
138
  */
137
139
  isCfFeatureEnabled;
140
+ /**
141
+ * Tools ID.
142
+ */
143
+ toolsId;
144
+ /**
145
+ * Telemetry collector instance.
146
+ */
147
+ telemetryCollector;
138
148
  /**
139
149
  * Creates an instance of the generator.
140
150
  *
@@ -183,13 +193,7 @@ class default_1 extends yeoman_generator_1.default {
183
193
  this.isCfLoggedIn = await (0, adp_tooling_1.isLoggedInCf)(this.cfConfig, this.logger);
184
194
  this.logger.info(`isCfInstalled: ${this.cfInstalled}`);
185
195
  const isInternalUsage = (0, feature_toggle_1.isInternalFeaturesSettingEnabled)();
186
- if (!this.jsonInput) {
187
- const shouldShowTargetEnv = this.cfInstalled && this.isCfFeatureEnabled;
188
- this.prompts.splice(0, 0, (0, steps_1.getWizardPages)(shouldShowTargetEnv));
189
- this.prompter = this._getOrCreatePrompter();
190
- this.cfPrompter = new cf_services_1.CFServicesPrompter(isInternalUsage, this.isCfLoggedIn, this.logger);
191
- }
192
- await fiori_generator_shared_1.TelemetryHelper.initTelemetrySettings({
196
+ await (0, telemetry_1.initTelemetrySettings)({
193
197
  consumerModule: {
194
198
  name: '@sap/generator-fiori:generator-adp',
195
199
  version: this.rootGeneratorVersion()
@@ -197,6 +201,13 @@ class default_1 extends yeoman_generator_1.default {
197
201
  internalFeature: isInternalUsage,
198
202
  watchTelemetrySettingStore: false
199
203
  });
204
+ this.telemetryCollector = new telemetry_2.TelemetryCollector();
205
+ if (!this.jsonInput) {
206
+ const shouldShowTargetEnv = this.cfInstalled && this.isCfFeatureEnabled;
207
+ this.prompts.splice(0, 0, (0, steps_1.getWizardPages)(shouldShowTargetEnv));
208
+ this.prompter = this._getOrCreatePrompter();
209
+ this.cfPrompter = new cf_services_1.CFServicesPrompter(isInternalUsage, this.isCfLoggedIn, this.logger);
210
+ }
200
211
  }
201
212
  async prompting() {
202
213
  if (this.jsonInput) {
@@ -263,13 +274,15 @@ class default_1 extends yeoman_generator_1.default {
263
274
  }
264
275
  async writing() {
265
276
  try {
277
+ this.toolsId = (0, uuid_1.v4)();
278
+ if (this.jsonInput) {
279
+ await this._initFromJson();
280
+ }
281
+ this._collectTelemetryData();
266
282
  if (this.isCfEnv) {
267
283
  await this._generateAdpProjectArtifactsCF();
268
284
  return;
269
285
  }
270
- if (this.jsonInput) {
271
- await this._initFromJson();
272
- }
273
286
  if (this.shouldCreateExtProject) {
274
287
  await (0, subgenHelpers_1.addExtProjectGen)({
275
288
  configAnswers: this.configAnswers,
@@ -291,7 +304,8 @@ class default_1 extends yeoman_generator_1.default {
291
304
  manifest,
292
305
  layer: this.layer,
293
306
  packageJson,
294
- logger: this.toolsLogger
307
+ logger: this.toolsLogger,
308
+ toolsId: this.toolsId
295
309
  });
296
310
  if (config.options) {
297
311
  config.options.templatePathOverwrite = (0, templates_1.getTemplatesOverwritePath)();
@@ -318,20 +332,22 @@ class default_1 extends yeoman_generator_1.default {
318
332
  }
319
333
  }
320
334
  async end() {
321
- if (this.shouldCreateExtProject) {
322
- return;
323
- }
324
- const telemetryData = fiori_generator_shared_1.TelemetryHelper.createTelemetryData({
325
- appType: 'generator-adp',
326
- ...this.options.telemetryData
327
- }) ?? {};
328
335
  const projectPath = this._getProjectPath();
329
- if (telemetryData) {
330
- (0, fiori_generator_shared_1.sendTelemetry)(telemetryEvents_1.EventName.ADAPTATION_PROJECT_CREATED, telemetryData, projectPath).catch((error) => {
331
- this.logger.error((0, i18n_1.t)('error.telemetry', { error }));
336
+ const data = fiori_generator_shared_1.TelemetryHelper.createTelemetryData({
337
+ appType: 'generator-adp',
338
+ ...this.options.telemetryData,
339
+ ...this.telemetryCollector.telemetryData
340
+ });
341
+ if (data) {
342
+ (0, fiori_generator_shared_1.sendTelemetry)(telemetry_2.EventName.ADAPTATION_PROJECT_CREATED, data, projectPath)
343
+ .then(() => {
344
+ this.logger.log(`Event ${telemetry_2.EventName.ADAPTATION_PROJECT_CREATED} successfully sent`);
345
+ })
346
+ .catch((error) => {
347
+ this.logger.error(`Failed to send telemetry: ${error}`);
332
348
  });
333
349
  }
334
- if (this.isCli || this.isCfEnv) {
350
+ if (this.isCli || this.isCfEnv || this.shouldCreateExtProject) {
335
351
  return;
336
352
  }
337
353
  try {
@@ -364,6 +380,35 @@ class default_1 extends yeoman_generator_1.default {
364
380
  this.logger.log(`Project path information: ${path}`);
365
381
  }
366
382
  }
383
+ /**
384
+ * Collects the telemetry data for the ADP generator.
385
+ */
386
+ _collectTelemetryData() {
387
+ const telemetryData = {
388
+ wasFlpConfigDone: this.attributeAnswers?.addFlpConfig ?? false,
389
+ wasTypeScriptChosen: this.attributeAnswers?.enableTypeScript ?? false,
390
+ wasDeployConfigDone: this.attributeAnswers?.addDeployConfig ?? false,
391
+ wasExtProjectGenerated: this.shouldCreateExtProject ?? false
392
+ };
393
+ if (this.isCfEnv) {
394
+ telemetryData.baseAppTechnicalName = this.cfPrompter?.manifest?.['sap.app']?.id ?? '';
395
+ telemetryData.projectType = 'cf';
396
+ }
397
+ else {
398
+ const isCloud = this.prompter?.isCloud ?? false;
399
+ telemetryData.projectType = isCloud ? 'cloudReady' : 'onPremise';
400
+ telemetryData.baseAppTechnicalName = this.configAnswers?.application?.id ?? '';
401
+ }
402
+ if (this.jsonInput) {
403
+ telemetryData.ui5VersionSelected = (0, adp_tooling_1.getLatestVersion)(this.publicVersions);
404
+ }
405
+ else {
406
+ const version = this.attributeAnswers?.ui5Version ?? (0, adp_tooling_1.getLatestVersion)(this.prompter?.ui5?.publicVersions) ?? '';
407
+ telemetryData.ui5VersionSelected = (0, adp_tooling_1.getFormattedVersion)(version);
408
+ }
409
+ telemetryData.systemUI5Version = this.prompter?.ui5?.systemVersion ?? '';
410
+ this.telemetryCollector.setBatch(telemetryData);
411
+ }
367
412
  /**
368
413
  * Determines the target environment based on the current context.
369
414
  * Sets the target environment and updates related state accordingly.
@@ -430,7 +475,7 @@ class default_1 extends yeoman_generator_1.default {
430
475
  if (cached) {
431
476
  return cached;
432
477
  }
433
- const prompter = new configuration_1.ConfigPrompter(this.systemLookup, this.layer, this.logger);
478
+ const prompter = new configuration_1.ConfigPrompter(this.systemLookup, this.layer, this.logger, this.telemetryCollector);
434
479
  (0, appWizardCache_1.cachePut)(this.appWizard, { prompter }, this.logger);
435
480
  return prompter;
436
481
  }
@@ -440,6 +485,7 @@ class default_1 extends yeoman_generator_1.default {
440
485
  async _generateAdpProjectArtifactsCF() {
441
486
  const projectPath = this.destinationPath();
442
487
  const publicVersions = await (0, adp_tooling_1.fetchPublicVersions)(this.logger);
488
+ this.telemetryCollector.setBatch({ ui5VersionSelected: (0, adp_tooling_1.getLatestVersion)(publicVersions) });
443
489
  const manifest = this.cfPrompter.manifest;
444
490
  if (!manifest) {
445
491
  throw new Error('Manifest not found for base app.');
@@ -459,7 +505,9 @@ class default_1 extends yeoman_generator_1.default {
459
505
  backendUrl,
460
506
  oauthPaths,
461
507
  projectPath,
462
- publicVersions
508
+ publicVersions,
509
+ packageJson: (0, deps_1.getPackageInfo)(),
510
+ toolsId: this.toolsId
463
511
  });
464
512
  if (config.options) {
465
513
  config.options.templatePathOverwrite = (0, templates_1.getTemplatesOverwritePath)();
@@ -475,6 +523,9 @@ class default_1 extends yeoman_generator_1.default {
475
523
  if (this.isCfEnv) {
476
524
  return (0, node_path_1.join)(this.destinationPath(), this.attributeAnswers.projectName);
477
525
  }
526
+ if (this.shouldCreateExtProject) {
527
+ return (0, node_path_1.join)(process.cwd(), this.attributeAnswers.projectName);
528
+ }
478
529
  return (0, node_path_1.join)(this.attributeAnswers.targetFolder, this.attributeAnswers.projectName);
479
530
  }
480
531
  /**
@@ -507,6 +558,7 @@ class default_1 extends yeoman_generator_1.default {
507
558
  };
508
559
  this.abapProvider = await (0, adp_tooling_1.getConfiguredProvider)(providerOptions, this.logger);
509
560
  const applications = await (0, adp_tooling_1.loadApps)(this.abapProvider, this.isCustomerBase);
561
+ this.telemetryCollector.setBatch({ numberOfApplications: applications.length });
510
562
  const application = applications.find((application) => application.id === baseApplicationName);
511
563
  if (!application) {
512
564
  throw new Error((0, i18n_1.t)('error.applicationNotFound', { appName: baseApplicationName }));
@@ -3,6 +3,7 @@ import { FlexLayer } from '@sap-ux/adp-tooling';
3
3
  import { type AbapServiceProvider } from '@sap-ux/axios-extension';
4
4
  import type { ToolsLogger } from '@sap-ux/logger';
5
5
  import type { Manifest, ManifestNamespace } from '@sap-ux/project-access';
6
+ import type { TelemetryCollector } from '../../telemetry';
6
7
  import type { ConfigPromptOptions, ConfigQuestion } from '../types';
7
8
  /**
8
9
  * A stateful prompter class that creates configuration questions.
@@ -11,6 +12,7 @@ import type { ConfigPromptOptions, ConfigQuestion } from '../types';
11
12
  export declare class ConfigPrompter {
12
13
  private readonly systemLookup;
13
14
  private readonly logger;
15
+ private readonly telemetryCollector;
14
16
  /**
15
17
  * Indicates if the current layer is based on a customer base.
16
18
  */
@@ -139,8 +141,9 @@ export declare class ConfigPrompter {
139
141
  * @param {SystemLookup} systemLookup - The source system class to retrieve system endpoints.
140
142
  * @param {FlexLayer} layer - The FlexLayer used to determine the base (customer or otherwise).
141
143
  * @param {ToolsLogger} logger - Instance of the logger.
144
+ * @param {TelemetryCollector} telemetryCollector - Instance of the telemetry collector.
142
145
  */
143
- constructor(systemLookup: SystemLookup, layer: FlexLayer, logger: ToolsLogger);
146
+ constructor(systemLookup: SystemLookup, layer: FlexLayer, logger: ToolsLogger, telemetryCollector: TelemetryCollector);
144
147
  /**
145
148
  * Retrieves an array of configuration questions based on provided options.
146
149
  * This is the only public method for retrieving prompts.
@@ -19,6 +19,7 @@ const validators_1 = require("./helper/validators");
19
19
  class ConfigPrompter {
20
20
  systemLookup;
21
21
  logger;
22
+ telemetryCollector;
22
23
  /**
23
24
  * Indicates if the current layer is based on a customer base.
24
25
  */
@@ -161,10 +162,12 @@ class ConfigPrompter {
161
162
  * @param {SystemLookup} systemLookup - The source system class to retrieve system endpoints.
162
163
  * @param {FlexLayer} layer - The FlexLayer used to determine the base (customer or otherwise).
163
164
  * @param {ToolsLogger} logger - Instance of the logger.
165
+ * @param {TelemetryCollector} telemetryCollector - Instance of the telemetry collector.
164
166
  */
165
- constructor(systemLookup, layer, logger) {
167
+ constructor(systemLookup, layer, logger, telemetryCollector) {
166
168
  this.systemLookup = systemLookup;
167
169
  this.logger = logger;
170
+ this.telemetryCollector = telemetryCollector;
168
171
  this.isCustomerBase = layer === "CUSTOMER_BASE" /* FlexLayer.CUSTOMER_BASE */;
169
172
  }
170
173
  /**
@@ -467,7 +470,10 @@ class ConfigPrompter {
467
470
  if (typeof validationResult === 'string') {
468
471
  return validationResult;
469
472
  }
473
+ this.telemetryCollector.startTiming('applicationListLoadingTime');
470
474
  this.targetApps = await (0, adp_tooling_1.loadApps)(this.abapProvider, this.isCustomerBase);
475
+ this.telemetryCollector.setBatch({ numberOfApplications: this.targetApps.length });
476
+ this.telemetryCollector.endTiming('applicationListLoadingTime');
471
477
  this.isLoginSuccessful = true;
472
478
  return true;
473
479
  }
@@ -506,7 +512,10 @@ class ConfigPrompter {
506
512
  if (typeof validationResult === 'string') {
507
513
  return validationResult;
508
514
  }
515
+ this.telemetryCollector.startTiming('applicationListLoadingTime');
509
516
  this.targetApps = await (0, adp_tooling_1.loadApps)(this.abapProvider, this.isCustomerBase);
517
+ this.telemetryCollector.setBatch({ numberOfApplications: this.targetApps.length });
518
+ this.telemetryCollector.endTiming('applicationListLoadingTime');
510
519
  }
511
520
  return true;
512
521
  }
@@ -0,0 +1,39 @@
1
+ import type { AdpTelemetryData, AdpTelemetryTimerProperties } from '../types';
2
+ /**
3
+ * Telemetry collector for ADP generator. Tracks telemetry data throughout the generation process.
4
+ */
5
+ export declare class TelemetryCollector {
6
+ /**
7
+ * Map of timing mark names.
8
+ */
9
+ private readonly timingMarkNames;
10
+ /**
11
+ * Telemetry data.
12
+ */
13
+ private readonly data;
14
+ /**
15
+ * Gets the telemetry data.
16
+ *
17
+ * @returns {AdpTelemetryData} The telemetry data.
18
+ */
19
+ get telemetryData(): AdpTelemetryData;
20
+ /**
21
+ * Sets a batch of telemetry data.
22
+ *
23
+ * @param {Partial<AdpTelemetryData>} data - The data to set.
24
+ */
25
+ setBatch(data: Partial<AdpTelemetryData>): void;
26
+ /**
27
+ * Starts timing for a specific timer property. Call endTiming with the same key to record the duration.
28
+ *
29
+ * @param {keyof AdpTelemetryTimerProperties} key - The timer property name that will store the duration (e.g., 'applicationListLoadingTime').
30
+ */
31
+ startTiming(key: keyof AdpTelemetryTimerProperties): void;
32
+ /**
33
+ * Ends timing for a specific timer property and sets the duration in the telemetry data in milliseconds.
34
+ *
35
+ * @param {keyof AdpTelemetryTimerProperties} key - The timer property name where the duration should be stored (must match the key used in startTiming).
36
+ */
37
+ endTiming(key: keyof AdpTelemetryTimerProperties): void;
38
+ }
39
+ //# sourceMappingURL=collector.d.ts.map
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TelemetryCollector = void 0;
4
+ const telemetry_1 = require("@sap-ux/telemetry");
5
+ const DEFAULT_DATA = {
6
+ wasExtProjectGenerated: false,
7
+ wasFlpConfigDone: false,
8
+ wasDeployConfigDone: false,
9
+ wasTypeScriptChosen: false
10
+ };
11
+ /**
12
+ * Telemetry collector for ADP generator. Tracks telemetry data throughout the generation process.
13
+ */
14
+ class TelemetryCollector {
15
+ /**
16
+ * Map of timing mark names.
17
+ */
18
+ timingMarkNames = new Map();
19
+ /**
20
+ * Telemetry data.
21
+ */
22
+ data = { ...DEFAULT_DATA };
23
+ /**
24
+ * Gets the telemetry data.
25
+ *
26
+ * @returns {AdpTelemetryData} The telemetry data.
27
+ */
28
+ get telemetryData() {
29
+ return this.data;
30
+ }
31
+ /**
32
+ * Sets a batch of telemetry data.
33
+ *
34
+ * @param {Partial<AdpTelemetryData>} data - The data to set.
35
+ */
36
+ setBatch(data) {
37
+ Object.assign(this.data, data);
38
+ }
39
+ /**
40
+ * Starts timing for a specific timer property. Call endTiming with the same key to record the duration.
41
+ *
42
+ * @param {keyof AdpTelemetryTimerProperties} key - The timer property name that will store the duration (e.g., 'applicationListLoadingTime').
43
+ */
44
+ startTiming(key) {
45
+ const markName = telemetry_1.PerformanceMeasurementAPI.startMark(key);
46
+ this.timingMarkNames.set(key, markName);
47
+ }
48
+ /**
49
+ * Ends timing for a specific timer property and sets the duration in the telemetry data in milliseconds.
50
+ *
51
+ * @param {keyof AdpTelemetryTimerProperties} key - The timer property name where the duration should be stored (must match the key used in startTiming).
52
+ */
53
+ endTiming(key) {
54
+ const markName = this.timingMarkNames.get(key);
55
+ if (markName !== undefined) {
56
+ telemetry_1.PerformanceMeasurementAPI.endMark(markName);
57
+ telemetry_1.PerformanceMeasurementAPI.measure(markName);
58
+ const duration = telemetry_1.PerformanceMeasurementAPI.getMeasurementDuration(markName);
59
+ this.setBatch({ [key]: duration });
60
+ this.timingMarkNames.delete(key);
61
+ }
62
+ }
63
+ }
64
+ exports.TelemetryCollector = TelemetryCollector;
65
+ //# sourceMappingURL=collector.js.map
@@ -4,4 +4,4 @@
4
4
  export declare enum EventName {
5
5
  ADAPTATION_PROJECT_CREATED = "ADAPTATION_PROJECT_CREATED"
6
6
  }
7
- //# sourceMappingURL=index.d.ts.map
7
+ //# sourceMappingURL=events.d.ts.map
@@ -8,4 +8,4 @@ var EventName;
8
8
  (function (EventName) {
9
9
  EventName["ADAPTATION_PROJECT_CREATED"] = "ADAPTATION_PROJECT_CREATED";
10
10
  })(EventName || (exports.EventName = EventName = {}));
11
- //# sourceMappingURL=index.js.map
11
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1,3 @@
1
+ export * from './collector';
2
+ export * from './events';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./collector"), exports);
18
+ __exportStar(require("./events"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -8,4 +8,59 @@ export interface Credentials {
8
8
  username: string;
9
9
  password: string;
10
10
  }
11
+ /**
12
+ * Properties that can be timed (duration measurements in milliseconds).
13
+ */
14
+ export interface AdpTelemetryTimerProperties {
15
+ /**
16
+ * Application list loading time in milliseconds.
17
+ */
18
+ applicationListLoadingTime?: number;
19
+ }
20
+ /**
21
+ * Regular telemetry data properties (non-timing).
22
+ */
23
+ export interface AdpTelemetryProperties {
24
+ /**
25
+ * Project type: onprem, cloud, or cf.
26
+ */
27
+ projectType?: 'onPremise' | 'cloudReady' | 'cf';
28
+ /**
29
+ * Base app technical name (SAP app ID).
30
+ */
31
+ baseAppTechnicalName?: string;
32
+ /**
33
+ * UI5 version selected by the user.
34
+ */
35
+ ui5VersionSelected?: string;
36
+ /**
37
+ * System UI5 version detected.
38
+ */
39
+ systemUI5Version?: string;
40
+ /**
41
+ * Number of applications in the list.
42
+ */
43
+ numberOfApplications?: number;
44
+ /**
45
+ * Whether an extension project was generated.
46
+ */
47
+ wasExtProjectGenerated: boolean;
48
+ /**
49
+ * Whether FLP configuration was done during initial generation.
50
+ */
51
+ wasFlpConfigDone: boolean;
52
+ /**
53
+ * Whether deploy configuration was done during initial generation.
54
+ */
55
+ wasDeployConfigDone: boolean;
56
+ /**
57
+ * Whether TypeScript was chosen.
58
+ */
59
+ wasTypeScriptChosen: boolean;
60
+ }
61
+ /**
62
+ * Complete telemetry data collected throughout the ADP generation process.
63
+ */
64
+ export interface AdpTelemetryData extends AdpTelemetryProperties, AdpTelemetryTimerProperties {
65
+ }
11
66
  //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "displayName": "SAPUI5 Adaptation Project",
4
4
  "homepage": "https://help.sap.com/viewer/584e0bcbfd4a4aff91c815cefa0bce2d/Cloud/en-US/ada9567b767941aba8d49fdb4fdedea7.html",
5
5
  "description": "Adaptation project allows you to create an app variant for an existing SAP Fiori elements-based or SAPUI5 freestyle application, without changing the original application.",
6
- "version": "0.7.21",
6
+ "version": "0.7.24",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "https://github.com/SAP/open-ux-tools.git",
@@ -30,18 +30,19 @@
30
30
  "i18next": "25.3.0",
31
31
  "yeoman-generator": "5.10.0",
32
32
  "uuid": "10.0.0",
33
- "@sap-ux/adp-tooling": "0.18.21",
34
- "@sap-ux/axios-extension": "1.24.6",
33
+ "@sap-ux/adp-tooling": "0.18.24",
34
+ "@sap-ux/axios-extension": "1.25.0",
35
35
  "@sap-ux/btp-utils": "1.1.6",
36
36
  "@sap-ux/feature-toggle": "0.3.5",
37
- "@sap-ux/inquirer-common": "0.9.16",
37
+ "@sap-ux/inquirer-common": "0.10.0",
38
38
  "@sap-ux/logger": "0.7.2",
39
39
  "@sap-ux/project-access": "1.32.16",
40
- "@sap-ux/store": "1.3.5",
41
- "@sap-ux/system-access": "0.6.32",
40
+ "@sap-ux/store": "1.4.0",
41
+ "@sap-ux/system-access": "0.6.34",
42
42
  "@sap-ux/project-input-validator": "0.6.38",
43
- "@sap-ux/fiori-generator-shared": "0.13.43",
44
- "@sap-ux/odata-service-writer": "0.27.38"
43
+ "@sap-ux/fiori-generator-shared": "0.13.44",
44
+ "@sap-ux/odata-service-writer": "0.28.0",
45
+ "@sap-ux/telemetry": "0.6.48"
45
46
  },
46
47
  "devDependencies": {
47
48
  "@jest/types": "30.0.1",
@@ -56,7 +57,7 @@
56
57
  "fs-extra": "10.0.0",
57
58
  "rimraf": "6.0.1",
58
59
  "yeoman-test": "6.3.0",
59
- "@sap-ux/deploy-config-sub-generator": "0.5.19"
60
+ "@sap-ux/deploy-config-sub-generator": "0.5.22"
60
61
  },
61
62
  "engines": {
62
63
  "node": ">=20.x"