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.
Files changed (57) hide show
  1. package/README.md +89 -0
  2. package/dist/cjs/package.json +1 -1
  3. package/dist/cjs/src/index.cjs +8 -1
  4. package/dist/cjs/src/index.cjs.map +3 -3
  5. package/dist/cjs/src/input-analysis.cjs +154 -0
  6. package/dist/cjs/src/input-analysis.cjs.map +10 -0
  7. package/dist/cjs/src/interpreter/context.cjs +3 -1
  8. package/dist/cjs/src/interpreter/context.cjs.map +3 -3
  9. package/dist/cjs/src/interpreter/interpreter.cjs +146 -19
  10. package/dist/cjs/src/interpreter/interpreter.cjs.map +3 -3
  11. package/dist/cjs/src/io/async-queue.cjs +105 -0
  12. package/dist/cjs/src/io/async-queue.cjs.map +10 -0
  13. package/dist/cjs/src/io/index.cjs +4 -1
  14. package/dist/cjs/src/io/index.cjs.map +3 -3
  15. package/dist/cjs/src/io/input-controller.cjs +113 -0
  16. package/dist/cjs/src/io/input-controller.cjs.map +10 -0
  17. package/dist/cjs/src/io/stdout.cjs +9 -6
  18. package/dist/cjs/src/io/stdout.cjs.map +3 -3
  19. package/dist/cjs/src/shell-dsl.cjs +13 -5
  20. package/dist/cjs/src/shell-dsl.cjs.map +3 -3
  21. package/dist/cjs/src/shell-session.cjs +222 -0
  22. package/dist/cjs/src/shell-session.cjs.map +10 -0
  23. package/dist/cjs/src/types.cjs.map +2 -2
  24. package/dist/mjs/package.json +1 -1
  25. package/dist/mjs/src/index.mjs +17 -2
  26. package/dist/mjs/src/index.mjs.map +3 -3
  27. package/dist/mjs/src/input-analysis.mjs +114 -0
  28. package/dist/mjs/src/input-analysis.mjs.map +10 -0
  29. package/dist/mjs/src/interpreter/context.mjs +3 -1
  30. package/dist/mjs/src/interpreter/context.mjs.map +3 -3
  31. package/dist/mjs/src/interpreter/interpreter.mjs +146 -19
  32. package/dist/mjs/src/interpreter/interpreter.mjs.map +3 -3
  33. package/dist/mjs/src/io/async-queue.mjs +64 -0
  34. package/dist/mjs/src/io/async-queue.mjs.map +10 -0
  35. package/dist/mjs/src/io/index.mjs +4 -1
  36. package/dist/mjs/src/io/index.mjs.map +3 -3
  37. package/dist/mjs/src/io/input-controller.mjs +72 -0
  38. package/dist/mjs/src/io/input-controller.mjs.map +10 -0
  39. package/dist/mjs/src/io/stdout.mjs +9 -6
  40. package/dist/mjs/src/io/stdout.mjs.map +3 -3
  41. package/dist/mjs/src/shell-dsl.mjs +13 -5
  42. package/dist/mjs/src/shell-dsl.mjs.map +3 -3
  43. package/dist/mjs/src/shell-session.mjs +182 -0
  44. package/dist/mjs/src/shell-session.mjs.map +10 -0
  45. package/dist/mjs/src/types.mjs.map +2 -2
  46. package/dist/types/src/index.d.ts +5 -2
  47. package/dist/types/src/input-analysis.d.ts +14 -0
  48. package/dist/types/src/interpreter/context.d.ts +3 -1
  49. package/dist/types/src/interpreter/interpreter.d.ts +12 -1
  50. package/dist/types/src/io/async-queue.d.ts +12 -0
  51. package/dist/types/src/io/index.d.ts +1 -0
  52. package/dist/types/src/io/input-controller.d.ts +15 -0
  53. package/dist/types/src/io/stdout.d.ts +4 -3
  54. package/dist/types/src/shell-dsl.d.ts +2 -0
  55. package/dist/types/src/shell-session.d.ts +30 -0
  56. package/dist/types/src/types.d.ts +58 -0
  57. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shell-dsl",
3
- "version": "0.0.40",
3
+ "version": "0.0.42",
4
4
  "description": "A sandboxed shell-style DSL for running scriptable command pipelines in-process without host OS access",
5
5
  "author": "ricsam <oss@ricsam.dev>",
6
6
  "license": "MIT",