From 609732b7119caaa206325e192bf665c6c8562ef6 Mon Sep 17 00:00:00 2001 From: Sonarly Claude Code Date: Thu, 26 Mar 2026 12:09:44 +0000 Subject: [PATCH] fix: handle plain string SELECT filter values in arrayOfStringsOrVariablesSchema https://sonarly.com/issue/18660?type=bug A SELECT-type view filter with a plain string value (not a JSON array) causes a `JSON.parse` crash when loading the People record table, because `arrayOfStringsOrVariablesSchema` has no fallback for non-JSON, non-variable string values. --- .../arrayOfStringsOrVariablesSchema.test.ts | 23 +++++++++++++++++++ .../arrayOfStringsOrVariablesSchema.ts | 6 ++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/twenty-shared/src/utils/filter/utils/__tests__/arrayOfStringsOrVariablesSchema.test.ts b/packages/twenty-shared/src/utils/filter/utils/__tests__/arrayOfStringsOrVariablesSchema.test.ts index bb646b3649c..8435fb2d103 100644 --- a/packages/twenty-shared/src/utils/filter/utils/__tests__/arrayOfStringsOrVariablesSchema.test.ts +++ b/packages/twenty-shared/src/utils/filter/utils/__tests__/arrayOfStringsOrVariablesSchema.test.ts @@ -61,6 +61,29 @@ describe('arrayOfStringsOrVariablesSchema', () => { }); }); + describe('Legacy plain string handling', () => { + it('should wrap plain string values in an array', () => { + const plainStrings = ['Privat', 'Work', 'some-option-value']; + + plainStrings.forEach((str) => { + const result = arrayOfStringsOrVariablesSchema.safeParse(str); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data).toEqual([str]); + } + }); + }); + + it('should handle plain string with special characters', () => { + const result = + arrayOfStringsOrVariablesSchema.safeParse('Privat & Geschäftlich'); + expect(result.success).toBe(true); + if (result.success) { + expect(result.data).toEqual(['Privat & Geschäftlich']); + } + }); + }); + describe('Edge cases', () => { it('should handle whitespace in variable syntax', () => { const result = diff --git a/packages/twenty-shared/src/utils/filter/utils/validation-schemas/arrayOfStringsOrVariablesSchema.ts b/packages/twenty-shared/src/utils/filter/utils/validation-schemas/arrayOfStringsOrVariablesSchema.ts index 17690b44766..56c2515cf59 100644 --- a/packages/twenty-shared/src/utils/filter/utils/validation-schemas/arrayOfStringsOrVariablesSchema.ts +++ b/packages/twenty-shared/src/utils/filter/utils/validation-schemas/arrayOfStringsOrVariablesSchema.ts @@ -8,7 +8,11 @@ export const arrayOfStringsOrVariablesSchema = z if (isValidVariable(val) as boolean) { return [val]; } - return JSON.parse(val); + try { + return JSON.parse(val); + } catch { + return [val]; + } }) .refine( (parsed) =>