kami-redis 2.0.1 → 2.0.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # kami-redis
2
2
 
3
+ ## 2.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 3c47730: fixed
8
+
9
+ ## 2.0.2
10
+
11
+ ### Patch Changes
12
+
13
+ - c9fe624: added shebang
14
+
3
15
  ## 2.0.1
4
16
 
5
17
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1,240 +1,6 @@
1
- // src/index.ts
2
- import meow from "meow";
3
- import pc2 from "picocolors";
4
- import { createClient } from "redis";
5
-
6
- // src/utils/clean-up.ts
7
- function cleanup() {
8
- return console.clear();
9
- }
10
-
11
- // src/utils/graceful-exit.ts
12
- async function gracefulExit(code = 0) {
13
- try {
14
- if (process.stdin.isTTY) {
15
- try {
16
- process.stdin.setRawMode(false);
17
- } catch {
18
- }
19
- }
20
- try {
21
- process.stdin.pause();
22
- } catch {
23
- await client.quit();
24
- }
25
- } catch {
26
- } finally {
27
- cleanup();
28
- process.exit(code);
29
- }
30
- }
31
-
32
- // src/utils/is-redis-url.ts
33
- function isRedisUrl(url2) {
34
- let parsed;
35
- try {
36
- parsed = new URL(url2);
37
- } catch {
38
- return false;
39
- }
40
- if (parsed.protocol !== "redis:" && parsed.protocol !== "rediss:") {
41
- return false;
42
- }
43
- if (!parsed.hostname) {
44
- return false;
45
- }
46
- if (parsed.port && Number.isNaN(Number(parsed.port))) {
47
- return false;
48
- }
49
- return true;
50
- }
51
-
52
- // src/utils/prompt-for-key.ts
53
- import inquirer from "inquirer";
54
- async function promptForKey() {
55
- const keys = await client.keys("*");
56
- if (keys.length === 0)
57
- return null;
58
- try {
59
- const { selectedKey } = await inquirer.prompt({
60
- type: "list",
61
- name: "selectedKey",
62
- message: "Select a key to view its value:",
63
- choices: keys,
64
- pageSize: 20,
65
- theme: {
66
- icon: {
67
- cursor: ">"
68
- },
69
- prefix: "0_0"
70
- }
71
- });
72
- return selectedKey;
73
- } catch {
74
- await gracefulExit(0);
75
- }
76
- }
77
-
78
- // src/utils/view-key.ts
79
- import boxen from "boxen";
80
- import highlight from "cli-highlight";
81
- import clipboardy from "clipboardy";
82
- import readline from "readline";
83
- import pc from "picocolors";
84
-
85
- // src/utils/format-value.ts
86
- function formatValue(value) {
87
- if (typeof value === "object" && value !== null) {
88
- return JSON.stringify(value, null, 2);
89
- }
90
- if (typeof value === "string") {
91
- try {
92
- return JSON.stringify(JSON.parse(value), null, 2);
93
- } catch {
94
- return value;
95
- }
96
- }
97
- return String(value);
98
- }
99
-
100
- // src/utils/get-value.ts
101
- async function getValue(selectedKey, type) {
102
- switch (type) {
103
- case "string":
104
- return client.get(selectedKey);
105
- case "hash":
106
- return client.hGetAll(selectedKey);
107
- case "list":
108
- return client.lRange(selectedKey, 0, -1);
109
- case "set":
110
- return client.sMembers(selectedKey);
111
- case "zset":
112
- return client.zRangeWithScores(selectedKey, 0, -1);
113
- default:
114
- return "(unsupported type)";
115
- }
116
- }
117
-
118
- // src/utils/view-key.ts
119
- async function viewKey(selectedKey) {
120
- const type = await client.type(selectedKey);
121
- const value = await getValue(selectedKey, type);
122
- cleanup();
123
- console.log(
124
- boxen(highlight(formatValue(value), { language: "json", ignoreIllegals: true }), {
125
- borderColor: "cyan",
126
- padding: 1,
127
- title: selectedKey,
128
- borderStyle: "round"
129
- })
130
- );
131
- console.log(pc.blue("Press 'd' to delete, 'c' to copy, \u2190 to go back, Ctrl+C to quit."));
132
- readline.emitKeypressEvents(process.stdin);
133
- try {
134
- process.stdin.resume();
135
- } catch {
136
- }
137
- if (process.stdin.isTTY) {
138
- process.stdin.setRawMode(true);
139
- }
140
- return await new Promise((resolve) => {
141
- const onKeypress = async (str, key) => {
142
- if (!key) {
143
- return;
144
- }
145
- if (key.name === "d" && !key.ctrl && !key.meta) {
146
- try {
147
- await client.del(selectedKey);
148
- } catch {
149
- console.error(pc.red("Delete failed:"));
150
- }
151
- cleanup();
152
- resolve("deleted");
153
- return;
154
- }
155
- if (key.name === "c" && !key.ctrl && !key.meta) {
156
- try {
157
- clipboardy.writeSync(formatValue(value));
158
- cleanup();
159
- resolve("back");
160
- } catch (e) {
161
- console.error(pc.red("Copy failed:"), e);
162
- }
163
- return;
164
- }
165
- if (key.name === "left") {
166
- cleanup();
167
- resolve("back");
168
- return;
169
- }
170
- if (key.ctrl && key.name === "c" || key.sequence === "") {
171
- cleanup();
172
- resolve("quit");
173
- }
174
- };
175
- const onData = async (chunk) => {
176
- const s = chunk.toString();
177
- if (s.includes("")) {
178
- cleanup();
179
- resolve("quit");
180
- }
181
- };
182
- process.stdin.on("keypress", onKeypress);
183
- process.stdin.on("data", onData);
184
- });
185
- }
186
-
187
- // src/index.ts
188
- var cli = meow(
189
- `
1
+ #!/usr/bin/env node
2
+ import C from"meow";import w from"picocolors";import{createClient as P}from"redis";function i(){return console.clear()}async function s(t=0){try{if(process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}try{process.stdin.pause()}catch{await e.quit()}}catch{}finally{i(),process.exit(t)}}function m(t){let r;try{r=new URL(t)}catch{return!1}return!(r.protocol!=="redis:"&&r.protocol!=="rediss:"||!r.hostname||r.port&&Number.isNaN(Number(r.port)))}import R from"inquirer";async function d(){let t=await e.keys("*");if(t.length===0)return null;try{let{selectedKey:r}=await R.prompt({type:"list",name:"selectedKey",message:"Select a key to view its value:",choices:t,pageSize:20,theme:{icon:{cursor:">"},prefix:"0_0"}});return r}catch{await s(0)}}import q from"boxen";import S from"cli-highlight";import N from"clipboardy";import U from"readline";import a from"picocolors";function c(t){if(typeof t=="object"&&t!==null)return JSON.stringify(t,null,2);if(typeof t=="string")try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}return String(t)}async function g(t,r){switch(r){case"string":return e.get(t);case"hash":return e.hGetAll(t);case"list":return e.lRange(t,0,-1);case"set":return e.sMembers(t);case"zset":return e.zRangeWithScores(t,0,-1);default:return"(unsupported type)"}}async function y(t){let r=await e.type(t),u=await g(t,r);i(),console.log(q(S(c(u),{language:"json",ignoreIllegals:!0}),{borderColor:"cyan",padding:1,title:t,borderStyle:"round"})),console.log(a.blue("Press 'd' to delete, 'c' to copy, \u2190 to go back, Ctrl+C to quit.")),U.emitKeypressEvents(process.stdin);try{process.stdin.resume()}catch{}return process.stdin.isTTY&&process.stdin.setRawMode(!0),await new Promise(n=>{let h=async(f,o)=>{if(o){if(o.name==="d"&&!o.ctrl&&!o.meta){try{await e.del(t)}catch{console.error(a.red("Delete failed:"))}i(),n("deleted");return}if(o.name==="c"&&!o.ctrl&&!o.meta){try{N.writeSync(c(u)),i(),n("back")}catch(b){console.error(a.red("Copy failed:"),b)}return}if(o.name==="left"){i(),n("back");return}(o.ctrl&&o.name==="c"||o.sequence==="")&&(i(),n("quit"))}},x=async f=>{f.toString().includes("")&&(i(),n("quit"))};process.stdin.on("keypress",h),process.stdin.on("data",x)})}var p=C(`
190
3
  Usage
191
4
  kami-redis <url>
192
- `,
193
- {
194
- importMeta: import.meta
195
- }
196
- );
197
- var [url] = cli.input;
198
- if (!url) {
199
- console.log(cli.help);
200
- process.exit(1);
201
- }
202
- if (!isRedisUrl(url)) {
203
- console.log(cli.help);
204
- console.log(pc2.red("Provided URL is not a valid Redis URL"));
205
- process.exit(1);
206
- }
207
- var client = createClient({ url });
208
- async function main() {
209
- try {
210
- cleanup();
211
- await client.connect();
212
- while (true) {
213
- const selectedKey = await promptForKey();
214
- if (!selectedKey) {
215
- console.log("No keys in Redis!");
216
- await client.quit();
217
- process.exit(0);
218
- }
219
- const action = await viewKey(selectedKey);
220
- if (action === "quit") {
221
- await gracefulExit(0);
222
- } else if (action === "deleted") {
223
- continue;
224
- } else if (action === "back") {
225
- continue;
226
- }
227
- }
228
- } catch (err) {
229
- console.error(pc2.red("Unexpected error:"), err);
230
- try {
231
- await client.quit();
232
- } catch {
233
- process.exit(1);
234
- }
235
- }
236
- }
237
- main();
238
- export {
239
- client
240
- };
5
+ `,{importMeta:import.meta}),[l]=p.input;l||(console.log(p.help),process.exit(1));m(l)||(console.log(p.help),console.log(w.red("Provided URL is not a valid Redis URL")),process.exit(1));var e=P({url:l});async function E(){try{for(i(),await e.connect();;){let t=await d();t||(console.log("No keys in Redis!"),await e.quit(),process.exit(0));let r=await y(t);if(r==="quit")await s(0);else{if(r==="deleted")continue;if(r==="back")continue}}}catch(t){console.error(w.red("Unexpected error:"),t);try{await e.quit()}catch{process.exit(1)}}}E();export{e as client};
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/clean-up.ts","../src/utils/graceful-exit.ts","../src/utils/is-redis-url.ts","../src/utils/prompt-for-key.ts","../src/utils/view-key.ts","../src/utils/format-value.ts","../src/utils/get-value.ts"],"sourcesContent":["#!/usr/bin/env node\n/* eslint-disable style/no-tabs */\nimport meow from \"meow\";\nimport pc from \"picocolors\";\nimport { createClient } from \"redis\";\n\nimport { cleanup } from \"./utils/clean-up\";\nimport { gracefulExit } from \"./utils/graceful-exit\";\nimport { isRedisUrl } from \"./utils/is-redis-url\";\nimport { promptForKey } from \"./utils/prompt-for-key\";\nimport { viewKey } from \"./utils/view-key\";\n\nconst cli = meow(\n `\n\tUsage\n\t kami-redis <url>\n`,\n {\n importMeta: import.meta,\n },\n);\n\nconst [url] = cli.input;\n\nif (!url) {\n console.log(cli.help);\n process.exit(1);\n}\n\nif (!isRedisUrl(url)) {\n console.log(cli.help);\n console.log(pc.red(\"Provided URL is not a valid Redis URL\"));\n process.exit(1);\n}\n\nexport const client = createClient({ url });\n\nasync function main() {\n try {\n cleanup();\n await client.connect();\n\n while (true) {\n const selectedKey = await promptForKey();\n if (!selectedKey) {\n console.log(\"No keys in Redis!\");\n await client.quit();\n process.exit(0);\n }\n\n const action = await viewKey(selectedKey);\n\n if (action === \"quit\") {\n await gracefulExit(0);\n }\n else if (action === \"deleted\") {\n continue;\n }\n else if (action === \"back\") {\n continue;\n }\n }\n }\n catch (err) {\n console.error(pc.red(\"Unexpected error:\"), err);\n try {\n await client.quit();\n }\n catch {\n process.exit(1);\n }\n }\n}\n\nmain();\n","export function cleanup() {\n return console.clear();\n}\n","import { client } from \"..\";\nimport { cleanup } from \"./clean-up\";\n\nexport async function gracefulExit(code = 0) {\n try {\n if (process.stdin.isTTY) {\n try {\n process.stdin.setRawMode(false);\n }\n catch {}\n }\n try {\n process.stdin.pause();\n }\n catch {\n await client.quit();\n }\n }\n catch {}\n finally {\n cleanup();\n process.exit(code);\n }\n}\n","export function isRedisUrl(url: string): boolean {\n let parsed;\n try {\n parsed = new URL(url);\n }\n catch {\n return false;\n }\n\n if (parsed.protocol !== \"redis:\" && parsed.protocol !== \"rediss:\") {\n return false;\n }\n\n if (!parsed.hostname) {\n return false;\n }\n\n if (parsed.port && Number.isNaN(Number(parsed.port))) {\n return false;\n }\n\n return true;\n}\n","import inquirer from \"inquirer\";\n\nimport { client } from \"..\";\nimport { gracefulExit } from \"./graceful-exit\";\n\nexport async function promptForKey() {\n const keys = await client.keys(\"*\");\n if (keys.length === 0)\n return null;\n\n try {\n const { selectedKey } = await inquirer.prompt({\n type: \"list\",\n name: \"selectedKey\",\n message: \"Select a key to view its value:\",\n choices: keys,\n pageSize: 20,\n theme: {\n icon: {\n cursor: \">\",\n },\n prefix: \"0_0\",\n },\n });\n return selectedKey;\n }\n catch {\n await gracefulExit(0);\n }\n}\n","import type { Buffer } from \"node:buffer\";\n\nimport boxen from \"boxen\";\nimport highlight from \"cli-highlight\";\nimport clipboardy from \"clipboardy\";\nimport readline from \"node:readline\";\nimport pc from \"picocolors\";\n\nimport { client } from \"..\";\nimport { cleanup } from \"./clean-up\";\nimport { formatValue } from \"./format-value\";\nimport { getValue } from \"./get-value\";\n\nexport async function viewKey(selectedKey: string): Promise<\"back\" | \"deleted\" | \"quit\"> {\n const type = await client.type(selectedKey);\n\n const value = await getValue(selectedKey, type);\n\n cleanup();\n\n console.log(\n boxen(highlight(formatValue(value), { language: \"json\", ignoreIllegals: true }), {\n borderColor: \"cyan\",\n padding: 1,\n title: selectedKey,\n borderStyle: \"round\",\n }),\n );\n console.log(pc.blue(\"Press 'd' to delete, 'c' to copy, ← to go back, Ctrl+C to quit.\"));\n\n readline.emitKeypressEvents(process.stdin);\n\n try {\n process.stdin.resume();\n }\n\n catch {}\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n\n return await new Promise((resolve) => {\n const onKeypress = async (str: string, key: readline.Key) => {\n if (!key) {\n return;\n }\n\n if (key.name === \"d\" && !key.ctrl && !key.meta) {\n try {\n await client.del(selectedKey);\n }\n catch {\n console.error(pc.red(\"Delete failed:\"));\n }\n cleanup();\n resolve(\"deleted\");\n return;\n }\n\n if (key.name === \"c\" && !key.ctrl && !key.meta) {\n try {\n clipboardy.writeSync(formatValue(value));\n cleanup();\n resolve(\"back\");\n }\n catch (e) {\n console.error(pc.red(\"Copy failed:\"), e);\n }\n return;\n }\n\n if (key.name === \"left\") {\n cleanup();\n resolve(\"back\");\n return;\n }\n\n if ((key.ctrl && key.name === \"c\") || key.sequence === \"\\u0003\") {\n cleanup();\n resolve(\"quit\");\n }\n };\n\n const onData = async (chunk: Buffer | string) => {\n const s = chunk.toString();\n if (s.includes(\"\\u0003\")) {\n cleanup();\n resolve(\"quit\");\n }\n };\n\n process.stdin.on(\"keypress\", onKeypress);\n process.stdin.on(\"data\", onData);\n });\n}\n","export function formatValue(value: unknown): string {\n if (typeof value === \"object\" && value !== null) {\n return JSON.stringify(value, null, 2);\n }\n\n if (typeof value === \"string\") {\n try {\n return JSON.stringify(JSON.parse(value), null, 2);\n }\n catch {\n return value;\n }\n }\n\n return String(value);\n}\n","import { client } from \"..\";\n\nexport async function getValue(selectedKey: string, type: string): Promise<unknown> {\n switch (type) {\n case \"string\":\n return client.get(selectedKey);\n case \"hash\":\n return client.hGetAll(selectedKey);\n case \"list\":\n return client.lRange(selectedKey, 0, -1);\n case \"set\":\n return client.sMembers(selectedKey);\n case \"zset\":\n return client.zRangeWithScores(selectedKey, 0, -1);\n default:\n return \"(unsupported type)\";\n }\n}\n"],"mappings":"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","names":["meow","pc","createClient","cleanup","gracefulExit","code","client","cleanup","isRedisUrl","url","parsed","inquirer","promptForKey","keys","client","selectedKey","inquirer","gracefulExit","boxen","highlight","clipboardy","readline","pc","formatValue","value","getValue","selectedKey","type","client","viewKey","selectedKey","type","client","value","getValue","cleanup","boxen","highlight","formatValue","pc","readline","resolve","onKeypress","str","key","clipboardy","e","onData","chunk","cli","meow","url","isRedisUrl","pc","client","createClient","main","cleanup","selectedKey","promptForKey","action","viewKey","gracefulExit","err"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kami-redis",
3
3
  "type": "module",
4
- "version": "2.0.1",
4
+ "version": "2.0.3",
5
5
  "description": "Browse, inspect, copy, and delete Redis keys from your CLI",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  /* eslint-disable style/no-tabs */
2
3
  import meow from "meow";
3
4
  import pc from "picocolors";
package/tsup.config.ts CHANGED
@@ -5,5 +5,7 @@ export default defineConfig({
5
5
  outDir: "dist",
6
6
  clean: true,
7
7
  format: ["esm"],
8
- dts: true,
8
+ platform: "node",
9
+ minify: true,
10
+ sourcemap: true,
9
11
  });