@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.
Files changed (108) hide show
  1. package/dist/compilers/index.d.ts +24 -0
  2. package/dist/compilers/index.d.ts.map +1 -0
  3. package/dist/compilers/index.js +42 -0
  4. package/dist/compilers/index.js.map +1 -0
  5. package/dist/compilers/javascript.d.ts +117 -0
  6. package/dist/compilers/javascript.d.ts.map +1 -0
  7. package/dist/compilers/javascript.js +462 -0
  8. package/dist/compilers/javascript.js.map +1 -0
  9. package/dist/compilers/python.d.ts +140 -0
  10. package/dist/compilers/python.d.ts.map +1 -0
  11. package/dist/compilers/python.js +650 -0
  12. package/dist/compilers/python.js.map +1 -0
  13. package/dist/compilers/typescript.d.ts +99 -0
  14. package/dist/compilers/typescript.d.ts.map +1 -0
  15. package/dist/compilers/typescript.js +323 -0
  16. package/dist/compilers/typescript.js.map +1 -0
  17. package/dist/core/cell.d.ts +160 -0
  18. package/dist/core/cell.d.ts.map +1 -0
  19. package/dist/core/cell.js +319 -0
  20. package/dist/core/cell.js.map +1 -0
  21. package/dist/core/compiler.d.ts +126 -0
  22. package/dist/core/compiler.d.ts.map +1 -0
  23. package/dist/core/compiler.js +123 -0
  24. package/dist/core/compiler.js.map +1 -0
  25. package/dist/core/index.d.ts +19 -0
  26. package/dist/core/index.d.ts.map +1 -0
  27. package/dist/core/index.js +14 -0
  28. package/dist/core/index.js.map +1 -0
  29. package/dist/core/limits.d.ts +173 -0
  30. package/dist/core/limits.d.ts.map +1 -0
  31. package/dist/core/limits.js +440 -0
  32. package/dist/core/limits.js.map +1 -0
  33. package/dist/core/permissions.d.ts +103 -0
  34. package/dist/core/permissions.d.ts.map +1 -0
  35. package/dist/core/permissions.js +341 -0
  36. package/dist/core/permissions.js.map +1 -0
  37. package/dist/core/runtime.d.ts +127 -0
  38. package/dist/core/runtime.d.ts.map +1 -0
  39. package/dist/core/runtime.js +325 -0
  40. package/dist/core/runtime.js.map +1 -0
  41. package/dist/core/types.d.ts +380 -0
  42. package/dist/core/types.d.ts.map +1 -0
  43. package/dist/core/types.js +67 -0
  44. package/dist/core/types.js.map +1 -0
  45. package/dist/index.d.ts +145 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +279 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/multi/index.d.ts +9 -0
  50. package/dist/multi/index.d.ts.map +1 -0
  51. package/dist/multi/index.js +7 -0
  52. package/dist/multi/index.js.map +1 -0
  53. package/dist/multi/polyglot.d.ts +179 -0
  54. package/dist/multi/polyglot.d.ts.map +1 -0
  55. package/dist/multi/polyglot.js +319 -0
  56. package/dist/multi/polyglot.js.map +1 -0
  57. package/dist/runtimes/docker.d.ts +97 -0
  58. package/dist/runtimes/docker.d.ts.map +1 -0
  59. package/dist/runtimes/docker.js +368 -0
  60. package/dist/runtimes/docker.js.map +1 -0
  61. package/dist/runtimes/index.d.ts +11 -0
  62. package/dist/runtimes/index.d.ts.map +1 -0
  63. package/dist/runtimes/index.js +9 -0
  64. package/dist/runtimes/index.js.map +1 -0
  65. package/dist/runtimes/process.d.ts +47 -0
  66. package/dist/runtimes/process.d.ts.map +1 -0
  67. package/dist/runtimes/process.js +230 -0
  68. package/dist/runtimes/process.js.map +1 -0
  69. package/dist/session/index.d.ts +12 -0
  70. package/dist/session/index.d.ts.map +1 -0
  71. package/dist/session/index.js +9 -0
  72. package/dist/session/index.js.map +1 -0
  73. package/dist/session/kernel.d.ts +199 -0
  74. package/dist/session/kernel.d.ts.map +1 -0
  75. package/dist/session/kernel.js +400 -0
  76. package/dist/session/kernel.js.map +1 -0
  77. package/dist/session/notebook.d.ts +168 -0
  78. package/dist/session/notebook.d.ts.map +1 -0
  79. package/dist/session/notebook.js +499 -0
  80. package/dist/session/notebook.js.map +1 -0
  81. package/dist/session/repl.d.ts +159 -0
  82. package/dist/session/repl.d.ts.map +1 -0
  83. package/dist/session/repl.js +409 -0
  84. package/dist/session/repl.js.map +1 -0
  85. package/package.json +142 -0
  86. package/src/compilers/index.ts +80 -0
  87. package/src/compilers/javascript.ts +571 -0
  88. package/src/compilers/python.ts +785 -0
  89. package/src/compilers/typescript.ts +442 -0
  90. package/src/core/cell.ts +439 -0
  91. package/src/core/compiler.ts +250 -0
  92. package/src/core/index.ts +123 -0
  93. package/src/core/limits.ts +508 -0
  94. package/src/core/permissions.ts +409 -0
  95. package/src/core/runtime.ts +499 -0
  96. package/src/core/types.ts +528 -0
  97. package/src/global.d.ts +59 -0
  98. package/src/index.ts +515 -0
  99. package/src/multi/index.ts +22 -0
  100. package/src/multi/polyglot.ts +461 -0
  101. package/src/runtimes/docker.ts +501 -0
  102. package/src/runtimes/index.ts +21 -0
  103. package/src/runtimes/process.ts +316 -0
  104. package/src/session/index.ts +41 -0
  105. package/src/session/kernel.ts +553 -0
  106. package/src/session/notebook.ts +635 -0
  107. package/src/session/repl.ts +521 -0
  108. 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());