@requestdock/cli 0.1.1 → 0.2.1

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.
@@ -0,0 +1,185 @@
1
+ import ora from 'ora';
2
+ import { search } from '@inquirer/prompts';
3
+ import { createEmptyRequest, } from '@requestdock/engine/node';
4
+ import { formatResponse, formatRunResultLine, formatRunSummary } from '../output.js';
5
+ import { formatError, formatSuccess, formatTiming, methodColor, methodBadge, icons, semantic, } from '../styles.js';
6
+ export async function handleRequest(state, method, url, body) {
7
+ let fullUrl = url;
8
+ if (state.baseUrl && url.startsWith('/')) {
9
+ fullUrl = state.baseUrl.replace(/\/+$/, '') + url;
10
+ }
11
+ if (!fullUrl.startsWith('http://') && !fullUrl.startsWith('https://')) {
12
+ fullUrl = 'https://' + fullUrl;
13
+ }
14
+ const headers = state.sessionHeaders.map((h, i) => ({
15
+ ...h, id: String(i),
16
+ }));
17
+ let bodyContent = body || '';
18
+ if ((bodyContent.startsWith("'") && bodyContent.endsWith("'")) ||
19
+ (bodyContent.startsWith('"') && bodyContent.endsWith('"'))) {
20
+ bodyContent = bodyContent.slice(1, -1);
21
+ }
22
+ const hasBody = bodyContent.length > 0;
23
+ let isJson = false;
24
+ if (hasBody) {
25
+ try {
26
+ JSON.parse(bodyContent);
27
+ isJson = true;
28
+ }
29
+ catch { /* not JSON */ }
30
+ }
31
+ const request = createEmptyRequest({
32
+ url: fullUrl,
33
+ method: method.toUpperCase(),
34
+ headers,
35
+ body: hasBody
36
+ ? { type: isJson ? 'json' : 'raw', content: bodyContent }
37
+ : { type: 'none', content: '' },
38
+ });
39
+ const spinner = process.stderr.isTTY
40
+ ? ora({ text: `${methodColor(method)} ${semantic.muted(fullUrl)}`, stream: process.stderr, spinner: 'dots' }).start()
41
+ : null;
42
+ try {
43
+ const response = await state.engine.sendRequest(request, state.activeEnv);
44
+ spinner?.stop();
45
+ console.log(formatResponse(response, 'human'));
46
+ await state.history.add({
47
+ method: method.toUpperCase(),
48
+ url: fullUrl,
49
+ statusCode: response.statusCode,
50
+ timeMs: response.timing.totalMs,
51
+ timestamp: Date.now(),
52
+ headers: state.sessionHeaders.map(h => ({ key: h.key, value: h.value })),
53
+ body: bodyContent || undefined,
54
+ });
55
+ }
56
+ catch (err) {
57
+ spinner?.stop();
58
+ console.log(formatError(err instanceof Error ? err.message : String(err)));
59
+ }
60
+ }
61
+ export async function handleEnv(state, name) {
62
+ const envs = await state.storage.loadEnvironments();
63
+ if (envs.length === 0) {
64
+ console.log(formatError('No environments found'));
65
+ return;
66
+ }
67
+ if (name) {
68
+ const env = envs.find(e => e.name.toLowerCase() === name.toLowerCase());
69
+ if (!env) {
70
+ console.log(formatError(`Environment "${name}" not found`));
71
+ return;
72
+ }
73
+ state.activeEnv = env;
74
+ console.log(formatSuccess(`Switched to ${semantic.info(env.name)}`));
75
+ return;
76
+ }
77
+ try {
78
+ const selected = await search({
79
+ message: 'Select environment',
80
+ source: (input) => {
81
+ const filtered = input
82
+ ? envs.filter(e => e.name.toLowerCase().includes(input.toLowerCase()))
83
+ : envs;
84
+ return filtered.map(e => ({ name: e.name, value: e.name }));
85
+ },
86
+ });
87
+ const env = envs.find(e => e.name === selected);
88
+ if (env) {
89
+ state.activeEnv = env;
90
+ console.log(formatSuccess(`Switched to ${semantic.info(env.name)}`));
91
+ }
92
+ }
93
+ catch {
94
+ // User cancelled
95
+ }
96
+ }
97
+ export function handleHeadersSet(state, key, value) {
98
+ const existing = state.sessionHeaders.findIndex(h => h.key.toLowerCase() === key.toLowerCase());
99
+ if (existing >= 0) {
100
+ state.sessionHeaders[existing].value = value;
101
+ }
102
+ else {
103
+ state.sessionHeaders.push({ id: String(state.sessionHeaders.length), key, value, enabled: true });
104
+ }
105
+ console.log(formatSuccess(`${semantic.info(key)}: ${semantic.muted(value)}`));
106
+ }
107
+ export function handleHeadersClear(state) {
108
+ state.sessionHeaders = [];
109
+ console.log(formatSuccess('Cleared all session headers'));
110
+ }
111
+ export function handleHeadersList(state) {
112
+ if (state.sessionHeaders.length === 0) {
113
+ console.log(semantic.muted('\n No session headers set\n'));
114
+ return;
115
+ }
116
+ console.log('');
117
+ for (const h of state.sessionHeaders) {
118
+ console.log(` ${semantic.info(h.key)} ${h.value}`);
119
+ }
120
+ console.log('');
121
+ }
122
+ export function handleHistoryList(state) {
123
+ const entries = state.history.getRecent(20);
124
+ if (entries.length === 0) {
125
+ console.log(semantic.muted('\n No history yet\n'));
126
+ return;
127
+ }
128
+ console.log('');
129
+ for (let i = 0; i < entries.length; i++) {
130
+ const e = entries[i];
131
+ const idx = semantic.muted(String(i + 1).padStart(3));
132
+ const method = methodBadge(e.method);
133
+ const status = e.statusCode
134
+ ? (e.statusCode < 400 ? semantic.success(String(e.statusCode)) : semantic.error(String(e.statusCode)))
135
+ : semantic.muted('---');
136
+ const timing = formatTiming(e.timeMs);
137
+ let displayUrl = e.url;
138
+ try {
139
+ const parsed = new URL(e.url);
140
+ displayUrl = parsed.host + parsed.pathname + parsed.search;
141
+ }
142
+ catch { /* use full url */ }
143
+ console.log(` ${idx} ${method} ${displayUrl} ${icons.arrow} ${status} ${timing}`);
144
+ }
145
+ console.log(semantic.muted(`\n Type !N to replay (e.g. !1)\n`));
146
+ }
147
+ export async function handleReplay(state, index) {
148
+ const entry = state.history.getByIndex(index);
149
+ if (!entry) {
150
+ console.log(formatError(`No history entry at index ${index}`));
151
+ return;
152
+ }
153
+ await handleRequest(state, entry.method, entry.url, entry.body);
154
+ }
155
+ export async function handleRun(state, collectionName) {
156
+ try {
157
+ const results = [];
158
+ let index = 0;
159
+ for await (const result of state.engine.runCollection(collectionName, {
160
+ environment: state.activeEnv,
161
+ })) {
162
+ results.push(result);
163
+ console.log(formatRunResultLine(result, index));
164
+ index++;
165
+ }
166
+ console.log(formatRunSummary(results, 'human'));
167
+ }
168
+ catch (err) {
169
+ console.log(formatError(err instanceof Error ? err.message : String(err)));
170
+ }
171
+ }
172
+ export function handleBase(state, url) {
173
+ if (!url) {
174
+ if (state.baseUrl) {
175
+ console.log(`\n ${semantic.muted('Base URL:')} ${state.baseUrl}\n`);
176
+ }
177
+ else {
178
+ console.log(semantic.muted('\n No base URL set\n'));
179
+ }
180
+ return;
181
+ }
182
+ state.baseUrl = url;
183
+ console.log(formatSuccess(`Base URL set to ${semantic.info(url)}`));
184
+ }
185
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/repl/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CompleterResult } from 'node:readline';
2
+ export declare function createCompleter(getCollections: () => string[], getEnvironments: () => string[]): (line: string) => CompleterResult;
@@ -0,0 +1,34 @@
1
+ const METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'];
2
+ const COMMANDS = ['env', 'headers', 'history', 'run', 'base', 'help', 'clear', 'exit'];
3
+ export function createCompleter(getCollections, getEnvironments) {
4
+ return (line) => {
5
+ const trimmed = line.trimStart();
6
+ const parts = trimmed.split(/\s+/);
7
+ if (parts.length <= 1) {
8
+ const all = [...METHODS, ...COMMANDS];
9
+ const hits = all.filter(c => c.toLowerCase().startsWith(trimmed.toLowerCase()));
10
+ return [hits.length ? hits : all, trimmed];
11
+ }
12
+ const first = parts[0].toLowerCase();
13
+ if (first === 'run') {
14
+ const partial = parts.slice(1).join(' ');
15
+ const collections = getCollections();
16
+ const hits = collections.filter(c => c.toLowerCase().startsWith(partial.toLowerCase()));
17
+ return [hits, partial];
18
+ }
19
+ if (first === 'env') {
20
+ const partial = parts.slice(1).join(' ');
21
+ const envs = getEnvironments();
22
+ const hits = envs.filter(e => e.toLowerCase().startsWith(partial.toLowerCase()));
23
+ return [hits, partial];
24
+ }
25
+ if (first === 'headers' && parts.length === 2) {
26
+ const sub = parts[1];
27
+ const options = ['set', 'clear', 'list'];
28
+ const hits = options.filter(o => o.startsWith(sub.toLowerCase()));
29
+ return [hits, sub];
30
+ }
31
+ return [[], trimmed];
32
+ };
33
+ }
34
+ //# sourceMappingURL=completer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completer.js","sourceRoot":"","sources":["../../src/repl/completer.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAC7E,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAEvF,MAAM,UAAU,eAAe,CAC7B,cAA8B,EAC9B,eAA+B;IAE/B,OAAO,CAAC,IAAY,EAAmB,EAAE;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface HistoryEntry {
2
+ method: string;
3
+ url: string;
4
+ statusCode?: number;
5
+ timeMs: number;
6
+ timestamp: number;
7
+ headers?: Array<{
8
+ key: string;
9
+ value: string;
10
+ }>;
11
+ body?: string;
12
+ }
13
+ export declare class ReplHistory {
14
+ private entries;
15
+ private filePath;
16
+ constructor(dir: string);
17
+ load(): Promise<void>;
18
+ add(entry: HistoryEntry): Promise<void>;
19
+ getRecent(count?: number): HistoryEntry[];
20
+ getByIndex(index: number): HistoryEntry | undefined;
21
+ private save;
22
+ }
@@ -0,0 +1,43 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { join, dirname } from 'node:path';
3
+ const MAX_ENTRIES = 100;
4
+ export class ReplHistory {
5
+ entries = [];
6
+ filePath;
7
+ constructor(dir) {
8
+ this.filePath = join(dir, 'history.json');
9
+ }
10
+ async load() {
11
+ try {
12
+ const data = await readFile(this.filePath, 'utf-8');
13
+ this.entries = JSON.parse(data);
14
+ }
15
+ catch {
16
+ this.entries = [];
17
+ }
18
+ }
19
+ async add(entry) {
20
+ this.entries.push(entry);
21
+ if (this.entries.length > MAX_ENTRIES) {
22
+ this.entries = this.entries.slice(-MAX_ENTRIES);
23
+ }
24
+ await this.save();
25
+ }
26
+ getRecent(count = 20) {
27
+ return this.entries.slice(-count);
28
+ }
29
+ getByIndex(index) {
30
+ const recent = this.getRecent();
31
+ return recent[index - 1];
32
+ }
33
+ async save() {
34
+ try {
35
+ await mkdir(dirname(this.filePath), { recursive: true });
36
+ await writeFile(this.filePath, JSON.stringify(this.entries, null, 2), 'utf-8');
37
+ }
38
+ catch {
39
+ // Silently fail — history is best-effort
40
+ }
41
+ }
42
+ }
43
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/repl/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAY1C,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,OAAO,WAAW;IACd,OAAO,GAAmB,EAAE,CAAC;IAC7B,QAAQ,CAAS;IAEzB,YAAY,GAAW;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAmB;QAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,KAAK,GAAG,EAAE;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,yCAAyC;QAC3C,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ export type ParsedCommand = {
2
+ type: 'request';
3
+ method: string;
4
+ url: string;
5
+ body?: string;
6
+ } | {
7
+ type: 'env';
8
+ name?: string;
9
+ } | {
10
+ type: 'headers';
11
+ action: 'set';
12
+ key: string;
13
+ value: string;
14
+ } | {
15
+ type: 'headers';
16
+ action: 'clear';
17
+ } | {
18
+ type: 'headers';
19
+ action: 'list';
20
+ } | {
21
+ type: 'history';
22
+ } | {
23
+ type: 'replay';
24
+ index: number;
25
+ } | {
26
+ type: 'run';
27
+ collection: string;
28
+ } | {
29
+ type: 'base';
30
+ url?: string;
31
+ } | {
32
+ type: 'clear';
33
+ } | {
34
+ type: 'help';
35
+ } | {
36
+ type: 'exit';
37
+ } | {
38
+ type: 'unknown';
39
+ input: string;
40
+ };
41
+ export declare function parseInput(line: string): ParsedCommand;
@@ -0,0 +1,93 @@
1
+ const HTTP_METHODS = new Set(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']);
2
+ const COMMANDS = new Set([
3
+ 'exit', 'quit', 'clear', 'cls', 'history', 'env', 'base',
4
+ 'headers', 'run', 'help',
5
+ ]);
6
+ // Matches strings that look like domains: word.tld or word.word.tld etc.
7
+ // Must have at least one dot with 2+ chars after the last dot.
8
+ const BARE_DOMAIN_RE = /^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)+/;
9
+ function looksLikeUrl(s) {
10
+ if (s.startsWith('http://') || s.startsWith('https://') || s.startsWith('/')) {
11
+ return true;
12
+ }
13
+ // Bare domain: has a dot, first word isn't a known command
14
+ const firstWord = s.split(/[\s/]/)[0];
15
+ if (COMMANDS.has(firstWord.toLowerCase()))
16
+ return false;
17
+ return BARE_DOMAIN_RE.test(s);
18
+ }
19
+ export function parseInput(line) {
20
+ const trimmed = line.trim();
21
+ if (!trimmed)
22
+ return { type: 'unknown', input: '' };
23
+ // !N replay
24
+ if (trimmed.startsWith('!')) {
25
+ const index = parseInt(trimmed.slice(1), 10);
26
+ if (Number.isFinite(index) && index > 0) {
27
+ return { type: 'replay', index };
28
+ }
29
+ return { type: 'unknown', input: trimmed };
30
+ }
31
+ const parts = trimmed.split(/\s+/);
32
+ const first = parts[0].toLowerCase();
33
+ // Simple commands
34
+ if (first === 'exit' || first === 'quit')
35
+ return { type: 'exit' };
36
+ if (first === 'clear' || first === 'cls')
37
+ return { type: 'clear' };
38
+ if (first === 'history')
39
+ return { type: 'history' };
40
+ if (first === 'help' || first === '?')
41
+ return { type: 'help' };
42
+ // env [name]
43
+ if (first === 'env') {
44
+ return { type: 'env', name: parts.slice(1).join(' ') || undefined };
45
+ }
46
+ // base [url]
47
+ if (first === 'base') {
48
+ return { type: 'base', url: parts[1] || undefined };
49
+ }
50
+ // headers set/clear/list
51
+ if (first === 'headers') {
52
+ const action = parts[1]?.toLowerCase();
53
+ if (action === 'clear')
54
+ return { type: 'headers', action: 'clear' };
55
+ if (action === 'set' && parts.length >= 3) {
56
+ const rest = parts.slice(2).join(' ');
57
+ const colonIndex = rest.indexOf(':');
58
+ if (colonIndex > 0) {
59
+ return {
60
+ type: 'headers',
61
+ action: 'set',
62
+ key: rest.slice(0, colonIndex).trim(),
63
+ value: rest.slice(colonIndex + 1).trim(),
64
+ };
65
+ }
66
+ }
67
+ return { type: 'headers', action: 'list' };
68
+ }
69
+ // run <collection>
70
+ if (first === 'run') {
71
+ const collection = parts.slice(1).join(' ');
72
+ if (collection)
73
+ return { type: 'run', collection };
74
+ return { type: 'unknown', input: trimmed };
75
+ }
76
+ // HTTP request: METHOD URL [-b body]
77
+ const upperFirst = parts[0].toUpperCase();
78
+ if (HTTP_METHODS.has(upperFirst)) {
79
+ const url = parts[1] || '';
80
+ const bodyFlagIndex = parts.indexOf('-b');
81
+ const body = bodyFlagIndex >= 0 ? parts.slice(bodyFlagIndex + 1).join(' ') : undefined;
82
+ return { type: 'request', method: upperFirst, url, body };
83
+ }
84
+ // Bare URL or domain (google.com, https://..., /path, api.example.com/users)
85
+ if (looksLikeUrl(trimmed)) {
86
+ const bodyFlagIndex = parts.indexOf('-b');
87
+ const url = parts[0];
88
+ const body = bodyFlagIndex >= 0 ? parts.slice(bodyFlagIndex + 1).join(' ') : undefined;
89
+ return { type: 'request', method: 'GET', url, body };
90
+ }
91
+ return { type: 'unknown', input: trimmed };
92
+ }
93
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/repl/parser.ts"],"names":[],"mappings":"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"}
package/dist/styles.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { type ChalkInstance } from 'chalk';
2
2
  export declare const brand: {
3
3
  primary: ChalkInstance;
4
+ secondary: ChalkInstance;
5
+ soft: ChalkInstance;
4
6
  accent: ChalkInstance;
5
7
  dim: ChalkInstance;
6
8
  bold: ChalkInstance;
@@ -10,8 +12,10 @@ export declare const semantic: {
10
12
  warning: ChalkInstance;
11
13
  error: ChalkInstance;
12
14
  info: ChalkInstance;
15
+ muted: ChalkInstance;
13
16
  };
14
17
  export declare function methodColor(method: string): string;
18
+ export declare function methodBadge(method: string): string;
15
19
  export declare function statusBadge(code: number, text: string): string;
16
20
  export declare const icons: {
17
21
  readonly check: string;
@@ -20,12 +24,19 @@ export declare const icons: {
20
24
  readonly dot: string;
21
25
  readonly triangle: string;
22
26
  readonly dash: string;
23
- readonly folder: string;
24
- readonly file: string;
27
+ readonly bullet: string;
25
28
  };
26
29
  export declare function formatTiming(ms: number): string;
27
30
  export declare function formatSize(bytes: number): string;
28
31
  export declare function formatError(message: string): string;
29
32
  export declare function formatSuccess(message: string): string;
33
+ export declare function rule(width?: number): string;
34
+ export declare function formatResponseHeaders(headers: Record<string, string>, opts?: {
35
+ maxHeaders?: number;
36
+ showAll?: boolean;
37
+ }): string;
38
+ export declare function formatBodyPreview(body: string, contentType: string, size: number): string;
30
39
  export declare function highlightJson(jsonStr: string): string;
31
40
  export declare function renderBanner(): string;
41
+ export declare function renderReplWelcome(): string;
42
+ export declare function buildPrompt(envName?: string): string;