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 }) + }) +})