convert redis lua scripts to a useful node module
$ npm install --save-dev redis-lua2js
This module is not meant to be used on its own, but rather as part of another module, such as gulp-redis-lua2js or hook-redis-lua. In here, I will demonstrate the usage with the help of module-from-string:
index.js:
import { readFileSync } from 'node:fs';
import { join } from 'node:path';
import Redis from 'ioredis';
import lua2js from 'redis-lua2js';
import { requireFromString } from 'module-from-string';
const ioredis = new Redis();
const lua = readFileSync(join(__dirname, 'pdel.lua'));
const js = lua2js(lua); // This is a node module string, the template of which you can see in src/lua.js
const pdel = requireFromString(js); // Parse the module as a string
ioredis.defineCommand(pdel.name, {
lua: pdel.lua,
numberOfKeys: pdel.numberOfKeys,
});
ioredis.pdel('*');
pdel.lua:
--!/usr/bin/env lua
-- name pdel
-- nkeys 1
local function deleteKeys (keys)
for i, name in ipairs(keys) do
redis.call("DEL", name)
end
end
if type(redis.replicate_commands) == 'function' and redis.replicate_commands() then -- Redis 3.2+
local count = 0
local cursor = "0"
local keys
repeat
cursor, keys = unpack(redis.call("SCAN", cursor, "MATCH", KEYS[1]))
count = count + #keys
deleteKeys(keys)
until cursor == "0"
return count
else
local keys = redis.call("KEYS", KEYS[1])
deleteKeys(keys)
return #keys
end
Takes the contents of a lua script and outputs a node module, as a string, which can be used to load the script into a redis client such as ioredis
easily.
Type: string
, the contents of a lua script
Type: string?
By default it is parsed from the comments of the lua script, as demonstrated in the Usage
section
The name of the redis command, will be used when installing to ioredis
Type: string?
,
By default it is parsed from the comments of the lua script, as demonstrated in the Usage
section
The number of keys that the redis command accepts
Type: "commonjs" | "module"
Whether the output module is commonjs
or esm
.
The parsed module will export the following:
Type: string | null
, contains the name from the API above
Type: integer | null
, contains the value of the number of keys argument from the API above
Type: string
, contains the contents of the lua script, useful for manually installing the script, for example, with ioredis.defineCommand
See the LICENSE file for license rights and limitations (MIT).