-first commit
This commit is contained in:
237
node_modules/@redis/time-series/dist/lib/commands/helpers.js
generated
vendored
Normal file
237
node_modules/@redis/time-series/dist/lib/commands/helpers.js
generated
vendored
Normal file
@@ -0,0 +1,237 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.transformRESP2LabelsWithSources = exports.transformRESP2Labels = exports.parseSelectedLabelsArguments = exports.resp3MapToValue = exports.resp2MapToValue = exports.transformSamplesReply = exports.transformSampleReply = exports.parseLabelsArgument = exports.transformTimestampArgument = exports.parseDuplicatePolicy = exports.TIME_SERIES_DUPLICATE_POLICIES = exports.parseChunkSizeArgument = exports.parseEncodingArgument = exports.TIME_SERIES_ENCODING = exports.parseRetentionArgument = exports.parseIgnoreArgument = void 0;
|
||||
const client_1 = require("@redis/client");
|
||||
function parseIgnoreArgument(parser, ignore) {
|
||||
if (ignore !== undefined) {
|
||||
parser.push('IGNORE', ignore.maxTimeDiff.toString(), ignore.maxValDiff.toString());
|
||||
}
|
||||
}
|
||||
exports.parseIgnoreArgument = parseIgnoreArgument;
|
||||
function parseRetentionArgument(parser, retention) {
|
||||
if (retention !== undefined) {
|
||||
parser.push('RETENTION', retention.toString());
|
||||
}
|
||||
}
|
||||
exports.parseRetentionArgument = parseRetentionArgument;
|
||||
exports.TIME_SERIES_ENCODING = {
|
||||
COMPRESSED: 'COMPRESSED',
|
||||
UNCOMPRESSED: 'UNCOMPRESSED'
|
||||
};
|
||||
function parseEncodingArgument(parser, encoding) {
|
||||
if (encoding !== undefined) {
|
||||
parser.push('ENCODING', encoding);
|
||||
}
|
||||
}
|
||||
exports.parseEncodingArgument = parseEncodingArgument;
|
||||
function parseChunkSizeArgument(parser, chunkSize) {
|
||||
if (chunkSize !== undefined) {
|
||||
parser.push('CHUNK_SIZE', chunkSize.toString());
|
||||
}
|
||||
}
|
||||
exports.parseChunkSizeArgument = parseChunkSizeArgument;
|
||||
exports.TIME_SERIES_DUPLICATE_POLICIES = {
|
||||
BLOCK: 'BLOCK',
|
||||
FIRST: 'FIRST',
|
||||
LAST: 'LAST',
|
||||
MIN: 'MIN',
|
||||
MAX: 'MAX',
|
||||
SUM: 'SUM'
|
||||
};
|
||||
function parseDuplicatePolicy(parser, duplicatePolicy) {
|
||||
if (duplicatePolicy !== undefined) {
|
||||
parser.push('DUPLICATE_POLICY', duplicatePolicy);
|
||||
}
|
||||
}
|
||||
exports.parseDuplicatePolicy = parseDuplicatePolicy;
|
||||
function transformTimestampArgument(timestamp) {
|
||||
if (typeof timestamp === 'string')
|
||||
return timestamp;
|
||||
return (typeof timestamp === 'number' ?
|
||||
timestamp :
|
||||
timestamp.getTime()).toString();
|
||||
}
|
||||
exports.transformTimestampArgument = transformTimestampArgument;
|
||||
function parseLabelsArgument(parser, labels) {
|
||||
if (labels) {
|
||||
parser.push('LABELS');
|
||||
for (const [label, value] of Object.entries(labels)) {
|
||||
parser.push(label, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.parseLabelsArgument = parseLabelsArgument;
|
||||
exports.transformSampleReply = {
|
||||
2(reply) {
|
||||
const [timestamp, value] = reply;
|
||||
return {
|
||||
timestamp,
|
||||
value: Number(value) // TODO: use double type mapping instead
|
||||
};
|
||||
},
|
||||
3(reply) {
|
||||
const [timestamp, value] = reply;
|
||||
return {
|
||||
timestamp,
|
||||
value
|
||||
};
|
||||
}
|
||||
};
|
||||
exports.transformSamplesReply = {
|
||||
2(reply) {
|
||||
return reply
|
||||
.map(sample => exports.transformSampleReply[2](sample));
|
||||
},
|
||||
3(reply) {
|
||||
return reply
|
||||
.map(sample => exports.transformSampleReply[3](sample));
|
||||
}
|
||||
};
|
||||
// TODO: move to @redis/client?
|
||||
function resp2MapToValue(wrappedReply, parseFunc, typeMapping) {
|
||||
const reply = wrappedReply;
|
||||
switch (typeMapping?.[client_1.RESP_TYPES.MAP]) {
|
||||
case Map: {
|
||||
const ret = new Map();
|
||||
for (const wrappedTuple of reply) {
|
||||
const tuple = wrappedTuple;
|
||||
const key = tuple[0];
|
||||
ret.set(key.toString(), parseFunc(tuple));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
case Array: {
|
||||
for (const wrappedTuple of reply) {
|
||||
const tuple = wrappedTuple;
|
||||
tuple[1] = parseFunc(tuple);
|
||||
}
|
||||
return reply;
|
||||
}
|
||||
default: {
|
||||
const ret = Object.create(null);
|
||||
for (const wrappedTuple of reply) {
|
||||
const tuple = wrappedTuple;
|
||||
const key = tuple[0];
|
||||
ret[key.toString()] = parseFunc(tuple);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.resp2MapToValue = resp2MapToValue;
|
||||
function resp3MapToValue(wrappedReply, parseFunc) {
|
||||
const reply = wrappedReply;
|
||||
if (reply instanceof Array) {
|
||||
for (let i = 1; i < reply.length; i += 2) {
|
||||
reply[i] = parseFunc(reply[i]);
|
||||
}
|
||||
}
|
||||
else if (reply instanceof Map) {
|
||||
for (const [key, value] of reply.entries()) {
|
||||
reply.set(key, parseFunc(value));
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (const [key, value] of Object.entries(reply)) {
|
||||
reply[key] = parseFunc(value);
|
||||
}
|
||||
}
|
||||
return reply;
|
||||
}
|
||||
exports.resp3MapToValue = resp3MapToValue;
|
||||
function parseSelectedLabelsArguments(parser, selectedLabels) {
|
||||
parser.push('SELECTED_LABELS');
|
||||
parser.pushVariadic(selectedLabels);
|
||||
}
|
||||
exports.parseSelectedLabelsArguments = parseSelectedLabelsArguments;
|
||||
function transformRESP2Labels(labels, typeMapping) {
|
||||
const unwrappedLabels = labels;
|
||||
switch (typeMapping?.[client_1.RESP_TYPES.MAP]) {
|
||||
case Map:
|
||||
const map = new Map();
|
||||
for (const tuple of unwrappedLabels) {
|
||||
const [key, value] = tuple;
|
||||
const unwrappedKey = key;
|
||||
map.set(unwrappedKey.toString(), value);
|
||||
}
|
||||
return map;
|
||||
case Array:
|
||||
return unwrappedLabels.flat();
|
||||
case Object:
|
||||
default:
|
||||
const labelsObject = Object.create(null);
|
||||
for (const tuple of unwrappedLabels) {
|
||||
const [key, value] = tuple;
|
||||
const unwrappedKey = key;
|
||||
labelsObject[unwrappedKey.toString()] = value;
|
||||
}
|
||||
return labelsObject;
|
||||
}
|
||||
}
|
||||
exports.transformRESP2Labels = transformRESP2Labels;
|
||||
function transformRESP2LabelsWithSources(labels, typeMapping) {
|
||||
const unwrappedLabels = labels;
|
||||
const to = unwrappedLabels.length - 2; // ignore __reducer__ and __source__
|
||||
let transformedLabels;
|
||||
switch (typeMapping?.[client_1.RESP_TYPES.MAP]) {
|
||||
case Map:
|
||||
const map = new Map();
|
||||
for (let i = 0; i < to; i++) {
|
||||
const [key, value] = unwrappedLabels[i];
|
||||
const unwrappedKey = key;
|
||||
map.set(unwrappedKey.toString(), value);
|
||||
}
|
||||
transformedLabels = map;
|
||||
break;
|
||||
case Array:
|
||||
transformedLabels = unwrappedLabels.slice(0, to).flat();
|
||||
break;
|
||||
case Object:
|
||||
default:
|
||||
const labelsObject = Object.create(null);
|
||||
for (let i = 0; i < to; i++) {
|
||||
const [key, value] = unwrappedLabels[i];
|
||||
const unwrappedKey = key;
|
||||
labelsObject[unwrappedKey.toString()] = value;
|
||||
}
|
||||
transformedLabels = labelsObject;
|
||||
break;
|
||||
}
|
||||
const sourcesTuple = unwrappedLabels[unwrappedLabels.length - 1];
|
||||
const unwrappedSourcesTuple = sourcesTuple;
|
||||
// the __source__ label will never be null
|
||||
const transformedSources = transformRESP2Sources(unwrappedSourcesTuple[1]);
|
||||
return {
|
||||
labels: transformedLabels,
|
||||
sources: transformedSources
|
||||
};
|
||||
}
|
||||
exports.transformRESP2LabelsWithSources = transformRESP2LabelsWithSources;
|
||||
function transformRESP2Sources(sourcesRaw) {
|
||||
// if a label contains "," this function will produce incorrcet results..
|
||||
// there is not much we can do about it, and we assume most users won't be using "," in their labels..
|
||||
const unwrappedSources = sourcesRaw;
|
||||
if (typeof unwrappedSources === 'string') {
|
||||
return unwrappedSources.split(',');
|
||||
}
|
||||
const indexOfComma = unwrappedSources.indexOf(',');
|
||||
if (indexOfComma === -1) {
|
||||
return [unwrappedSources];
|
||||
}
|
||||
const sourcesArray = [
|
||||
unwrappedSources.subarray(0, indexOfComma)
|
||||
];
|
||||
let previousComma = indexOfComma + 1;
|
||||
while (true) {
|
||||
const indexOf = unwrappedSources.indexOf(',', previousComma);
|
||||
if (indexOf === -1) {
|
||||
sourcesArray.push(unwrappedSources.subarray(previousComma));
|
||||
break;
|
||||
}
|
||||
const source = unwrappedSources.subarray(previousComma, indexOf);
|
||||
sourcesArray.push(source);
|
||||
previousComma = indexOf + 1;
|
||||
}
|
||||
return sourcesArray;
|
||||
}
|
||||
//# sourceMappingURL=helpers.js.map
|
||||
Reference in New Issue
Block a user