diff --git a/docs/v4-to-v5.md b/docs/v4-to-v5.md index 6c77ca2684..e1d67a9d0f 100644 --- a/docs/v4-to-v5.md +++ b/docs/v4-to-v5.md @@ -178,7 +178,7 @@ Some command arguments/replies have changed to align more closely to data types - `TOPK.QUERY`: `Array` -> `Array` - `GRAPH.SLOWLOG`: `timestamp` has been changed from `Date` to `number` - `JSON.ARRINDEX`: `start` and `end` arguments moved to `{ range: { start: number; end: number; }; }` [^future-proofing] -- `JSON.ARRLEN`, `JSON.CLEAR`, `JSON.DEBUG MEMORY`, `JSON.DEL`, `JSON.FORGET`, `JSON.OBJKEYS`, `JSON.OBJLEN`, `JSON.STRLEN`, `JSON.TYPE`: `path` argument moved to `{ path: string; }` [^future-proofing] +- `JSON.ARRLEN`, `JSON.CLEAR`, `JSON.DEBUG MEMORY`, `JSON.DEL`, `JSON.FORGET`, `JSON.OBJKEYS`, `JSON.OBJLEN`, `JSON.STRAPPEND`, `JSON.STRLEN`, `JSON.TYPE`: `path` argument moved to `{ path: string; }` [^future-proofing] - : `path` argument moved to `{ path: string; }` [^future-proofing] - `TS.[M][REV]RANGE`: `enum TimeSeriesBucketTimestamp` -> `const TIME_SERIES_BUCKET_TIMESTAMP` [^enum-to-constants], `enum TimeSeriesReducers` -> `const TIME_SERIES_REDUCERS` [^enum-to-constants], the `ALIGN` argument has been moved into `AGGREGRATION` - `TS.SYNUPDATE`: `Array>` -> `Record>` diff --git a/packages/json/lib/commands/STRAPPEND.spec.ts b/packages/json/lib/commands/STRAPPEND.spec.ts index 06e6b60b10..8927ce8461 100644 --- a/packages/json/lib/commands/STRAPPEND.spec.ts +++ b/packages/json/lib/commands/STRAPPEND.spec.ts @@ -1,30 +1,32 @@ -// import { strict as assert } from 'assert'; -// import testUtils, { GLOBAL } from '../test-utils'; -// import { transformArguments } from './STRAPPEND'; +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import STRAPPEND from './STRAPPEND'; -// describe('STRAPPEND', () => { -// describe('transformArguments', () => { -// it('without path', () => { -// assert.deepEqual( -// transformArguments('key', 'append'), -// ['JSON.STRAPPEND', 'key', '"append"'] -// ); -// }); +describe('JSON.STRAPPEND', () => { + describe('transformArguments', () => { + it('simple', () => { + assert.deepEqual( + STRAPPEND.transformArguments('key', 'append'), + ['JSON.STRAPPEND', 'key', '"append"'] + ); + }); -// it('with path', () => { -// assert.deepEqual( -// transformArguments('key', '$', 'append'), -// ['JSON.STRAPPEND', 'key', '$', '"append"'] -// ); -// }); -// }); + it('with path', () => { + assert.deepEqual( + STRAPPEND.transformArguments('key', 'append', { + path: '$' + }), + ['JSON.STRAPPEND', 'key', '$', '"append"'] + ); + }); + }); -// testUtils.testWithClient('client.json.strAppend', async client => { -// await client.json.set('key', '$', ''); + testUtils.testWithClient('client.json.strAppend', async client => { + const [, reply] = await Promise.all([ + client.json.set('key', '$', ''), + client.json.strAppend('key', 'append') + ]); -// assert.deepEqual( -// await client.json.strAppend('key', '$', 'append'), -// [6] -// ); -// }, GLOBAL.SERVERS.OPEN); -// }); + assert.deepEqual(reply, 6); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/json/lib/commands/STRAPPEND.ts b/packages/json/lib/commands/STRAPPEND.ts index 3f8e98e6bc..ad3cd377c9 100644 --- a/packages/json/lib/commands/STRAPPEND.ts +++ b/packages/json/lib/commands/STRAPPEND.ts @@ -1,32 +1,21 @@ -// import { transformRedisJsonArgument } from '.'; +import { RedisArgument, Command, NullReply, NumberReply, ArrayReply } from '@redis/client/dist/lib/RESP/types'; -// export const FIRST_KEY_INDEX = 1; - -// type AppendArguments = [key: string, append: string]; - -// type AppendWithPathArguments = [key: string, path: string, append: string]; - -// export function transformArguments(...[key, pathOrAppend, append]: AppendArguments | AppendWithPathArguments): Array { -// const args = ['JSON.STRAPPEND', key]; - -// if (append !== undefined && append !== null) { -// args.push(pathOrAppend, transformRedisJsonArgument(append)); -// } else { -// args.push(transformRedisJsonArgument(pathOrAppend)); -// } - -// return args; -// } - -// export declare function transformReply(): number | Array; - -import { SimpleStringReply, Command } from '@redis/client/dist/lib/RESP/types'; +export interface JsonStrAppendOptions { + path?: RedisArgument; +} export default { FIRST_KEY_INDEX: 1, IS_READ_ONLY: false, - transformArguments() { - return ['JSON.STRAPPEND']; + transformArguments(key: RedisArgument, append: RedisArgument, options?: JsonStrAppendOptions) { + const args = ['JSON.STRAPPEND', key]; + + if (options?.path) { + args.push(options.path); + } + + args.push(append); + return args; }, - transformReply: undefined as unknown as () => SimpleStringReply + transformReply: undefined as unknown as () => NumberReply | ArrayReply } as const satisfies Command;