diff --git a/packages/cli/src/commands/config-payments.ts b/packages/cli/src/commands/config-payments.ts index f2b45c7f..67a36d38 100644 --- a/packages/cli/src/commands/config-payments.ts +++ b/packages/cli/src/commands/config-payments.ts @@ -123,9 +123,8 @@ function findMatchingBrace(source: string, open: number): number { let quote: '"' | "'" | '`' | undefined; for (let i = open; i < source.length; i += 1) { const ch = source[i]; - const prev = source[i - 1]; if (quote) { - if (ch === quote && prev !== '\\') quote = undefined; + if (ch === quote && !isEscaped(source, i)) quote = undefined; continue; } if (ch === '"' || ch === "'" || ch === '`') { diff --git a/packages/cli/src/commands/config.test.ts b/packages/cli/src/commands/config.test.ts index 4887e57d..417a25c8 100644 --- a/packages/cli/src/commands/config.test.ts +++ b/packages/cli/src/commands/config.test.ts @@ -109,4 +109,26 @@ describe('parsePaymentsSummary', () => { expect(summary?.platformFeeBps).toBeUndefined(); }); + + it('parses providers after a string ending with an escaped backslash', () => { + const summary = parsePaymentsSummary(` + export default defineConfig({ + payments: { + defaultProvider: 'stripe', + providers: { + coinpay: { + use: 'payment-coinpay', + config: { outputDirectory: 'C:\\\\payments\\\\' }, + }, + stripe: { use: 'payment-stripe' }, + }, + }, + }); + `); + + expect(summary?.providers).toEqual([ + { key: 'coinpay', use: 'payment-coinpay', enabled: true, isDefault: false }, + { key: 'stripe', use: 'payment-stripe', enabled: true, isDefault: true }, + ]); + }); });