From ad46158317c1487dcecf67e7c568aa77dcff5eef Mon Sep 17 00:00:00 2001 From: Henry Su Date: Wed, 26 Aug 2026 19:44:31 -0500 Subject: [PATCH] fix(roles): preserve equals signs in config values Signed-off-by: Henry Su --- src/lib/PostgresMetaRoles.ts | 4 +++- test/roles-config.test.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test/roles-config.test.ts diff --git a/src/lib/PostgresMetaRoles.ts b/src/lib/PostgresMetaRoles.ts index f25a851d..c4de018b 100644 --- a/src/lib/PostgresMetaRoles.ts +++ b/src/lib/PostgresMetaRoles.ts @@ -24,7 +24,9 @@ export function changeRoleConfig2Object(config: string[]) { return null } return config.reduce((acc: any, cur) => { - const [key, value] = cur.split('=') + const separator = cur.indexOf('=') + const key = separator === -1 ? cur : cur.slice(0, separator) + const value = separator === -1 ? undefined : cur.slice(separator + 1) acc[key] = value return acc }, {}) diff --git a/test/roles-config.test.ts b/test/roles-config.test.ts new file mode 100644 index 00000000..05763492 --- /dev/null +++ b/test/roles-config.test.ts @@ -0,0 +1,15 @@ +import { describe, expect, test } from 'vitest' +import { changeRoleConfig2Object } from '../src/lib/PostgresMetaRoles.js' + +describe('changeRoleConfig2Object', () => { + test('preserves equals signs within role config values', () => { + expect(changeRoleConfig2Object(['application_name=api=worker', 'search_path=public'])).toEqual({ + application_name: 'api=worker', + search_path: 'public', + }) + }) + + test('preserves existing parsing for entries without a separator', () => { + expect(changeRoleConfig2Object(['search_path'])).toEqual({ search_path: undefined }) + }) +})