@ebowwa/sandbox 0.1.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.
- package/dist/compilers/index.d.ts +24 -0
- package/dist/compilers/index.d.ts.map +1 -0
- package/dist/compilers/index.js +42 -0
- package/dist/compilers/index.js.map +1 -0
- package/dist/compilers/javascript.d.ts +117 -0
- package/dist/compilers/javascript.d.ts.map +1 -0
- package/dist/compilers/javascript.js +462 -0
- package/dist/compilers/javascript.js.map +1 -0
- package/dist/compilers/python.d.ts +140 -0
- package/dist/compilers/python.d.ts.map +1 -0
- package/dist/compilers/python.js +650 -0
- package/dist/compilers/python.js.map +1 -0
- package/dist/compilers/typescript.d.ts +99 -0
- package/dist/compilers/typescript.d.ts.map +1 -0
- package/dist/compilers/typescript.js +323 -0
- package/dist/compilers/typescript.js.map +1 -0
- package/dist/core/cell.d.ts +160 -0
- package/dist/core/cell.d.ts.map +1 -0
- package/dist/core/cell.js +319 -0
- package/dist/core/cell.js.map +1 -0
- package/dist/core/compiler.d.ts +126 -0
- package/dist/core/compiler.d.ts.map +1 -0
- package/dist/core/compiler.js +123 -0
- package/dist/core/compiler.js.map +1 -0
- package/dist/core/index.d.ts +19 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/limits.d.ts +173 -0
- package/dist/core/limits.d.ts.map +1 -0
- package/dist/core/limits.js +440 -0
- package/dist/core/limits.js.map +1 -0
- package/dist/core/permissions.d.ts +103 -0
- package/dist/core/permissions.d.ts.map +1 -0
- package/dist/core/permissions.js +341 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/runtime.d.ts +127 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +325 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/types.d.ts +380 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +67 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +145 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +279 -0
- package/dist/index.js.map +1 -0
- package/dist/multi/index.d.ts +9 -0
- package/dist/multi/index.d.ts.map +1 -0
- package/dist/multi/index.js +7 -0
- package/dist/multi/index.js.map +1 -0
- package/dist/multi/polyglot.d.ts +179 -0
- package/dist/multi/polyglot.d.ts.map +1 -0
- package/dist/multi/polyglot.js +319 -0
- package/dist/multi/polyglot.js.map +1 -0
- package/dist/runtimes/docker.d.ts +97 -0
- package/dist/runtimes/docker.d.ts.map +1 -0
- package/dist/runtimes/docker.js +368 -0
- package/dist/runtimes/docker.js.map +1 -0
- package/dist/runtimes/index.d.ts +11 -0
- package/dist/runtimes/index.d.ts.map +1 -0
- package/dist/runtimes/index.js +9 -0
- package/dist/runtimes/index.js.map +1 -0
- package/dist/runtimes/process.d.ts +47 -0
- package/dist/runtimes/process.d.ts.map +1 -0
- package/dist/runtimes/process.js +230 -0
- package/dist/runtimes/process.js.map +1 -0
- package/dist/session/index.d.ts +12 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +9 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/kernel.d.ts +199 -0
- package/dist/session/kernel.d.ts.map +1 -0
- package/dist/session/kernel.js +400 -0
- package/dist/session/kernel.js.map +1 -0
- package/dist/session/notebook.d.ts +168 -0
- package/dist/session/notebook.d.ts.map +1 -0
- package/dist/session/notebook.js +499 -0
- package/dist/session/notebook.js.map +1 -0
- package/dist/session/repl.d.ts +159 -0
- package/dist/session/repl.d.ts.map +1 -0
- package/dist/session/repl.js +409 -0
- package/dist/session/repl.js.map +1 -0
- package/package.json +142 -0
- package/src/compilers/index.ts +80 -0
- package/src/compilers/javascript.ts +571 -0
- package/src/compilers/python.ts +785 -0
- package/src/compilers/typescript.ts +442 -0
- package/src/core/cell.ts +439 -0
- package/src/core/compiler.ts +250 -0
- package/src/core/index.ts +123 -0
- package/src/core/limits.ts +508 -0
- package/src/core/permissions.ts +409 -0
- package/src/core/runtime.ts +499 -0
- package/src/core/types.ts +528 -0
- package/src/global.d.ts +59 -0
- package/src/index.ts +515 -0
- package/src/multi/index.ts +22 -0
- package/src/multi/polyglot.ts +461 -0
- package/src/runtimes/docker.ts +501 -0
- package/src/runtimes/index.ts +21 -0
- package/src/runtimes/process.ts +316 -0
- package/src/session/index.ts +41 -0
- package/src/session/kernel.ts +553 -0
- package/src/session/notebook.ts +635 -0
- package/src/session/repl.ts +521 -0
- package/src/wasm2wasm.d.ts +35 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REPL Primitive
|
|
3
|
+
*
|
|
4
|
+
* Interactive Read-Eval-Print-Loop for multi-language execution.
|
|
5
|
+
* Provides terminal-style interactive coding experience.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseKernel, KernelManager } from "./kernel.js";
|
|
8
|
+
import { createPermissions } from "../core/permissions.js";
|
|
9
|
+
import { LimitsParser } from "../core/limits.js";
|
|
10
|
+
import * as readline from "node:readline/promises";
|
|
11
|
+
import { stdin as input, stdout as output } from "node:process";
|
|
12
|
+
/**
|
|
13
|
+
* Base REPL Implementation
|
|
14
|
+
*/
|
|
15
|
+
export class BaseREPL {
|
|
16
|
+
kernelManager;
|
|
17
|
+
kernelFactory;
|
|
18
|
+
kernels = new Map();
|
|
19
|
+
permissions;
|
|
20
|
+
limits;
|
|
21
|
+
prompt;
|
|
22
|
+
continuationPrompt;
|
|
23
|
+
welcomeMessage;
|
|
24
|
+
languages;
|
|
25
|
+
output;
|
|
26
|
+
input;
|
|
27
|
+
rl;
|
|
28
|
+
state;
|
|
29
|
+
constructor(options = {}) {
|
|
30
|
+
this.kernelManager = options.kernelManager ?? new KernelManager();
|
|
31
|
+
this.kernelFactory = options.kernelFactory;
|
|
32
|
+
this.permissions = options.permissions ?? {};
|
|
33
|
+
this.limits = options.limits ?? {};
|
|
34
|
+
this.prompt = options.prompt ?? ">>> ";
|
|
35
|
+
this.continuationPrompt = options.continuationPrompt ?? "... ";
|
|
36
|
+
this.welcomeMessage = options.welcomeMessage ?? this.getDefaultWelcome();
|
|
37
|
+
this.languages = options.languages ?? ["javascript", "python", "wasm"];
|
|
38
|
+
this.output = options.output ?? output;
|
|
39
|
+
this.input = options.input ?? input;
|
|
40
|
+
this.state = {
|
|
41
|
+
language: options.language ?? "javascript",
|
|
42
|
+
inMultiline: false,
|
|
43
|
+
multilineBuffer: [],
|
|
44
|
+
history: [],
|
|
45
|
+
variables: new Map(),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Start REPL
|
|
50
|
+
*/
|
|
51
|
+
async start() {
|
|
52
|
+
this.print(this.welcomeMessage);
|
|
53
|
+
this.print("");
|
|
54
|
+
this.rl = readline.createInterface({
|
|
55
|
+
input: this.input,
|
|
56
|
+
output: this.output,
|
|
57
|
+
prompt: this.getPrompt(),
|
|
58
|
+
history: this.getHistoryStrings(),
|
|
59
|
+
});
|
|
60
|
+
this.rl.prompt();
|
|
61
|
+
for await (const line of this.rl) {
|
|
62
|
+
await this.handleLine(line);
|
|
63
|
+
this.rl.setPrompt(this.getPrompt());
|
|
64
|
+
this.rl.prompt();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Handle a line of input
|
|
69
|
+
*/
|
|
70
|
+
async handleLine(line) {
|
|
71
|
+
// Check for commands
|
|
72
|
+
if (line.startsWith("%")) {
|
|
73
|
+
await this.handleCommand(line);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Check for language switch
|
|
77
|
+
const langMatch = line.match(/^!(\w+)/);
|
|
78
|
+
if (langMatch) {
|
|
79
|
+
const lang = langMatch[1];
|
|
80
|
+
if (this.languages.includes(lang)) {
|
|
81
|
+
this.state.language = lang;
|
|
82
|
+
this.print(`Switched to ${lang}`);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.print(`Unknown language: ${lang}`);
|
|
86
|
+
this.print(`Available: ${this.languages.join(", ")}`);
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Check for empty line
|
|
91
|
+
if (line.trim() === "") {
|
|
92
|
+
if (this.state.inMultiline) {
|
|
93
|
+
// Execute multiline
|
|
94
|
+
const code = this.state.multilineBuffer.join("\n");
|
|
95
|
+
this.state.multilineBuffer = [];
|
|
96
|
+
this.state.inMultiline = false;
|
|
97
|
+
await this.execute(code);
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Check for continuation
|
|
102
|
+
if (this.shouldContinue(line)) {
|
|
103
|
+
this.state.inMultiline = true;
|
|
104
|
+
this.state.multilineBuffer.push(line);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// Execute single line
|
|
108
|
+
if (this.state.inMultiline) {
|
|
109
|
+
this.state.multilineBuffer.push(line);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
await this.execute(line);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Execute code
|
|
117
|
+
*/
|
|
118
|
+
async execute(code) {
|
|
119
|
+
const kernel = await this.getKernel(this.state.language);
|
|
120
|
+
const result = await kernel.execute(code);
|
|
121
|
+
// Add to history
|
|
122
|
+
this.state.history.push({
|
|
123
|
+
input: code,
|
|
124
|
+
language: this.state.language,
|
|
125
|
+
result,
|
|
126
|
+
timestamp: new Date(),
|
|
127
|
+
});
|
|
128
|
+
// Display result
|
|
129
|
+
this.displayResult(result);
|
|
130
|
+
// Update variables
|
|
131
|
+
if (result.success && result.exports) {
|
|
132
|
+
for (const [key, value] of result.exports) {
|
|
133
|
+
this.state.variables.set(key, value);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Handle REPL command
|
|
140
|
+
*/
|
|
141
|
+
async handleCommand(command) {
|
|
142
|
+
const [cmd, ...args] = command.slice(1).split(/\s+/);
|
|
143
|
+
switch (cmd.toLowerCase()) {
|
|
144
|
+
case "help":
|
|
145
|
+
this.showHelp();
|
|
146
|
+
break;
|
|
147
|
+
case "exit":
|
|
148
|
+
case "quit":
|
|
149
|
+
this.print("Goodbye!");
|
|
150
|
+
process.exit(0);
|
|
151
|
+
case "clear":
|
|
152
|
+
console.clear();
|
|
153
|
+
break;
|
|
154
|
+
case "reset":
|
|
155
|
+
await this.reset();
|
|
156
|
+
this.print("Session reset");
|
|
157
|
+
break;
|
|
158
|
+
case "history":
|
|
159
|
+
this.showHistory();
|
|
160
|
+
break;
|
|
161
|
+
case "vars":
|
|
162
|
+
this.showVariables();
|
|
163
|
+
break;
|
|
164
|
+
case "lang":
|
|
165
|
+
case "language":
|
|
166
|
+
if (args[0]) {
|
|
167
|
+
const lang = args[0];
|
|
168
|
+
if (this.languages.includes(lang)) {
|
|
169
|
+
this.state.language = lang;
|
|
170
|
+
this.print(`Switched to ${lang}`);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.print(`Unknown language: ${lang}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.print(`Current language: ${this.state.language}`);
|
|
178
|
+
this.print(`Available: ${this.languages.join(", ")}`);
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
case "save":
|
|
182
|
+
await this.save(args[0] ?? "session.json");
|
|
183
|
+
break;
|
|
184
|
+
case "load":
|
|
185
|
+
await this.load(args[0] ?? "session.json");
|
|
186
|
+
break;
|
|
187
|
+
default:
|
|
188
|
+
this.print(`Unknown command: ${cmd}`);
|
|
189
|
+
this.print("Type %help for available commands");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get or create kernel for language
|
|
194
|
+
*/
|
|
195
|
+
async getKernel(language) {
|
|
196
|
+
let kernel = this.kernels.get(language);
|
|
197
|
+
if (!kernel) {
|
|
198
|
+
if (this.kernelFactory) {
|
|
199
|
+
kernel = await this.kernelFactory(language);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
throw new Error(`No kernel available for language: ${language}`);
|
|
203
|
+
}
|
|
204
|
+
this.kernels.set(language, kernel);
|
|
205
|
+
}
|
|
206
|
+
return kernel;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Check if input should continue to next line
|
|
210
|
+
*/
|
|
211
|
+
shouldContinue(line) {
|
|
212
|
+
// Check for incomplete statements
|
|
213
|
+
const openBrackets = (line.match(/[\{\[\(]/g) ?? []).length;
|
|
214
|
+
const closeBrackets = (line.match(/[\}\]\)]/g) ?? []).length;
|
|
215
|
+
if (openBrackets > closeBrackets)
|
|
216
|
+
return true;
|
|
217
|
+
// Check for trailing operators/keywords
|
|
218
|
+
const trimmed = line.trim();
|
|
219
|
+
if (trimmed.endsWith(":") || trimmed.endsWith("\\"))
|
|
220
|
+
return true;
|
|
221
|
+
if (/^(if|else|for|while|def|function|class)\b/.test(trimmed))
|
|
222
|
+
return true;
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Display execution result
|
|
227
|
+
*/
|
|
228
|
+
displayResult(result) {
|
|
229
|
+
// Show stdout
|
|
230
|
+
for (const line of result.output.stdout) {
|
|
231
|
+
this.print(line);
|
|
232
|
+
}
|
|
233
|
+
// Show stderr
|
|
234
|
+
for (const line of result.output.stderr) {
|
|
235
|
+
this.print(`[stderr] ${line}`);
|
|
236
|
+
}
|
|
237
|
+
// Show displays
|
|
238
|
+
for (const display of result.output.displays) {
|
|
239
|
+
switch (display.type) {
|
|
240
|
+
case "text":
|
|
241
|
+
this.print(String(display.data));
|
|
242
|
+
break;
|
|
243
|
+
case "html":
|
|
244
|
+
case "image":
|
|
245
|
+
case "json":
|
|
246
|
+
case "markdown":
|
|
247
|
+
this.print(`[${display.type} output]`);
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Show return value
|
|
252
|
+
if (result.success && result.value !== undefined) {
|
|
253
|
+
this.print(this.formatValue(result.value));
|
|
254
|
+
}
|
|
255
|
+
// Show error
|
|
256
|
+
if (result.error) {
|
|
257
|
+
this.print(`Error (${result.error.type}): ${result.error.message}`);
|
|
258
|
+
if (result.error.stack) {
|
|
259
|
+
this.print(result.error.stack);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Show metrics
|
|
263
|
+
this.print(`[${result.metrics.duration}ms]`);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Format value for display
|
|
267
|
+
*/
|
|
268
|
+
formatValue(value) {
|
|
269
|
+
if (value === undefined)
|
|
270
|
+
return "undefined";
|
|
271
|
+
if (value === null)
|
|
272
|
+
return "null";
|
|
273
|
+
if (typeof value === "string")
|
|
274
|
+
return `"${value}"`;
|
|
275
|
+
if (typeof value === "object") {
|
|
276
|
+
try {
|
|
277
|
+
return JSON.stringify(value, null, 2);
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
return String(value);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return String(value);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Get prompt string
|
|
287
|
+
*/
|
|
288
|
+
getPrompt() {
|
|
289
|
+
if (this.state.inMultiline) {
|
|
290
|
+
return this.continuationPrompt;
|
|
291
|
+
}
|
|
292
|
+
return `[${this.state.language}] ${this.prompt}`;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get history as strings
|
|
296
|
+
*/
|
|
297
|
+
getHistoryStrings() {
|
|
298
|
+
return this.state.history.map(h => h.input);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Show help
|
|
302
|
+
*/
|
|
303
|
+
showHelp() {
|
|
304
|
+
this.print(`
|
|
305
|
+
REPL Commands:
|
|
306
|
+
%help Show this help
|
|
307
|
+
%exit, %quit Exit REPL
|
|
308
|
+
%clear Clear screen
|
|
309
|
+
%reset Reset session
|
|
310
|
+
%history Show execution history
|
|
311
|
+
%vars Show defined variables
|
|
312
|
+
%lang [name] Switch or show language
|
|
313
|
+
%save [file] Save session
|
|
314
|
+
%load [file] Load session
|
|
315
|
+
|
|
316
|
+
Shortcuts:
|
|
317
|
+
!python Switch to Python
|
|
318
|
+
!javascript Switch to JavaScript
|
|
319
|
+
!wasm Switch to WASM
|
|
320
|
+
|
|
321
|
+
Press Enter twice to execute multiline input.
|
|
322
|
+
`);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Show history
|
|
326
|
+
*/
|
|
327
|
+
showHistory() {
|
|
328
|
+
for (let i = 0; i < this.state.history.length; i++) {
|
|
329
|
+
const entry = this.state.history[i];
|
|
330
|
+
this.print(`${i + 1}: [${entry.language}] ${entry.input.slice(0, 50)}...`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Show variables
|
|
335
|
+
*/
|
|
336
|
+
showVariables() {
|
|
337
|
+
if (this.state.variables.size === 0) {
|
|
338
|
+
this.print("No variables defined");
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
for (const [key, value] of this.state.variables) {
|
|
342
|
+
this.print(`${key} = ${this.formatValue(value)}`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Reset session
|
|
347
|
+
*/
|
|
348
|
+
async reset() {
|
|
349
|
+
// Restart all kernels
|
|
350
|
+
for (const kernel of this.kernels.values()) {
|
|
351
|
+
await kernel.restart();
|
|
352
|
+
}
|
|
353
|
+
// Clear state
|
|
354
|
+
this.state.history = [];
|
|
355
|
+
this.state.variables.clear();
|
|
356
|
+
this.state.inMultiline = false;
|
|
357
|
+
this.state.multilineBuffer = [];
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Save session
|
|
361
|
+
*/
|
|
362
|
+
async save(filename) {
|
|
363
|
+
const fs = await import("node:fs/promises");
|
|
364
|
+
const data = {
|
|
365
|
+
language: this.state.language,
|
|
366
|
+
history: this.state.history,
|
|
367
|
+
variables: Array.from(this.state.variables.entries()),
|
|
368
|
+
};
|
|
369
|
+
await fs.writeFile(filename, JSON.stringify(data, null, 2));
|
|
370
|
+
this.print(`Session saved to ${filename}`);
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Load session
|
|
374
|
+
*/
|
|
375
|
+
async load(filename) {
|
|
376
|
+
const fs = await import("node:fs/promises");
|
|
377
|
+
const data = JSON.parse(await fs.readFile(filename, "utf-8"));
|
|
378
|
+
this.state.language = data.language;
|
|
379
|
+
this.state.history = data.history;
|
|
380
|
+
this.state.variables = new Map(data.variables);
|
|
381
|
+
this.print(`Session loaded from ${filename}`);
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Print to output
|
|
385
|
+
*/
|
|
386
|
+
print(message) {
|
|
387
|
+
this.output.write(message + "\n");
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Get default welcome message
|
|
391
|
+
*/
|
|
392
|
+
getDefaultWelcome() {
|
|
393
|
+
return `
|
|
394
|
+
╔════════════════════════════════════════════════════════════════╗
|
|
395
|
+
║ @ebowwa/sandbox REPL ║
|
|
396
|
+
║ ║
|
|
397
|
+
║ Multi-language sandboxed execution environment ║
|
|
398
|
+
║ Type %help for commands, !<lang> to switch language ║
|
|
399
|
+
╚════════════════════════════════════════════════════════════════╝
|
|
400
|
+
`.trim();
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Create a REPL
|
|
405
|
+
*/
|
|
406
|
+
export function createREPL(options) {
|
|
407
|
+
return new BaseREPL(options);
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=repl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/session/repl.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ebowwa/sandbox",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Composable sandbox primitives for multi-language code execution - Jupyter/REPL style with Python+Rust+JS+TS+WASM support",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./core": {
|
|
14
|
+
"types": "./dist/core/index.d.ts",
|
|
15
|
+
"import": "./dist/core/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./core/compiler": {
|
|
18
|
+
"types": "./dist/core/compiler.d.ts",
|
|
19
|
+
"import": "./dist/core/compiler.js"
|
|
20
|
+
},
|
|
21
|
+
"./core/runtime": {
|
|
22
|
+
"types": "./dist/core/runtime.d.ts",
|
|
23
|
+
"import": "./dist/core/runtime.js"
|
|
24
|
+
},
|
|
25
|
+
"./core/permissions": {
|
|
26
|
+
"types": "./dist/core/permissions.d.ts",
|
|
27
|
+
"import": "./dist/core/permissions.js"
|
|
28
|
+
},
|
|
29
|
+
"./core/limits": {
|
|
30
|
+
"types": "./dist/core/limits.d.ts",
|
|
31
|
+
"import": "./dist/core/limits.js"
|
|
32
|
+
},
|
|
33
|
+
"./core/cell": {
|
|
34
|
+
"types": "./dist/core/cell.d.ts",
|
|
35
|
+
"import": "./dist/core/cell.js"
|
|
36
|
+
},
|
|
37
|
+
"./compilers": {
|
|
38
|
+
"types": "./dist/compilers/index.d.ts",
|
|
39
|
+
"import": "./dist/compilers/index.js"
|
|
40
|
+
},
|
|
41
|
+
"./runtimes": {
|
|
42
|
+
"types": "./dist/runtimes/index.d.ts",
|
|
43
|
+
"import": "./dist/runtimes/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./session": {
|
|
46
|
+
"types": "./dist/session/index.d.ts",
|
|
47
|
+
"import": "./dist/session/index.js"
|
|
48
|
+
},
|
|
49
|
+
"./session/kernel": {
|
|
50
|
+
"types": "./dist/session/kernel.d.ts",
|
|
51
|
+
"import": "./dist/session/kernel.js"
|
|
52
|
+
},
|
|
53
|
+
"./session/notebook": {
|
|
54
|
+
"types": "./dist/session/notebook.d.ts",
|
|
55
|
+
"import": "./dist/session/notebook.js"
|
|
56
|
+
},
|
|
57
|
+
"./session/repl": {
|
|
58
|
+
"types": "./dist/session/repl.d.ts",
|
|
59
|
+
"import": "./dist/session/repl.js"
|
|
60
|
+
},
|
|
61
|
+
"./multi": {
|
|
62
|
+
"types": "./dist/multi/index.d.ts",
|
|
63
|
+
"import": "./dist/multi/index.js"
|
|
64
|
+
},
|
|
65
|
+
"./multi/polyglot": {
|
|
66
|
+
"types": "./dist/multi/polyglot.d.ts",
|
|
67
|
+
"import": "./dist/multi/polyglot.js"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"files": [
|
|
71
|
+
"dist",
|
|
72
|
+
"src"
|
|
73
|
+
],
|
|
74
|
+
"scripts": {
|
|
75
|
+
"build": "tsc",
|
|
76
|
+
"dev": "tsc --watch",
|
|
77
|
+
"clean": "rm -rf dist",
|
|
78
|
+
"test": "bun test",
|
|
79
|
+
"repl": "bun run src/session/repl-cli.ts",
|
|
80
|
+
"prepublishOnly": "bun run build"
|
|
81
|
+
},
|
|
82
|
+
"dependencies": {
|
|
83
|
+
"uuid": "^13.0.0",
|
|
84
|
+
"zod": "^3.24.2"
|
|
85
|
+
},
|
|
86
|
+
"optionalDependencies": {
|
|
87
|
+
"assemblyscript": "^0.28.10",
|
|
88
|
+
"esbuild": "^0.27.4",
|
|
89
|
+
"@swc/core": "^1.15.18"
|
|
90
|
+
},
|
|
91
|
+
"devDependencies": {
|
|
92
|
+
"@types/bun": "latest",
|
|
93
|
+
"@types/node": "^22.0.0",
|
|
94
|
+
"@types/uuid": "^11.0.0",
|
|
95
|
+
"typescript": "^5.9.3"
|
|
96
|
+
},
|
|
97
|
+
"peerDependencies": {
|
|
98
|
+
"assemblyscript": "^0.27.x",
|
|
99
|
+
"esbuild": "^0.19.x",
|
|
100
|
+
"@swc/core": "^1.3.x"
|
|
101
|
+
},
|
|
102
|
+
"peerDependenciesMeta": {
|
|
103
|
+
"assemblyscript": {
|
|
104
|
+
"optional": true
|
|
105
|
+
},
|
|
106
|
+
"esbuild": {
|
|
107
|
+
"optional": true
|
|
108
|
+
},
|
|
109
|
+
"@swc/core": {
|
|
110
|
+
"optional": true
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"keywords": [
|
|
114
|
+
"sandbox",
|
|
115
|
+
"wasm",
|
|
116
|
+
"repl",
|
|
117
|
+
"jupyter",
|
|
118
|
+
"notebook",
|
|
119
|
+
"polyglot",
|
|
120
|
+
"multi-language",
|
|
121
|
+
"python",
|
|
122
|
+
"rust",
|
|
123
|
+
"javascript",
|
|
124
|
+
"typescript",
|
|
125
|
+
"isolated-execution"
|
|
126
|
+
],
|
|
127
|
+
"author": "Ebowwa Labs <labs@ebowwa.com>",
|
|
128
|
+
"license": "MIT",
|
|
129
|
+
"repository": {
|
|
130
|
+
"type": "git",
|
|
131
|
+
"url": "https://github.com/ebowwa/codespaces.git",
|
|
132
|
+
"directory": "packages/src/primitives/abstraction/sandbox"
|
|
133
|
+
},
|
|
134
|
+
"ownership": {
|
|
135
|
+
"domain": "execution",
|
|
136
|
+
"responsibilities": [
|
|
137
|
+
"sandboxed-execution",
|
|
138
|
+
"multi-language-support",
|
|
139
|
+
"repl-notebook"
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Compilers
|
|
3
|
+
*
|
|
4
|
+
* Export all available compilers for the sandbox.
|
|
5
|
+
* Each compiler transforms source code to WASM format.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Python compiler
|
|
9
|
+
export {
|
|
10
|
+
PythonCompiler,
|
|
11
|
+
createPythonCompiler,
|
|
12
|
+
pythonCompiler,
|
|
13
|
+
type PythonValidationResult,
|
|
14
|
+
} from "./python.js";
|
|
15
|
+
|
|
16
|
+
// JavaScript compiler
|
|
17
|
+
export {
|
|
18
|
+
JavaScriptCompiler,
|
|
19
|
+
javascriptCompiler,
|
|
20
|
+
type JavaScriptCompilerOptions,
|
|
21
|
+
} from "./javascript.js";
|
|
22
|
+
|
|
23
|
+
// TypeScript compiler
|
|
24
|
+
export {
|
|
25
|
+
TypeScriptCompiler,
|
|
26
|
+
typescriptCompiler,
|
|
27
|
+
type TypeScriptCompilerOptions,
|
|
28
|
+
} from "./typescript.js";
|
|
29
|
+
|
|
30
|
+
// Re-export base types for convenience
|
|
31
|
+
export type {
|
|
32
|
+
CompileResult,
|
|
33
|
+
ImportDefinition,
|
|
34
|
+
CompilerOptions,
|
|
35
|
+
ICompiler,
|
|
36
|
+
LanguageCapabilities,
|
|
37
|
+
} from "../core/compiler.js";
|
|
38
|
+
|
|
39
|
+
export {
|
|
40
|
+
BaseCompiler,
|
|
41
|
+
WasmCompiler,
|
|
42
|
+
CompilerRegistry,
|
|
43
|
+
defaultCompilerRegistry,
|
|
44
|
+
} from "../core/compiler.js";
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Create a compiler registry with all available compilers
|
|
48
|
+
*/
|
|
49
|
+
import { CompilerRegistry, defaultCompilerRegistry } from "../core/compiler.js";
|
|
50
|
+
import { PythonCompiler } from "./python.js";
|
|
51
|
+
import { JavaScriptCompiler } from "./javascript.js";
|
|
52
|
+
import { TypeScriptCompiler } from "./typescript.js";
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Create a compiler registry pre-populated with all available compilers
|
|
56
|
+
*/
|
|
57
|
+
export function createCompilerRegistry(): CompilerRegistry {
|
|
58
|
+
const registry = new CompilerRegistry();
|
|
59
|
+
|
|
60
|
+
// Register Python compiler
|
|
61
|
+
registry.register(new PythonCompiler());
|
|
62
|
+
|
|
63
|
+
// Register JavaScript compiler
|
|
64
|
+
registry.register(new JavaScriptCompiler());
|
|
65
|
+
|
|
66
|
+
// Register TypeScript compiler
|
|
67
|
+
registry.register(new TypeScriptCompiler());
|
|
68
|
+
|
|
69
|
+
return registry;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Default compiler registry with all language support
|
|
74
|
+
*/
|
|
75
|
+
export const compilers = createCompilerRegistry();
|
|
76
|
+
|
|
77
|
+
// Register all compilers with the default registry
|
|
78
|
+
defaultCompilerRegistry.register(new PythonCompiler());
|
|
79
|
+
defaultCompilerRegistry.register(new JavaScriptCompiler());
|
|
80
|
+
defaultCompilerRegistry.register(new TypeScriptCompiler());
|