From 1baff46510d3bbeafb618a67ebaf2785bc9c0514 Mon Sep 17 00:00:00 2001 From: kitzkan Date: Fri, 7 Feb 2025 11:10:34 +0000 Subject: [PATCH] Add error handling write annotation (#2886) * Add error handling to fiori elements writer while generating annotations * changeset * test --------- Co-authored-by: Austin Devine --- .changeset/seven-carrots-sparkle.md | 5 +++++ .../translations/fiori-elements-writer.i18n.json | 3 ++- .../fiori-elements-writer/src/writeAnnotations.ts | 7 +++++-- .../test/unit/writeAnnotations.test.ts | 15 ++++++++++++++- 4 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 .changeset/seven-carrots-sparkle.md diff --git a/.changeset/seven-carrots-sparkle.md b/.changeset/seven-carrots-sparkle.md new file mode 100644 index 0000000000..42c63fd0f8 --- /dev/null +++ b/.changeset/seven-carrots-sparkle.md @@ -0,0 +1,5 @@ +--- +'@sap-ux/fiori-elements-writer': patch +--- + +Add error handling to fiori elements writer while generating annotations diff --git a/packages/fiori-elements-writer/src/translations/fiori-elements-writer.i18n.json b/packages/fiori-elements-writer/src/translations/fiori-elements-writer.i18n.json index e650f4f5d4..072191faf9 100644 --- a/packages/fiori-elements-writer/src/translations/fiori-elements-writer.i18n.json +++ b/packages/fiori-elements-writer/src/translations/fiori-elements-writer.i18n.json @@ -9,6 +9,7 @@ "unsupportedOdataVersion": "OData Version of the specified service: {{ serviceVersion }}, is not supported by the template type: {{ templateType }}", "unsupportedUI5Version": "Specified UI5 property '{{ versionProperty }}': {{ ui5Version }}, is not supported by the template type: {{ templateType }}. Please specify {{minRequiredUI5Version}} or above.", "invalidUI5Version": "Specified UI5 property '{{ versionProperty }}': {{ ui5Version }}, is not a valid semantic version", - "missingRequiredProperty": "A property required for application generation is not specified: '{{ propertyName }}'." + "missingRequiredProperty": "A property required for application generation is not specified: '{{ propertyName }}'.", + "errorGeneratingDefaultAnnotations": "Error generating default annotations" } } diff --git a/packages/fiori-elements-writer/src/writeAnnotations.ts b/packages/fiori-elements-writer/src/writeAnnotations.ts index 48110b9bf0..4874885bd2 100644 --- a/packages/fiori-elements-writer/src/writeAnnotations.ts +++ b/packages/fiori-elements-writer/src/writeAnnotations.ts @@ -71,8 +71,11 @@ export async function writeAnnotations( appName: packageName, project: projectPath }; - - await generateAnnotations(fs, serviceParameters, options); + try { + await generateAnnotations(fs, serviceParameters, options); + } catch (err) { + log?.error(`${t('error.errorGeneratingDefaultAnnotations')} ${err}`); + } } else { log?.warn( t('warn.invalidTypeForAnnotationGeneration', { diff --git a/packages/fiori-elements-writer/test/unit/writeAnnotations.test.ts b/packages/fiori-elements-writer/test/unit/writeAnnotations.test.ts index b741f45a18..2bb6f81fdd 100644 --- a/packages/fiori-elements-writer/test/unit/writeAnnotations.test.ts +++ b/packages/fiori-elements-writer/test/unit/writeAnnotations.test.ts @@ -1,10 +1,11 @@ import { join } from 'path'; import { writeAnnotations } from '../../src/writeAnnotations'; import { TemplateType } from '../../src/types'; -import { OdataVersion } from '@sap-ux/odata-service-writer'; import { generateAnnotations } from '@sap-ux/annotation-generator'; import type { Editor } from 'mem-fs-editor'; import { applyBaseConfigToFEApp } from '../common'; +import type { Logger } from '@sap-ux/logger'; +import { t } from '../../src/i18n'; jest.mock('@sap-ux/annotation-generator', () => ({ ...jest.requireActual('@sap-ux/annotation-generator'), @@ -75,4 +76,16 @@ describe('writeAnnotations', () => { } ); }); + + it('should exit gracefully and log an error when generateAnnotations fails', async () => { + const log = { + error: jest.fn() + }; + const appInfo = applyBaseConfigToFEApp('test', TemplateType.ListReportObjectPage); + appInfo.appOptions.addAnnotations = true; + delete appInfo.service.capService; + (generateAnnotations as jest.Mock).mockRejectedValue(new Error('test error')); + await writeAnnotations('test', appInfo, fs, log as unknown as Logger); + expect(log.error).toHaveBeenCalledWith(`${t('error.errorGeneratingDefaultAnnotations')} Error: test error`); + }); });