1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.isInSubscriberMode = isInSubscriberMode;
|
7 | exports.isNotConnected = isNotConnected;
|
8 | exports.throwIfInSubscriberMode = throwIfInSubscriberMode;
|
9 | exports.throwIfNotConnected = throwIfNotConnected;
|
10 | exports.throwIfCommandIsNotAllowed = throwIfCommandIsNotAllowed;
|
11 | exports.processArguments = processArguments;
|
12 | exports.processReply = processReply;
|
13 | exports.safelyExecuteCommand = safelyExecuteCommand;
|
14 | exports.default = command;
|
15 |
|
16 | var _lodash = require('lodash');
|
17 |
|
18 | var _lodash2 = _interopRequireDefault(_lodash);
|
19 |
|
20 | var _standardAsCallback = require('standard-as-callback');
|
21 |
|
22 | var _standardAsCallback2 = _interopRequireDefault(_standardAsCallback);
|
23 |
|
24 | var _promiseContainer = require('./promise-container');
|
25 |
|
26 | var _promiseContainer2 = _interopRequireDefault(_promiseContainer);
|
27 |
|
28 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
29 |
|
30 | function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
31 |
|
32 | function isInSubscriberMode(RedisMock) {
|
33 | if (RedisMock.channels === undefined) {
|
34 | return false;
|
35 | }
|
36 | return RedisMock.subscriberMode;
|
37 | }
|
38 |
|
39 | function isNotConnected(RedisMock) {
|
40 | if (RedisMock.connected === undefined) {
|
41 | return false;
|
42 | }
|
43 | return !RedisMock.connected;
|
44 | }
|
45 |
|
46 | function throwIfInSubscriberMode(commandName, RedisMock) {
|
47 | if (isInSubscriberMode(RedisMock)) {
|
48 | var allowedCommands = ['subscribe', 'psubscribe', 'unsubscribe', 'punsubscribe', 'ping', 'quit', 'disconnect'];
|
49 | if (allowedCommands.indexOf(commandName) > -1) {
|
50 |
|
51 | } else {
|
52 | throw new Error('Connection in subscriber mode, only subscriber commands may be used');
|
53 | }
|
54 | }
|
55 | }
|
56 |
|
57 | function throwIfNotConnected(commandName, RedisMock) {
|
58 | if (isNotConnected(RedisMock)) {
|
59 | if (commandName !== 'connect') {
|
60 | throw new Error("Stream isn't writeable and enableOfflineQueue options is false");
|
61 | }
|
62 | }
|
63 | }
|
64 |
|
65 | function throwIfCommandIsNotAllowed(commandName, RedisMock) {
|
66 | throwIfInSubscriberMode(commandName, RedisMock);
|
67 | throwIfNotConnected(commandName, RedisMock);
|
68 | }
|
69 |
|
70 | function processArguments(args, commandName, RedisMock) {
|
71 |
|
72 | if (commandName === 'defineCommand') return args;
|
73 |
|
74 | var commandArgs = args ? _lodash2.default.flatten(args) : [];
|
75 | if (RedisMock.Command.transformers.argument[commandName]) {
|
76 | commandArgs = RedisMock.Command.transformers.argument[commandName](args);
|
77 | }
|
78 | commandArgs = commandArgs.map(
|
79 |
|
80 | function (arg) {
|
81 | return arg instanceof Buffer || arg === null || arg === undefined ? arg : arg.toString();
|
82 | });
|
83 | return commandArgs;
|
84 | }
|
85 |
|
86 | function processReply(result, commandName, RedisMock) {
|
87 | if (RedisMock.Command.transformers.reply[commandName]) {
|
88 | return RedisMock.Command.transformers.reply[commandName](result);
|
89 | }
|
90 | return result;
|
91 | }
|
92 |
|
93 | function safelyExecuteCommand(commandEmulator, commandName, RedisMock) {
|
94 | throwIfCommandIsNotAllowed(commandName, RedisMock);
|
95 |
|
96 | for (var _len = arguments.length, commandArgs = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
|
97 | commandArgs[_key - 3] = arguments[_key];
|
98 | }
|
99 |
|
100 | var result = commandEmulator.apply(undefined, commandArgs);
|
101 | return processReply(result, commandName, RedisMock);
|
102 | }
|
103 |
|
104 | function command(commandEmulator, commandName, RedisMock) {
|
105 | return function () {
|
106 | for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
107 | args[_key2] = arguments[_key2];
|
108 | }
|
109 |
|
110 | var lastArgIndex = args.length - 1;
|
111 | var callback = args[lastArgIndex];
|
112 | if (typeof callback !== 'function') {
|
113 | callback = undefined;
|
114 | } else {
|
115 |
|
116 | args.length = lastArgIndex;
|
117 | }
|
118 |
|
119 | var commandArgs = processArguments(args, commandName, RedisMock);
|
120 |
|
121 | var Promise = _promiseContainer2.default.get();
|
122 |
|
123 | return (0, _standardAsCallback2.default)(new Promise(function (resolve) {
|
124 | return resolve(safelyExecuteCommand.apply(undefined, [commandEmulator, commandName, RedisMock].concat(_toConsumableArray(commandArgs))));
|
125 | }), callback);
|
126 | };
|
127 | } |
\ | No newline at end of file |