diff --git a/packages/json/lib/commands/MSET.spec.ts b/packages/json/lib/commands/MSET.spec.ts new file mode 100644 index 0000000000..53d4d82250 --- /dev/null +++ b/packages/json/lib/commands/MSET.spec.ts @@ -0,0 +1,35 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments } from './MSET'; + +describe('MSET', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments([{ + key: '1', + path: '$', + value: 1 + }, { + key: '2', + path: '$', + value: '2' + }]), + ['JSON.MSET', '1', '$', '1', '2', '$', '"2"'] + ); + }); + + testUtils.testWithClient('client.json.mSet', async client => { + assert.deepEqual( + await client.json.mSet([{ + key: '1', + path: '$', + value: 1 + }, { + key: '2', + path: '$', + value: '2' + }]), + 'OK' + ); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/json/lib/commands/MSET.ts b/packages/json/lib/commands/MSET.ts new file mode 100644 index 0000000000..67228f264d --- /dev/null +++ b/packages/json/lib/commands/MSET.ts @@ -0,0 +1,28 @@ +import { RedisJSON, transformRedisJsonArgument } from '.'; +import { RedisCommandArgument } from '@redis/client/dist/lib/commands'; + +export const FIRST_KEY_INDEX = 1; + +interface JsonMSetItem { + key: RedisCommandArgument; + path: RedisCommandArgument; + value: RedisJSON; +} + +export function transformArguments(items: Array): Array { + + const args = new Array(1 + items.length * 3); + args[0] = 'JSON.MSET'; + + let argsIndex = 1; + for (let i = 0; i < items.length; i++) { + const item = items[i]; + args[argsIndex++] = item.key; + args[argsIndex++] = item.path; + args[argsIndex++] = transformRedisJsonArgument(item.value); + } + + return args; +} + +export declare function transformReply(): 'OK'; diff --git a/packages/json/lib/commands/index.ts b/packages/json/lib/commands/index.ts index 6769594ad5..7fad5d1769 100644 --- a/packages/json/lib/commands/index.ts +++ b/packages/json/lib/commands/index.ts @@ -1,15 +1,16 @@ import ARRAPPEND from './ARRAPPEND'; import ARRINDEX from './ARRINDEX'; import ARRINSERT from './ARRINSERT'; -import CLEAR from './CLEAR'; import ARRLEN from './ARRLEN'; // import ARRPOP from './ARRPOP'; import ARRTRIM from './ARRTRIM'; +import CLEAR from './CLEAR'; import DEBUG_MEMORY from './DEBUG_MEMORY'; import DEL from './DEL'; import FORGET from './FORGET'; // import GET from './GET'; // import MGET from './MGET'; +import MSET from './MSET'; import NUMINCRBY from './NUMINCRBY'; import NUMMULTBY from './NUMMULTBY'; import OBJKEYS from './OBJKEYS'; @@ -28,14 +29,14 @@ export default { arrIndex: ARRINDEX, ARRINSERT, arrInsert: ARRINSERT, - CLEAR, - clear: CLEAR, ARRLEN, arrLen: ARRLEN, // ARRPOP, // arrPop: ARRPOP, ARRTRIM, arrTrim: ARRTRIM, + CLEAR, + clear: CLEAR, DEBUG_MEMORY, debugMemory: DEBUG_MEMORY, DEL, @@ -46,6 +47,8 @@ export default { // get: GET, // MGET, // mGet: MGET, + MSET, + mSet: MSET, NUMINCRBY, numIncrBy: NUMINCRBY, NUMMULTBY,