You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-04 15:02:09 +03:00
@@ -71,6 +71,10 @@ import * as HVALS from '../commands/HVALS';
|
|||||||
import * as INCR from '../commands/INCR';
|
import * as INCR from '../commands/INCR';
|
||||||
import * as INCRBY from '../commands/INCRBY';
|
import * as INCRBY from '../commands/INCRBY';
|
||||||
import * as INCRBYFLOAT from '../commands/INCRBYFLOAT';
|
import * as INCRBYFLOAT from '../commands/INCRBYFLOAT';
|
||||||
|
import * as LCS_IDX_WITHMATCHLEN from '../commands/LCS_IDX_WITHMATCHLEN';
|
||||||
|
import * as LCS_IDX from '../commands/LCS_IDX';
|
||||||
|
import * as LCS_LEN from '../commands/LCS_LEN';
|
||||||
|
import * as LCS from '../commands/LCS';
|
||||||
import * as LINDEX from '../commands/LINDEX';
|
import * as LINDEX from '../commands/LINDEX';
|
||||||
import * as LINSERT from '../commands/LINSERT';
|
import * as LINSERT from '../commands/LINSERT';
|
||||||
import * as LLEN from '../commands/LLEN';
|
import * as LLEN from '../commands/LLEN';
|
||||||
@@ -351,6 +355,14 @@ export default {
|
|||||||
incrBy: INCRBY,
|
incrBy: INCRBY,
|
||||||
INCRBYFLOAT,
|
INCRBYFLOAT,
|
||||||
incrByFloat: INCRBYFLOAT,
|
incrByFloat: INCRBYFLOAT,
|
||||||
|
LCS_IDX_WITHMATCHLEN,
|
||||||
|
lcsIdxWithMatchLen: LCS_IDX_WITHMATCHLEN,
|
||||||
|
LCS_IDX,
|
||||||
|
lcsIdx: LCS_IDX,
|
||||||
|
LCS_LEN,
|
||||||
|
lcsLen: LCS_LEN,
|
||||||
|
LCS,
|
||||||
|
lcs: LCS,
|
||||||
LINDEX,
|
LINDEX,
|
||||||
lIndex: LINDEX,
|
lIndex: LINDEX,
|
||||||
LINSERT,
|
LINSERT,
|
||||||
|
28
packages/client/lib/commands/LCS.spec.ts
Normal file
28
packages/client/lib/commands/LCS.spec.ts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import { strict as assert } from 'assert';
|
||||||
|
import testUtils, { GLOBAL } from '../test-utils';
|
||||||
|
import { transformArguments } from './LCS';
|
||||||
|
|
||||||
|
describe('LCS', () => {
|
||||||
|
testUtils.isVersionGreaterThanHook([7]);
|
||||||
|
|
||||||
|
it('transformArguments', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
transformArguments('1', '2'),
|
||||||
|
['LCS', '1', '2']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
testUtils.testWithClient('client.lcs', async client => {
|
||||||
|
assert.equal(
|
||||||
|
await client.lcs('1', '2'),
|
||||||
|
''
|
||||||
|
);
|
||||||
|
}, GLOBAL.SERVERS.OPEN);
|
||||||
|
|
||||||
|
testUtils.testWithCluster('cluster.lcs', async cluster => {
|
||||||
|
assert.equal(
|
||||||
|
await cluster.lcs('{tag}1', '{tag}2'),
|
||||||
|
''
|
||||||
|
);
|
||||||
|
}, GLOBAL.CLUSTERS.OPEN);
|
||||||
|
});
|
18
packages/client/lib/commands/LCS.ts
Normal file
18
packages/client/lib/commands/LCS.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { RedisCommandArgument, RedisCommandArguments } from '.';
|
||||||
|
|
||||||
|
export const FIRST_KEY_INDEX = 1;
|
||||||
|
|
||||||
|
export const IS_READ_ONLY = true;
|
||||||
|
|
||||||
|
export function transformArguments(
|
||||||
|
key1: RedisCommandArgument,
|
||||||
|
key2: RedisCommandArgument
|
||||||
|
): RedisCommandArguments {
|
||||||
|
return [
|
||||||
|
'LCS',
|
||||||
|
key1,
|
||||||
|
key2
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
export declare function transformReply(): string | Buffer;
|
41
packages/client/lib/commands/LCS_IDX.spec.ts
Normal file
41
packages/client/lib/commands/LCS_IDX.spec.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import { strict as assert } from 'assert';
|
||||||
|
import testUtils, { GLOBAL } from '../test-utils';
|
||||||
|
import { transformArguments } from './LCS_IDX';
|
||||||
|
|
||||||
|
describe('LCS_IDX', () => {
|
||||||
|
testUtils.isVersionGreaterThanHook([7]);
|
||||||
|
|
||||||
|
it('transformArguments', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
transformArguments('1', '2'),
|
||||||
|
['LCS', '1', '2', 'IDX']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
testUtils.testWithClient('client.lcsIdx', async client => {
|
||||||
|
const [, reply] = await Promise.all([
|
||||||
|
client.mSet({
|
||||||
|
'1': 'abc',
|
||||||
|
'2': 'bc'
|
||||||
|
}),
|
||||||
|
client.lcsIdx('1', '2')
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert.deepEqual(
|
||||||
|
reply,
|
||||||
|
{
|
||||||
|
matches: [{
|
||||||
|
key1: {
|
||||||
|
start: 1,
|
||||||
|
end: 2
|
||||||
|
},
|
||||||
|
key2: {
|
||||||
|
start: 0,
|
||||||
|
end: 1
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
length: 2
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}, GLOBAL.SERVERS.OPEN);
|
||||||
|
});
|
42
packages/client/lib/commands/LCS_IDX.ts
Normal file
42
packages/client/lib/commands/LCS_IDX.ts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import { RedisCommandArgument, RedisCommandArguments } from '.';
|
||||||
|
import { RangeReply, RawRangeReply, transformRangeReply } from './generic-transformers';
|
||||||
|
import { transformArguments as transformLcsArguments } from './LCS';
|
||||||
|
|
||||||
|
export { FIRST_KEY_INDEX, IS_READ_ONLY } from './LCS';
|
||||||
|
|
||||||
|
export function transformArguments(
|
||||||
|
key1: RedisCommandArgument,
|
||||||
|
key2: RedisCommandArgument
|
||||||
|
): RedisCommandArguments {
|
||||||
|
const args = transformLcsArguments(key1, key2);
|
||||||
|
args.push('IDX');
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
type RawReply = [
|
||||||
|
'matches',
|
||||||
|
Array<[
|
||||||
|
key1: RawRangeReply,
|
||||||
|
key2: RawRangeReply
|
||||||
|
]>,
|
||||||
|
'len',
|
||||||
|
number
|
||||||
|
];
|
||||||
|
|
||||||
|
interface Reply {
|
||||||
|
matches: Array<{
|
||||||
|
key1: RangeReply;
|
||||||
|
key2: RangeReply;
|
||||||
|
}>;
|
||||||
|
length: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function transformReply(reply: RawReply): Reply {
|
||||||
|
return {
|
||||||
|
matches: reply[1].map(([key1, key2]) => ({
|
||||||
|
key1: transformRangeReply(key1),
|
||||||
|
key2: transformRangeReply(key2)
|
||||||
|
})),
|
||||||
|
length: reply[3]
|
||||||
|
};
|
||||||
|
}
|
42
packages/client/lib/commands/LCS_IDX_WITHMATCHLEN.spec.ts
Normal file
42
packages/client/lib/commands/LCS_IDX_WITHMATCHLEN.spec.ts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import { strict as assert } from 'assert';
|
||||||
|
import testUtils, { GLOBAL } from '../test-utils';
|
||||||
|
import { transformArguments } from './LCS_IDX_WITHMATCHLEN';
|
||||||
|
|
||||||
|
describe('LCS_IDX_WITHMATCHLEN', () => {
|
||||||
|
testUtils.isVersionGreaterThanHook([7]);
|
||||||
|
|
||||||
|
it('transformArguments', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
transformArguments('1', '2'),
|
||||||
|
['LCS', '1', '2', 'IDX', 'WITHMATCHLEN']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
testUtils.testWithClient('client.lcsIdxWithMatchLen', async client => {
|
||||||
|
const [, reply] = await Promise.all([
|
||||||
|
client.mSet({
|
||||||
|
'1': 'abc',
|
||||||
|
'2': 'bc'
|
||||||
|
}),
|
||||||
|
client.lcsIdxWithMatchLen('1', '2')
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert.deepEqual(
|
||||||
|
reply,
|
||||||
|
{
|
||||||
|
matches: [{
|
||||||
|
key1: {
|
||||||
|
start: 1,
|
||||||
|
end: 2
|
||||||
|
},
|
||||||
|
key2: {
|
||||||
|
start: 0,
|
||||||
|
end: 1
|
||||||
|
},
|
||||||
|
length: 2
|
||||||
|
}],
|
||||||
|
length: 2
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}, GLOBAL.SERVERS.OPEN);
|
||||||
|
});
|
45
packages/client/lib/commands/LCS_IDX_WITHMATCHLEN.ts
Normal file
45
packages/client/lib/commands/LCS_IDX_WITHMATCHLEN.ts
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import { RedisCommandArgument, RedisCommandArguments } from '.';
|
||||||
|
import { RangeReply, RawRangeReply, transformRangeReply } from './generic-transformers';
|
||||||
|
import { transformArguments as transformLcsArguments } from './LCS';
|
||||||
|
|
||||||
|
export { FIRST_KEY_INDEX, IS_READ_ONLY } from './LCS';
|
||||||
|
|
||||||
|
export function transformArguments(
|
||||||
|
key1: RedisCommandArgument,
|
||||||
|
key2: RedisCommandArgument
|
||||||
|
): RedisCommandArguments {
|
||||||
|
const args = transformLcsArguments(key1, key2);
|
||||||
|
args.push('IDX', 'WITHMATCHLEN');
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
type RawReply = [
|
||||||
|
'matches',
|
||||||
|
Array<[
|
||||||
|
key1: RawRangeReply,
|
||||||
|
key2: RawRangeReply,
|
||||||
|
length: number
|
||||||
|
]>,
|
||||||
|
'len',
|
||||||
|
number
|
||||||
|
];
|
||||||
|
|
||||||
|
interface Reply {
|
||||||
|
matches: Array<{
|
||||||
|
key1: RangeReply;
|
||||||
|
key2: RangeReply;
|
||||||
|
length: number;
|
||||||
|
}>;
|
||||||
|
length: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function transformReply(reply: RawReply): Reply {
|
||||||
|
return {
|
||||||
|
matches: reply[1].map(([key1, key2, length]) => ({
|
||||||
|
key1: transformRangeReply(key1),
|
||||||
|
key2: transformRangeReply(key2),
|
||||||
|
length
|
||||||
|
})),
|
||||||
|
length: reply[3]
|
||||||
|
};
|
||||||
|
}
|
28
packages/client/lib/commands/LCS_LEN.spec.ts
Normal file
28
packages/client/lib/commands/LCS_LEN.spec.ts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import { strict as assert } from 'assert';
|
||||||
|
import testUtils, { GLOBAL } from '../test-utils';
|
||||||
|
import { transformArguments } from './LCS_LEN';
|
||||||
|
|
||||||
|
describe('LCS_LEN', () => {
|
||||||
|
testUtils.isVersionGreaterThanHook([7]);
|
||||||
|
|
||||||
|
it('transformArguments', () => {
|
||||||
|
assert.deepEqual(
|
||||||
|
transformArguments('1', '2'),
|
||||||
|
['LCS', '1', '2', 'LEN']
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
testUtils.testWithClient('client.lcsLen', async client => {
|
||||||
|
assert.equal(
|
||||||
|
await client.lcsLen('1', '2'),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}, GLOBAL.SERVERS.OPEN);
|
||||||
|
|
||||||
|
testUtils.testWithCluster('cluster.lcsLen', async cluster => {
|
||||||
|
assert.equal(
|
||||||
|
await cluster.lcsLen('{tag}1', '{tag}2'),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}, GLOBAL.CLUSTERS.OPEN);
|
||||||
|
});
|
15
packages/client/lib/commands/LCS_LEN.ts
Normal file
15
packages/client/lib/commands/LCS_LEN.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import { RedisCommandArgument, RedisCommandArguments } from '.';
|
||||||
|
import { transformArguments as transformLcsArguments } from './LCS';
|
||||||
|
|
||||||
|
export { FIRST_KEY_INDEX, IS_READ_ONLY } from './LCS';
|
||||||
|
|
||||||
|
export function transformArguments(
|
||||||
|
key1: RedisCommandArgument,
|
||||||
|
key2: RedisCommandArgument
|
||||||
|
): RedisCommandArguments {
|
||||||
|
const args = transformLcsArguments(key1, key2);
|
||||||
|
args.push('LEN');
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
export declare function transformReply(): number;
|
@@ -670,3 +670,20 @@ export function pushSlotRangesArguments(
|
|||||||
|
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type RawRangeReply = [
|
||||||
|
start: number,
|
||||||
|
end: number
|
||||||
|
];
|
||||||
|
|
||||||
|
export interface RangeReply {
|
||||||
|
start: number;
|
||||||
|
end: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function transformRangeReply([start, end]: RawRangeReply): RangeReply {
|
||||||
|
return {
|
||||||
|
start,
|
||||||
|
end
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user