1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.customCommand = exports.defineRedisObject = undefined;
|
7 | exports.defineKeys = defineKeys;
|
8 | exports.defineArgv = defineArgv;
|
9 | exports.defineCommand = defineCommand;
|
10 |
|
11 | var _fengari = require('fengari');
|
12 |
|
13 | var _fengari2 = _interopRequireDefault(_fengari);
|
14 |
|
15 | var _fengariInterop = require('fengari-interop');
|
16 |
|
17 | var _fengariInterop2 = _interopRequireDefault(_fengariInterop);
|
18 |
|
19 | var _command = require('../command');
|
20 |
|
21 | var _command2 = _interopRequireDefault(_command);
|
22 |
|
23 | var _lua = require('../lua');
|
24 |
|
25 | var _ = require('.');
|
26 |
|
27 | var commands = _interopRequireWildcard(_);
|
28 |
|
29 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
30 |
|
31 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
32 |
|
33 | 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); } }
|
34 |
|
35 | var lua = _fengari2.default.lua,
|
36 | toLuaString = _fengari2.default.to_luastring;
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | var defineRedisObject = exports.defineRedisObject = function defineRedisObject(vm) {
|
47 | return function (fn) {
|
48 | vm.defineGlobalFunction(fn, 'call');
|
49 |
|
50 |
|
51 | vm.luaExecString('\n local redis = {}\n redis.call = function(...)\n return call(select(\'#\', ...), ...)\n end\n return redis\n ');
|
52 |
|
53 |
|
54 | lua.lua_setglobal(vm.L, toLuaString('redis'));
|
55 | };
|
56 | };
|
57 |
|
58 | var callToRedisCommand = function callToRedisCommand(vm) {
|
59 | return function callToRedisCommand2() {
|
60 | var rawArgs = vm.extractArgs();
|
61 |
|
62 | var args = Number.isInteger(rawArgs[0]) ? rawArgs.slice(1) : rawArgs;
|
63 | var name = args[0].toLowerCase();
|
64 | var redisCmd = commands[name].bind(this);
|
65 | var result = redisCmd.apply(undefined, _toConsumableArray(args.slice(1)));
|
66 |
|
67 | if (result) {
|
68 | if (Array.isArray(result)) {
|
69 | result.unshift(null);
|
70 | }
|
71 | _fengariInterop2.default.push(vm.L, result);
|
72 | return 1;
|
73 | }
|
74 | return 0;
|
75 | };
|
76 | };
|
77 |
|
78 |
|
79 | function defineKeys(vm, numberOfKeys, commandArgs) {
|
80 | var keys = commandArgs.slice(0, numberOfKeys);
|
81 | vm.defineGlobalArray(keys, 'KEYS');
|
82 | }
|
83 |
|
84 |
|
85 | function defineArgv(vm, numberOfKeys, commandArgs) {
|
86 | var args = commandArgs.slice(numberOfKeys);
|
87 | vm.defineGlobalArray(args, 'ARGV');
|
88 | }
|
89 |
|
90 |
|
91 | var customCommand = exports.customCommand = function customCommand(numberOfKeys, luaCode) {
|
92 | return function customCommand2() {
|
93 | var vm = (0, _lua.init)();
|
94 | defineRedisObject(vm)(callToRedisCommand(vm).bind(this));
|
95 |
|
96 | for (var _len = arguments.length, luaScriptArgs = Array(_len), _key = 0; _key < _len; _key++) {
|
97 | luaScriptArgs[_key] = arguments[_key];
|
98 | }
|
99 |
|
100 | defineKeys.bind(this)(vm, numberOfKeys, luaScriptArgs);
|
101 | defineArgv.bind(this)(vm, numberOfKeys, luaScriptArgs);
|
102 |
|
103 | var topBeforeExecute = lua.lua_gettop(vm.L);
|
104 | vm.luaExecString(luaCode);
|
105 | var retVal = vm.popReturnValue(topBeforeExecute);
|
106 | (0, _lua.dispose)(vm);
|
107 | return retVal;
|
108 | };
|
109 | };
|
110 |
|
111 | function defineCommand(command, _ref) {
|
112 | var numberOfKeys = _ref.numberOfKeys,
|
113 | luaCode = _ref.lua;
|
114 |
|
115 | this[command] = (0, _command2.default)(customCommand(numberOfKeys, luaCode).bind(this), command, this);
|
116 | } |
\ | No newline at end of file |