From fad026fc4510d4d8c1b12ead86a1254d4845d3fc Mon Sep 17 00:00:00 2001 From: Akos Kitta <1405703+kittaakos@users.noreply.github.com> Date: Tue, 24 May 2022 20:11:04 +0200 Subject: [PATCH] Make the preference schema validation optional (#11189) It costs time at startup and it only logs warnings. Can be disabled with the `validatePreferencesSchema` fronted app config. Signed-off-by: Akos Kitta --- .../application-package/src/application-props.ts | 11 ++++++++++- .../browser/preferences/preference-contribution.ts | 8 +++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/dev-packages/application-package/src/application-props.ts b/dev-packages/application-package/src/application-props.ts index 683b9a77e19a6..df9b85f55126d 100644 --- a/dev-packages/application-package/src/application-props.ts +++ b/dev-packages/application-package/src/application-props.ts @@ -55,7 +55,8 @@ export namespace FrontendApplicationConfig { defaultTheme: 'dark', defaultIconTheme: 'none', electron: ElectronFrontendApplicationConfig.DEFAULT, - defaultLocale: '' + defaultLocale: '', + validatePreferencesSchema: true }; export interface Partial extends ApplicationConfig { @@ -93,6 +94,14 @@ export namespace FrontendApplicationConfig { * Defaults to "". */ readonly defaultLocale?: string; + + /** + * When `true`, the application will validate the JSON schema of the preferences on start + * and log warnings to the console if the schema is not valid. + * + * Defaults to `true`. + */ + readonly validatePreferencesSchema?: boolean; } } diff --git a/packages/core/src/browser/preferences/preference-contribution.ts b/packages/core/src/browser/preferences/preference-contribution.ts index ad8577f2a3fec..cd5148a002870 100644 --- a/packages/core/src/browser/preferences/preference-contribution.ts +++ b/packages/core/src/browser/preferences/preference-contribution.ts @@ -188,13 +188,19 @@ export class PreferenceSchemaProvider extends PreferenceProvider { return inverseChanges; } - protected doSetSchema(schema: PreferenceSchema): PreferenceProviderDataChange[] { + protected validateSchema(schema: PreferenceSchema): void { const ajv = new Ajv(); const valid = ajv.validateSchema(schema); if (!valid) { const errors = !!ajv.errors ? ajv.errorsText(ajv.errors) : 'unknown validation error'; console.warn('A contributed preference schema has validation issues : ' + errors); } + } + + protected doSetSchema(schema: PreferenceSchema): PreferenceProviderDataChange[] { + if (FrontendApplicationConfigProvider.get().validatePreferencesSchema) { + this.validateSchema(schema); + } const scope = PreferenceScope.Default; const domain = this.getDomain(); const changes: PreferenceProviderDataChange[] = [];