shell-dsl 0.0.40 → 0.0.42
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/README.md +89 -0
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/index.cjs +8 -1
- package/dist/cjs/src/index.cjs.map +3 -3
- package/dist/cjs/src/input-analysis.cjs +154 -0
- package/dist/cjs/src/input-analysis.cjs.map +10 -0
- package/dist/cjs/src/interpreter/context.cjs +3 -1
- package/dist/cjs/src/interpreter/context.cjs.map +3 -3
- package/dist/cjs/src/interpreter/interpreter.cjs +146 -19
- package/dist/cjs/src/interpreter/interpreter.cjs.map +3 -3
- package/dist/cjs/src/io/async-queue.cjs +105 -0
- package/dist/cjs/src/io/async-queue.cjs.map +10 -0
- package/dist/cjs/src/io/index.cjs +4 -1
- package/dist/cjs/src/io/index.cjs.map +3 -3
- package/dist/cjs/src/io/input-controller.cjs +113 -0
- package/dist/cjs/src/io/input-controller.cjs.map +10 -0
- package/dist/cjs/src/io/stdout.cjs +9 -6
- package/dist/cjs/src/io/stdout.cjs.map +3 -3
- package/dist/cjs/src/shell-dsl.cjs +13 -5
- package/dist/cjs/src/shell-dsl.cjs.map +3 -3
- package/dist/cjs/src/shell-session.cjs +222 -0
- package/dist/cjs/src/shell-session.cjs.map +10 -0
- package/dist/cjs/src/types.cjs.map +2 -2
- package/dist/mjs/package.json +1 -1
- package/dist/mjs/src/index.mjs +17 -2
- package/dist/mjs/src/index.mjs.map +3 -3
- package/dist/mjs/src/input-analysis.mjs +114 -0
- package/dist/mjs/src/input-analysis.mjs.map +10 -0
- package/dist/mjs/src/interpreter/context.mjs +3 -1
- package/dist/mjs/src/interpreter/context.mjs.map +3 -3
- package/dist/mjs/src/interpreter/interpreter.mjs +146 -19
- package/dist/mjs/src/interpreter/interpreter.mjs.map +3 -3
- package/dist/mjs/src/io/async-queue.mjs +64 -0
- package/dist/mjs/src/io/async-queue.mjs.map +10 -0
- package/dist/mjs/src/io/index.mjs +4 -1
- package/dist/mjs/src/io/index.mjs.map +3 -3
- package/dist/mjs/src/io/input-controller.mjs +72 -0
- package/dist/mjs/src/io/input-controller.mjs.map +10 -0
- package/dist/mjs/src/io/stdout.mjs +9 -6
- package/dist/mjs/src/io/stdout.mjs.map +3 -3
- package/dist/mjs/src/shell-dsl.mjs +13 -5
- package/dist/mjs/src/shell-dsl.mjs.map +3 -3
- package/dist/mjs/src/shell-session.mjs +182 -0
- package/dist/mjs/src/shell-session.mjs.map +10 -0
- package/dist/mjs/src/types.mjs.map +2 -2
- package/dist/types/src/index.d.ts +5 -2
- package/dist/types/src/input-analysis.d.ts +14 -0
- package/dist/types/src/interpreter/context.d.ts +3 -1
- package/dist/types/src/interpreter/interpreter.d.ts +12 -1
- package/dist/types/src/io/async-queue.d.ts +12 -0
- package/dist/types/src/io/index.d.ts +1 -0
- package/dist/types/src/io/input-controller.d.ts +15 -0
- package/dist/types/src/io/stdout.d.ts +4 -3
- package/dist/types/src/shell-dsl.d.ts +2 -0
- package/dist/types/src/shell-session.d.ts +30 -0
- package/dist/types/src/types.d.ts +58 -0
- package/package.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Command, CommandCompleter, CompletionResult, ShellCommandFallback, ShellConfig, ShellExecution, ShellExecutionOptions, TerminalInfo, VirtualFS } from "./types.ts";
|
|
2
|
+
import type { Program } from "./shell-dsl.ts";
|
|
3
|
+
export interface ShellSessionOptions {
|
|
4
|
+
fs: VirtualFS;
|
|
5
|
+
cwd: string;
|
|
6
|
+
env: Record<string, string>;
|
|
7
|
+
commands: Record<string, Command>;
|
|
8
|
+
completions?: Record<string, CommandCompleter>;
|
|
9
|
+
isTTY?: boolean;
|
|
10
|
+
terminal?: TerminalInfo;
|
|
11
|
+
externalCommand?: ShellCommandFallback;
|
|
12
|
+
}
|
|
13
|
+
export declare class ShellSession {
|
|
14
|
+
private fs;
|
|
15
|
+
private commands;
|
|
16
|
+
private completions;
|
|
17
|
+
private terminal;
|
|
18
|
+
private interpreter;
|
|
19
|
+
constructor(options: ShellSessionOptions);
|
|
20
|
+
run(source: string, options?: ShellExecutionOptions): ShellExecution;
|
|
21
|
+
runProgram(program: Program, options?: ShellExecutionOptions): ShellExecution;
|
|
22
|
+
getCwd(): string;
|
|
23
|
+
getEnv(): Record<string, string>;
|
|
24
|
+
getLastExitCode(): number;
|
|
25
|
+
complete(source: string, cursor?: number): Promise<CompletionResult>;
|
|
26
|
+
dispose(): Promise<void>;
|
|
27
|
+
private completePath;
|
|
28
|
+
private createImmediateExecution;
|
|
29
|
+
}
|
|
30
|
+
export declare function createShellSession(config: ShellConfig): ShellSession;
|
|
@@ -49,6 +49,30 @@ export interface ShellCommandApi {
|
|
|
49
49
|
getLastExitCode(): number;
|
|
50
50
|
exit(exitCode?: number): never;
|
|
51
51
|
}
|
|
52
|
+
export interface TerminalInfo {
|
|
53
|
+
isTTY: boolean;
|
|
54
|
+
columns?: number;
|
|
55
|
+
rows?: number;
|
|
56
|
+
colorDepth?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface CompletionContext {
|
|
59
|
+
source: string;
|
|
60
|
+
cursor: number;
|
|
61
|
+
command: string;
|
|
62
|
+
args: string[];
|
|
63
|
+
word: string;
|
|
64
|
+
wordStart: number;
|
|
65
|
+
wordEnd: number;
|
|
66
|
+
cwd: string;
|
|
67
|
+
env: Record<string, string>;
|
|
68
|
+
fs: VirtualFS;
|
|
69
|
+
terminal: TerminalInfo;
|
|
70
|
+
}
|
|
71
|
+
export interface CompletionResult {
|
|
72
|
+
replacement: string;
|
|
73
|
+
matches: string[];
|
|
74
|
+
}
|
|
75
|
+
export type CommandCompleter = (ctx: CompletionContext) => CompletionResult | Promise<CompletionResult>;
|
|
52
76
|
export interface CommandContext {
|
|
53
77
|
args: string[];
|
|
54
78
|
stdin: Stdin;
|
|
@@ -57,16 +81,27 @@ export interface CommandContext {
|
|
|
57
81
|
fs: VirtualFS;
|
|
58
82
|
cwd: string;
|
|
59
83
|
env: Record<string, string>;
|
|
84
|
+
terminal: TerminalInfo;
|
|
85
|
+
signal: AbortSignal;
|
|
60
86
|
setCwd: (path: string) => void;
|
|
61
87
|
exec?: (name: string, args: string[]) => Promise<ExecResult>;
|
|
62
88
|
shell?: ShellCommandApi;
|
|
63
89
|
}
|
|
90
|
+
export interface ExternalCommandContext extends CommandContext {
|
|
91
|
+
name: string;
|
|
92
|
+
}
|
|
93
|
+
export type ShellCommandFallback = (ctx: ExternalCommandContext) => Promise<number>;
|
|
64
94
|
export interface Stdin {
|
|
65
95
|
stream(): AsyncIterable<Uint8Array>;
|
|
66
96
|
buffer(): Promise<Buffer>;
|
|
67
97
|
text(): Promise<string>;
|
|
68
98
|
lines(): AsyncIterable<string>;
|
|
69
99
|
}
|
|
100
|
+
export interface ShellInputController extends AsyncIterable<Uint8Array> {
|
|
101
|
+
write(chunk: Uint8Array | string): Promise<void>;
|
|
102
|
+
close(): void;
|
|
103
|
+
abort(reason?: unknown): void;
|
|
104
|
+
}
|
|
70
105
|
export interface Stdout {
|
|
71
106
|
write(chunk: Uint8Array): Promise<void>;
|
|
72
107
|
writeText(str: string): Promise<void>;
|
|
@@ -87,12 +122,35 @@ export interface ExecResult {
|
|
|
87
122
|
stderr: Buffer;
|
|
88
123
|
exitCode: number;
|
|
89
124
|
}
|
|
125
|
+
export interface ShellOutputEvent {
|
|
126
|
+
fd: 1 | 2;
|
|
127
|
+
chunk: Uint8Array;
|
|
128
|
+
}
|
|
129
|
+
export type ShellInputSource = AsyncIterable<Uint8Array> | Buffer | string | null;
|
|
130
|
+
export interface ShellExecutionOptions {
|
|
131
|
+
stdin?: ShellInputSource;
|
|
132
|
+
stdout?: Stdout;
|
|
133
|
+
stderr?: Stderr;
|
|
134
|
+
terminal?: TerminalInfo;
|
|
135
|
+
signal?: AbortSignal;
|
|
136
|
+
outputMode?: "separate" | "merged";
|
|
137
|
+
}
|
|
138
|
+
export interface ShellExecution {
|
|
139
|
+
stdout: AsyncIterable<Uint8Array>;
|
|
140
|
+
stderr: AsyncIterable<Uint8Array>;
|
|
141
|
+
output: AsyncIterable<ShellOutputEvent>;
|
|
142
|
+
exit: Promise<ExecResult>;
|
|
143
|
+
kill(reason?: unknown): void;
|
|
144
|
+
}
|
|
90
145
|
export interface ShellConfig {
|
|
91
146
|
fs: VirtualFS;
|
|
92
147
|
cwd: string;
|
|
93
148
|
env: Record<string, string>;
|
|
94
149
|
commands: Record<string, Command>;
|
|
150
|
+
completions?: Record<string, CommandCompleter>;
|
|
95
151
|
isTTY?: boolean;
|
|
152
|
+
terminal?: TerminalInfo;
|
|
153
|
+
externalCommand?: ShellCommandFallback;
|
|
96
154
|
}
|
|
97
155
|
export interface RawValue {
|
|
98
156
|
raw: string;
|
package/package.json
CHANGED