diff --git a/packages/json/lib/commands/MERGE.spec.ts b/packages/json/lib/commands/MERGE.spec.ts new file mode 100644 index 0000000000..fbb84aaaeb --- /dev/null +++ b/packages/json/lib/commands/MERGE.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import MERGE from './MERGE'; + +describe('MERGE', () => { + it('transformArguments', () => { + assert.deepEqual( + MERGE.transformArguments('key', '$', 'value'), + ['JSON.MERGE', 'key', '$', 'value'] + ); + }); + + testUtils.testWithClient('client.json.merge', async client => { + assert.equal( + await client.json.merge('key', '$', 'value'), + 'OK' + ); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/json/lib/commands/MERGE.ts b/packages/json/lib/commands/MERGE.ts new file mode 100644 index 0000000000..90cd080a06 --- /dev/null +++ b/packages/json/lib/commands/MERGE.ts @@ -0,0 +1,16 @@ +import { SimpleStringReply, Command, RedisArgument } from '@redis/client/dist/lib/RESP/types'; +import { RedisJSON, transformRedisJsonArgument } from '.'; + +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, + transformArguments(key: RedisArgument, path: RedisArgument, value: RedisJSON) { + return [ + 'JSON.MERGE', + key, + path, + transformRedisJsonArgument(value) + ]; + }, + transformReply: undefined as unknown as () => SimpleStringReply<'OK'> +} as const satisfies Command; diff --git a/packages/json/lib/commands/index.ts b/packages/json/lib/commands/index.ts index 7fad5d1769..5404da74f7 100644 --- a/packages/json/lib/commands/index.ts +++ b/packages/json/lib/commands/index.ts @@ -9,6 +9,7 @@ import DEBUG_MEMORY from './DEBUG_MEMORY'; import DEL from './DEL'; import FORGET from './FORGET'; // import GET from './GET'; +import MERGE from './MERGE'; // import MGET from './MGET'; import MSET from './MSET'; import NUMINCRBY from './NUMINCRBY'; @@ -45,6 +46,8 @@ export default { forget: FORGET, // GET, // get: GET, + MERGE, + merge: MERGE, // MGET, // mGet: MGET, MSET,