From cdc524f504a8cc56e291bbae570584dd59fcbb8c Mon Sep 17 00:00:00 2001 From: Felix-Ayush <67006255+Ayush7614@users.noreply.github.com> Date: Wed, 9 Sep 2026 11:00:02 +0530 Subject: [PATCH] fix(puter-js): preserve zero amount in kv incr/decr (#3802) parseCounterArgs used a falsy check, so incr(key, 0) sent amount 1. Only default when amount is undefined/null. --- src/puter-js/src/modules/kv/kv.test.js | 10 ++++++++++ src/puter-js/src/modules/kv/lib/args.js | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/puter-js/src/modules/kv/kv.test.js b/src/puter-js/src/modules/kv/kv.test.js index a591743ec..059d7e065 100644 --- a/src/puter-js/src/modules/kv/kv.test.js +++ b/src/puter-js/src/modules/kv/kv.test.js @@ -278,6 +278,11 @@ describe('kv.incr / kv.decr driver payloads', () => { expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { '': 5 } }); }); + it('incr(key, 0) preserves a zero amount instead of defaulting to 1', async () => { + await kv.incr('n', 0); + expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { '': 0 } }); + }); + it('incr(key, pathAndAmountMap) passes the map through', async () => { await kv.incr('n', { 'user.score': 2 }); expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { 'user.score': 2 } }); @@ -326,6 +331,11 @@ describe('kv.incr / kv.decr driver payloads', () => { await kv.decr('n', 4); expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { '': 4 } }); }); + + it('decr(key, 0) preserves a zero amount instead of defaulting to 1', async () => { + await kv.decr('n', 0); + expect(lastBody().args).toEqual({ key: 'n', pathAndAmountMap: { '': 0 } }); + }); }); describe('kv.add driver payloads', () => { diff --git a/src/puter-js/src/modules/kv/lib/args.js b/src/puter-js/src/modules/kv/lib/args.js index 94b38a219..335906869 100644 --- a/src/puter-js/src/modules/kv/lib/args.js +++ b/src/puter-js/src/modules/kv/lib/args.js @@ -63,7 +63,7 @@ export const parseCounterArgs = (keyOrOptions, amountOrMap, optConfig) => { } return { key: keyOrOptions, - pathAndAmountMap: !amountOrMap ? { '': 1 } : typeof amountOrMap === 'number' ? { '': amountOrMap } : amountOrMap, + pathAndAmountMap: amountOrMap === undefined || amountOrMap === null ? { '': 1 } : typeof amountOrMap === 'number' ? { '': amountOrMap } : amountOrMap, optConfig, }; };