1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-06 02:15:48 +03:00

JSON commands

This commit is contained in:
dovi
2023-07-10 16:46:57 -04:00
parent 306fa6024d
commit 75fc5a92d1
14 changed files with 229 additions and 175 deletions

View File

@@ -1,19 +1,19 @@
import { strict as assert } from 'assert';
import testUtils, { GLOBAL } from '../test-utils';
import { transformArguments } from './ARRINSERT';
import ARRINSERT from './ARRINSERT';
describe('ARRINSERT', () => {
describe('transformArguments', () => {
it('single JSON', () => {
assert.deepEqual(
transformArguments('key', '$', 0, 'json'),
ARRINSERT.transformArguments('key', '$', 0, 'json'),
['JSON.ARRINSERT', 'key', '$', '0', '"json"']
);
});
it('multiple JSONs', () => {
assert.deepEqual(
transformArguments('key', '$', 0, '1', '2'),
ARRINSERT.transformArguments('key', '$', 0, '1', '2'),
['JSON.ARRINSERT', 'key', '$', '0', '"1"', '"2"']
);
});

View File

@@ -1,8 +1,10 @@
import { RedisArgument, ArrayReply, NumberReply, NullReply, Command } from '@redis/client/dist/lib/RESP/types';
import { RedisJSON, transformRedisJsonArgument } from '.';
export const FIRST_KEY_INDEX = 1;
export function transformArguments(key: string, path: string, index: number, ...jsons: Array<RedisJSON>): Array<string> {
export default {
FIRST_KEY_INDEX: 1,
IS_READ_ONLY: false,
transformArguments(key: RedisArgument, path: RedisArgument, index: number, ...jsons: Array<RedisJSON>) {
const args = ['JSON.ARRINSERT', key, path, index.toString()];
for (const json of jsons) {
@@ -10,6 +12,6 @@ export function transformArguments(key: string, path: string, index: number, ...
}
return args;
}
export declare function transformReply(): number | Array<number>;
},
transformReply: undefined as unknown as () => NumberReply | NullReply | ArrayReply<NumberReply | NullReply>
} as const satisfies Command;

View File

@@ -1,19 +1,19 @@
import { strict as assert } from 'assert';
import testUtils, { GLOBAL } from '../test-utils';
import { transformArguments } from './ARRLEN';
import ARRLEN from './ARRLEN';
describe('ARRLEN', () => {
describe('transformArguments', () => {
it('without path', () => {
assert.deepEqual(
transformArguments('key'),
ARRLEN.transformArguments('key'),
['JSON.ARRLEN', 'key']
);
});
it('with path', () => {
assert.deepEqual(
transformArguments('key', '$'),
ARRLEN.transformArguments('key', '$'),
['JSON.ARRLEN', 'key', '$']
);
});

View File

@@ -1,8 +1,9 @@
export const FIRST_KEY_INDEX = 1;
import { RedisArgument, ArrayReply, NumberReply, NullReply, Command } from '@redis/client/dist/lib/RESP/types';
export const IS_READ_ONLY = true;
export function transformArguments(key: string, path?: string): Array<string> {
export default {
FIRST_KEY_INDEX: 1,
IS_READ_ONLY: true,
transformArguments(key: RedisArgument, path?: RedisArgument) {
const args = ['JSON.ARRLEN', key];
if (path) {
@@ -10,6 +11,6 @@ export function transformArguments(key: string, path?: string): Array<string> {
}
return args;
}
export declare function transformReply(): number | Array<number>;
},
transformReply: undefined as unknown as () => NumberReply | NullReply | ArrayReply<NumberReply | NullReply>
} as const satisfies Command;

View File

@@ -1,11 +1,11 @@
import { strict as assert } from 'assert';
import testUtils, { GLOBAL } from '../test-utils';
import { transformArguments } from './ARRTRIM';
import ARRTRIM from './ARRTRIM';
describe('ARRTRIM', () => {
it('transformArguments', () => {
assert.deepEqual(
transformArguments('key', '$', 0, 1),
ARRTRIM.transformArguments('key', '$', 0, 1),
['JSON.ARRTRIM', 'key', '$', '0', '1']
);
});

View File

@@ -1,7 +1,10 @@
export const FIRST_KEY_INDEX = 1;
import { RedisArgument, ArrayReply, NumberReply, NullReply, Command } from '@redis/client/dist/lib/RESP/types';
export function transformArguments(key: string, path: string, start: number, stop: number): Array<string> {
export default {
FIRST_KEY_INDEX: 1,
IS_READ_ONLY: false,
transformArguments(key: RedisArgument, path: RedisArgument, start: number, stop: number) {
return ['JSON.ARRTRIM', key, path, start.toString(), stop.toString()];
}
export declare function transformReply(): number | Array<number>;
},
transformReply: undefined as unknown as () => NumberReply | NullReply | ArrayReply<NumberReply | NullReply>
} as const satisfies Command;

View File

@@ -1,19 +1,19 @@
import { strict as assert } from 'assert';
import testUtils, { GLOBAL } from '../test-utils';
import { transformArguments } from './OBJLEN';
import OBJLEN from './OBJLEN';
describe('OBJLEN', () => {
describe('transformArguments', () => {
it('without path', () => {
assert.deepEqual(
transformArguments('key'),
OBJLEN.transformArguments('key'),
['JSON.OBJLEN', 'key']
);
});
it('with path', () => {
assert.deepEqual(
transformArguments('key', '$'),
OBJLEN.transformArguments('key', '$'),
['JSON.OBJLEN', 'key', '$']
);
});

View File

@@ -1,6 +1,9 @@
export const FIRST_KEY_INDEX = 1;
import { RedisArgument, ArrayReply, NumberReply, NullReply, Command } from '@redis/client/dist/lib/RESP/types';
export function transformArguments(key: string, path?: string): Array<string> {
export default {
FIRST_KEY_INDEX: 1,
IS_READ_ONLY: false,
transformArguments(key: RedisArgument, path?: RedisArgument) {
const args = ['JSON.OBJLEN', key];
if (path) {
@@ -8,6 +11,6 @@ export function transformArguments(key: string, path?: string): Array<string> {
}
return args;
}
export declare function transformReply(): number | null | Array<number | null>;
},
transformReply: undefined as unknown as () => NumberReply | NullReply | ArrayReply<NumberReply | NullReply>
} as const satisfies Command;

View File

@@ -1,30 +1,30 @@
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 { transformArguments } from './STRAPPEND';
describe('STRAPPEND', () => {
describe('transformArguments', () => {
it('without path', () => {
assert.deepEqual(
transformArguments('key', 'append'),
['JSON.STRAPPEND', 'key', '"append"']
);
});
// describe('STRAPPEND', () => {
// describe('transformArguments', () => {
// it('without path', () => {
// assert.deepEqual(
// transformArguments('key', 'append'),
// ['JSON.STRAPPEND', 'key', '"append"']
// );
// });
it('with path', () => {
assert.deepEqual(
transformArguments('key', '$', 'append'),
['JSON.STRAPPEND', 'key', '$', '"append"']
);
});
});
// it('with path', () => {
// assert.deepEqual(
// transformArguments('key', '$', 'append'),
// ['JSON.STRAPPEND', 'key', '$', '"append"']
// );
// });
// });
testUtils.testWithClient('client.json.strAppend', async client => {
await client.json.set('key', '$', '');
// testUtils.testWithClient('client.json.strAppend', async client => {
// await client.json.set('key', '$', '');
assert.deepEqual(
await client.json.strAppend('key', '$', 'append'),
[6]
);
}, GLOBAL.SERVERS.OPEN);
});
// assert.deepEqual(
// await client.json.strAppend('key', '$', 'append'),
// [6]
// );
// }, GLOBAL.SERVERS.OPEN);
// });

View File

@@ -1,21 +1,21 @@
import { transformRedisJsonArgument } from '.';
// import { transformRedisJsonArgument } from '.';
export const FIRST_KEY_INDEX = 1;
// export const FIRST_KEY_INDEX = 1;
type AppendArguments = [key: string, append: string];
// type AppendArguments = [key: string, append: string];
type AppendWithPathArguments = [key: string, path: string, append: string];
// type AppendWithPathArguments = [key: string, path: string, append: string];
export function transformArguments(...[key, pathOrAppend, append]: AppendArguments | AppendWithPathArguments): Array<string> {
const args = ['JSON.STRAPPEND', key];
// export function transformArguments(...[key, pathOrAppend, append]: AppendArguments | AppendWithPathArguments): Array<string> {
// const args = ['JSON.STRAPPEND', key];
if (append !== undefined && append !== null) {
args.push(pathOrAppend, transformRedisJsonArgument(append));
} else {
args.push(transformRedisJsonArgument(pathOrAppend));
}
// if (append !== undefined && append !== null) {
// args.push(pathOrAppend, transformRedisJsonArgument(append));
// } else {
// args.push(transformRedisJsonArgument(pathOrAppend));
// }
return args;
}
// return args;
// }
export declare function transformReply(): number | Array<number>;
// export declare function transformReply(): number | Array<number>;

View File

@@ -1,19 +1,19 @@
import { strict as assert } from 'assert';
import testUtils, { GLOBAL } from '../test-utils';
import { transformArguments } from './STRLEN';
import STRLEN from './STRLEN';
describe('STRLEN', () => {
describe('transformArguments', () => {
it('without path', () => {
assert.deepEqual(
transformArguments('key'),
STRLEN.transformArguments('key'),
['JSON.STRLEN', 'key']
);
});
it('with path', () => {
assert.deepEqual(
transformArguments('key', '$'),
STRLEN.transformArguments('key', '$'),
['JSON.STRLEN', 'key', '$']
);
});

View File

@@ -1,8 +1,9 @@
export const FIRST_KEY_INDEX = 1;
import { RedisArgument, ArrayReply, NumberReply, NullReply, Command } from '@redis/client/dist/lib/RESP/types';
export const IS_READ_ONLY = true;
export function transformArguments(key: string, path?: string): Array<string> {
export default {
FIRST_KEY_INDEX: 1,
IS_READ_ONLY: false,
transformArguments(key: RedisArgument, path?: RedisArgument) {
const args = ['JSON.STRLEN', key];
if (path) {
@@ -10,6 +11,6 @@ export function transformArguments(key: string, path?: string): Array<string> {
}
return args;
}
export declare function transformReply(): number;
},
transformReply: undefined as unknown as () => NumberReply | NullReply | ArrayReply<NumberReply | NullReply>
} as const satisfies Command;

View File

@@ -0,0 +1,30 @@
import { strict as assert } from 'assert';
import testUtils, { GLOBAL } from '../test-utils';
import TOGGLE from './TOGGLE';
describe('TOGGLE', () => {
describe('transformArguments', () => {
it('without path', () => {
assert.deepEqual(
TOGGLE.transformArguments('key'),
['JSON.TOGGLE', 'key']
);
});
it('with path', () => {
assert.deepEqual(
TOGGLE.transformArguments('key', '$'),
['JSON.TOGGLE', 'key', '$']
);
});
});
testUtils.testWithClient('client.json.toggle', async client => {
await client.json.set('key', '$', '');
assert.deepEqual(
await client.json.toggle('key', '$'),
[0]
);
}, GLOBAL.SERVERS.OPEN);
});

View File

@@ -0,0 +1,14 @@
import { RedisArgument, ArrayReply, NumberReply, NullReply, Command, } from '@redis/client/dist/lib/RESP/types';
export default {
FIRST_KEY_INDEX: undefined,
IS_READ_ONLY: false,
transformArguments(key: RedisArgument, path?: RedisArgument) {
const args = ['JSON.TOGGLE', key]
if (path) args.push(path);
return args;
},
transformReply: undefined as unknown as () => NumberReply | NullReply | ArrayReply<NumberReply | NullReply>
} as const satisfies Command;