@plurnk/plurnk-mimetypes-text-redis 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 PossumTech Laboratories
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @plurnk/plurnk-mimetypes-text-redis
2
+
3
+ text/x-redis-cli mimetype handler for plurnk-service. ANTLR-backed extraction using grammars-v4's `redis` grammar.
4
+
5
+ ## Symbols emitted
6
+
7
+ Per SPEC §3 inclusion policy: classes, functions, methods, fields, interfaces, enums, types, modules, variables, constants. Imports excluded; locals inside function bodies excluded.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install @plurnk/plurnk-mimetypes-text-redis
13
+ ```
14
+
15
+ Auto-discovered by `@plurnk/plurnk-mimetypes` when installed alongside it.
@@ -0,0 +1,7 @@
1
+ import { AntlrExtractor } from "@plurnk/plurnk-mimetypes";
2
+ import type { ExtractionVisitor } from "@plurnk/plurnk-mimetypes";
3
+ export default class TextRedis extends AntlrExtractor {
4
+ protected parseTree(content: string): unknown;
5
+ protected createVisitor(): ExtractionVisitor;
6
+ }
7
+ //# sourceMappingURL=TextRedis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextRedis.d.ts","sourceRoot":"","sources":["../src/TextRedis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAmBlE,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,cAAc;IACjD,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ7C,SAAS,CAAC,aAAa,IAAI,iBAAiB;CAG/C"}
@@ -0,0 +1,82 @@
1
+ import { AntlrExtractor, withExtractor } from "@plurnk/plurnk-mimetypes";
2
+ import { CharStream, CommonTokenStream } from "antlr4ng";
3
+ import { RedisLexer } from "./generated/RedisLexer.js";
4
+ import { RedisParser } from "./generated/RedisParser.js";
5
+ import { RedisParserVisitor } from "./generated/RedisParserVisitor.js";
6
+ // text/x-redis-cli handler. ANTLR grammar from grammars-v4/redis.
7
+ //
8
+ // Parser entry rule: root → commands? EOF
9
+ //
10
+ // Redis CLI scripts are imperative command sequences, not declarative
11
+ // source files. There is no traditional "declaration" surface. What's
12
+ // most useful for outline reasoning is the set of KEYS the script
13
+ // touches — every command operates on a key, and the union of touched
14
+ // keys gives the agent a sense of what state the session manages.
15
+ //
16
+ // We extract unique keys by walking the parse tree for any context whose
17
+ // class name ends in "KeyNameContext" (string/list/set/sortedSet/hash/
18
+ // stream/etc.) and surface each as a field, deduped by name.
19
+ export default class TextRedis extends AntlrExtractor {
20
+ parseTree(content) {
21
+ const lexer = new RedisLexer(CharStream.fromString(content));
22
+ const tokens = new CommonTokenStream(lexer);
23
+ const parser = new RedisParser(tokens);
24
+ parser.removeErrorListeners();
25
+ return parser.root();
26
+ }
27
+ createVisitor() {
28
+ return new TextRedisVisitor();
29
+ }
30
+ }
31
+ class TextRedisVisitor extends withExtractor(RedisParserVisitor) {
32
+ #emittedKeys = new Set();
33
+ visitCommand = (ctx) => {
34
+ if (this.inBody)
35
+ return null;
36
+ // Walk this command's subtree for any *KeyNameContext nodes.
37
+ const keys = findKeyNames(ctx);
38
+ for (const k of keys) {
39
+ const text = k.getText?.();
40
+ if (!text)
41
+ continue;
42
+ const name = unquote(text);
43
+ if (this.#emittedKeys.has(name))
44
+ continue;
45
+ this.#emittedKeys.add(name);
46
+ this.addSymbol("field", name, k);
47
+ }
48
+ return null;
49
+ };
50
+ }
51
+ // Walk a subtree DFS, collecting every context whose class name ends with
52
+ // "KeyNameContext". The grammar has many shapes (StringKeyNameContext,
53
+ // HashKeyNameContext, ListKeyNameContext, etc.) — matching on suffix
54
+ // covers all variants.
55
+ function findKeyNames(root) {
56
+ const out = [];
57
+ const stack = [root];
58
+ while (stack.length > 0) {
59
+ const node = stack.pop();
60
+ if (!node)
61
+ continue;
62
+ const className = node.constructor?.name ?? "";
63
+ if (className.endsWith("KeyNameContext"))
64
+ out.push(node);
65
+ const count = node.getChildCount?.() ?? 0;
66
+ for (let i = 0; i < count; i += 1)
67
+ stack.push(node.getChild?.(i));
68
+ }
69
+ return out;
70
+ }
71
+ function unquote(s) {
72
+ if (s.length >= 2) {
73
+ const first = s[0];
74
+ const last = s[s.length - 1];
75
+ if (first === '"' && last === '"')
76
+ return s.slice(1, -1);
77
+ if (first === "'" && last === "'")
78
+ return s.slice(1, -1);
79
+ }
80
+ return s;
81
+ }
82
+ //# sourceMappingURL=TextRedis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextRedis.js","sourceRoot":"","sources":["../src/TextRedis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,211 @@
1
+ import * as antlr from "antlr4ng";
2
+ export declare class RedisLexer extends antlr.Lexer {
3
+ static readonly SPACE = 1;
4
+ static readonly NEWLINE = 2;
5
+ static readonly COPY = 3;
6
+ static readonly DB = 4;
7
+ static readonly REPLACE = 5;
8
+ static readonly DEL = 6;
9
+ static readonly UNLINK = 7;
10
+ static readonly DUMP = 8;
11
+ static readonly EXISTS = 9;
12
+ static readonly EXPIRE = 10;
13
+ static readonly GT = 11;
14
+ static readonly LT = 12;
15
+ static readonly NX = 13;
16
+ static readonly XX = 14;
17
+ static readonly EXPIREAT = 15;
18
+ static readonly EXPIRETIME = 16;
19
+ static readonly PEXPIRE = 17;
20
+ static readonly PEXPIREAT = 18;
21
+ static readonly PEXPIRETIME = 19;
22
+ static readonly KEYS = 20;
23
+ static readonly MOVE = 21;
24
+ static readonly OBJECT = 22;
25
+ static readonly ENCODING = 23;
26
+ static readonly FREQ = 24;
27
+ static readonly IDLETIME = 25;
28
+ static readonly REFCOUNT = 26;
29
+ static readonly PERSIST = 27;
30
+ static readonly TTL = 28;
31
+ static readonly PTTL = 29;
32
+ static readonly RANDOMKEY = 30;
33
+ static readonly RENAME = 31;
34
+ static readonly RENAMENX = 32;
35
+ static readonly SCAN = 33;
36
+ static readonly MATCH = 34;
37
+ static readonly COUNT = 35;
38
+ static readonly TYPE = 36;
39
+ static readonly TOUCH = 37;
40
+ static readonly WAIT = 38;
41
+ static readonly LEFT = 39;
42
+ static readonly RIGHT = 40;
43
+ static readonly BEFORE = 41;
44
+ static readonly AFTER = 42;
45
+ static readonly RANK = 43;
46
+ static readonly MAXLEN = 44;
47
+ static readonly LIMIT = 45;
48
+ static readonly MIN = 46;
49
+ static readonly MAX = 47;
50
+ static readonly CH = 48;
51
+ static readonly WITHSCORE = 49;
52
+ static readonly WITHSCORES = 50;
53
+ static readonly WEIGHTS = 51;
54
+ static readonly AGGREGATE = 52;
55
+ static readonly SUM = 53;
56
+ static readonly BYSCORE = 54;
57
+ static readonly BYLEX = 55;
58
+ static readonly REV = 56;
59
+ static readonly FIELDS = 57;
60
+ static readonly WITHVALUES = 58;
61
+ static readonly NOVALUES = 59;
62
+ static readonly SET = 60;
63
+ static readonly GET = 61;
64
+ static readonly INCR = 62;
65
+ static readonly INCRBY = 63;
66
+ static readonly DECR = 64;
67
+ static readonly DECRBY = 65;
68
+ static readonly EX = 66;
69
+ static readonly PX = 67;
70
+ static readonly EXAT = 68;
71
+ static readonly PXAT = 69;
72
+ static readonly KEEPTTL = 70;
73
+ static readonly APPEND = 71;
74
+ static readonly GETDEL = 72;
75
+ static readonly GETEX = 73;
76
+ static readonly GETRANGE = 74;
77
+ static readonly GETSET = 75;
78
+ static readonly MGET = 76;
79
+ static readonly MSET = 77;
80
+ static readonly MSETNX = 78;
81
+ static readonly PSETEX = 79;
82
+ static readonly SETEX = 80;
83
+ static readonly SETNX = 81;
84
+ static readonly SETRANGE = 82;
85
+ static readonly STRLEN = 83;
86
+ static readonly SUBSTR = 84;
87
+ static readonly LMOVE = 85;
88
+ static readonly BLMOVE = 86;
89
+ static readonly LMPOP = 87;
90
+ static readonly BLMPOP = 88;
91
+ static readonly LPOP = 89;
92
+ static readonly BLPOP = 90;
93
+ static readonly RPOP = 91;
94
+ static readonly BRPOP = 92;
95
+ static readonly RPOPLPUSH = 93;
96
+ static readonly BRPOPLPUSH = 94;
97
+ static readonly LINDEX = 95;
98
+ static readonly LINSERT = 96;
99
+ static readonly LLEN = 97;
100
+ static readonly LPOS = 98;
101
+ static readonly LPUSH = 99;
102
+ static readonly LPUSHX = 100;
103
+ static readonly RPUSH = 101;
104
+ static readonly RPUSHX = 102;
105
+ static readonly LRANGE = 103;
106
+ static readonly LREM = 104;
107
+ static readonly LSET = 105;
108
+ static readonly LTRIM = 106;
109
+ static readonly SADD = 107;
110
+ static readonly SCARD = 108;
111
+ static readonly SDIFF = 109;
112
+ static readonly SDIFFSTORE = 110;
113
+ static readonly SINTER = 111;
114
+ static readonly SINTERCARD = 112;
115
+ static readonly SINTERSTORE = 113;
116
+ static readonly SISMEMBER = 114;
117
+ static readonly SMISMEMBER = 115;
118
+ static readonly SMEMBERS = 116;
119
+ static readonly SMOVE = 117;
120
+ static readonly SPOP = 118;
121
+ static readonly SRANDMEMBER = 119;
122
+ static readonly SREM = 120;
123
+ static readonly SSCAN = 121;
124
+ static readonly SUNION = 122;
125
+ static readonly SUNIONSTORE = 123;
126
+ static readonly ZMPOP = 124;
127
+ static readonly BZMPOP = 125;
128
+ static readonly ZPOPMAX = 126;
129
+ static readonly BZPOPMAX = 127;
130
+ static readonly ZPOPMIN = 128;
131
+ static readonly BZPOPMIN = 129;
132
+ static readonly ZADD = 130;
133
+ static readonly ZCARD = 131;
134
+ static readonly ZCOUNT = 132;
135
+ static readonly ZDIFF = 133;
136
+ static readonly ZDIFFSTORE = 134;
137
+ static readonly ZINCRBY = 135;
138
+ static readonly ZINTER = 136;
139
+ static readonly ZINTERCARD = 137;
140
+ static readonly ZINTERSTORE = 138;
141
+ static readonly ZLEXCOUNT = 139;
142
+ static readonly ZSCORE = 140;
143
+ static readonly ZMSCORE = 141;
144
+ static readonly ZRANDMEMBER = 142;
145
+ static readonly ZRANGE = 143;
146
+ static readonly ZRANGEBYLEX = 144;
147
+ static readonly ZRANGEBYSCORE = 145;
148
+ static readonly ZRANGESTORE = 146;
149
+ static readonly ZRANK = 147;
150
+ static readonly ZREM = 148;
151
+ static readonly ZREMRANGEBYLEX = 149;
152
+ static readonly ZREMRANGEBYRANK = 150;
153
+ static readonly ZREMRANGEBYSCORE = 151;
154
+ static readonly ZREVRANGE = 152;
155
+ static readonly ZREVRANGEBYLEX = 153;
156
+ static readonly ZREVRANGEBYSCORE = 154;
157
+ static readonly ZREVRANK = 155;
158
+ static readonly ZSCAN = 156;
159
+ static readonly ZUNION = 157;
160
+ static readonly ZUNIONSTORE = 158;
161
+ static readonly HDEL = 159;
162
+ static readonly HEXISTS = 160;
163
+ static readonly HEXPIRE = 161;
164
+ static readonly HPEXPIRE = 162;
165
+ static readonly HEXPIREAT = 163;
166
+ static readonly HPEXPIREAT = 164;
167
+ static readonly HEXPIRETIME = 165;
168
+ static readonly HPEXPIRETIME = 166;
169
+ static readonly HGET = 167;
170
+ static readonly HMGET = 168;
171
+ static readonly HGETALL = 169;
172
+ static readonly HINCRBY = 170;
173
+ static readonly HKEYS = 171;
174
+ static readonly HLEN = 172;
175
+ static readonly HSET = 173;
176
+ static readonly HMSET = 174;
177
+ static readonly HSETNX = 175;
178
+ static readonly HPERSIST = 176;
179
+ static readonly HTTL = 177;
180
+ static readonly HPTTL = 178;
181
+ static readonly HRANDFIELD = 179;
182
+ static readonly HSCAN = 180;
183
+ static readonly HSTRLEN = 181;
184
+ static readonly HVALS = 182;
185
+ static readonly SINGLE_QUOTE = 183;
186
+ static readonly DOUBLE_QUOTE = 184;
187
+ static readonly POSITIVE_DECIMAL_LITERAL = 185;
188
+ static readonly DECIMAL_LITERAL = 186;
189
+ static readonly DECIMAL_SCORE_LITERAL = 187;
190
+ static readonly IDENTIFIER = 188;
191
+ static readonly channelNames: string[];
192
+ static readonly literalNames: (string | null)[];
193
+ static readonly symbolicNames: (string | null)[];
194
+ static readonly modeNames: string[];
195
+ static readonly ruleNames: string[];
196
+ constructor(input: antlr.CharStream);
197
+ get grammarFileName(): string;
198
+ get literalNames(): (string | null)[];
199
+ get symbolicNames(): (string | null)[];
200
+ get ruleNames(): string[];
201
+ get serializedATN(): number[];
202
+ get channelNames(): string[];
203
+ get modeNames(): string[];
204
+ static readonly _serializedATN: number[];
205
+ private static __ATN;
206
+ static get _ATN(): antlr.ATN;
207
+ private static readonly vocabulary;
208
+ get vocabulary(): antlr.Vocabulary;
209
+ private static readonly decisionsToDFA;
210
+ }
211
+ //# sourceMappingURL=RedisLexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisLexer.d.ts","sourceRoot":"","sources":["../../src/generated/RedisLexer.ts"],"names":[],"mappings":"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"}