@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,650 @@
1
+ /**
2
+ * Python Compiler
3
+ *
4
+ * Compiles Python code to WASM or validates Python syntax.
5
+ *
6
+ * Note: True Python-to-WASM compilation is complex. Current options:
7
+ * - Pyodide: Full Python runtime compiled to WASM (heavy, ~10MB+)
8
+ * - RustPython: Python interpreter in Rust, WASM-ready
9
+ * - Wasmer Python: Wasmer's Python distribution
10
+ *
11
+ * This implementation provides:
12
+ * 1. Syntax validation (always available)
13
+ * 2. Stub WASM compilation for isolated execution
14
+ * 3. Ready for integration with Pyodide/RustPython when available
15
+ */
16
+ import { BaseCompiler, } from "../core/compiler.js";
17
+ /**
18
+ * Python Compiler
19
+ *
20
+ * Provides Python syntax validation and stub WASM compilation.
21
+ * Designed to be extended with Pyodide or RustPython integration.
22
+ */
23
+ export class PythonCompiler extends BaseCompiler {
24
+ language = "python";
25
+ /**
26
+ * Python keywords for validation
27
+ */
28
+ static KEYWORDS = new Set([
29
+ "False", "None", "True", "and", "as", "assert", "async", "await",
30
+ "break", "class", "continue", "def", "del", "elif", "else", "except",
31
+ "finally", "for", "from", "global", "if", "import", "in", "is",
32
+ "lambda", "nonlocal", "not", "or", "pass", "raise", "return", "try",
33
+ "while", "with", "yield",
34
+ ]);
35
+ /**
36
+ * Python operators for validation
37
+ */
38
+ static OPERATORS = new Set([
39
+ "+", "-", "*", "/", "//", "%", "**", "<<", ">>", "&", "|", "^",
40
+ "~", "<", ">", "<=", ">=", "==", "!=", "+=", "-=", "*=", "/=",
41
+ "//=", "%=", "**=", "<<=", ">>=", "&=", "|=", "^=", "->", ":=",
42
+ ]);
43
+ /**
44
+ * Check if a full Python runtime is available
45
+ */
46
+ pyodideAvailable = null;
47
+ /**
48
+ * Check if Python compiler is available
49
+ *
50
+ * Always returns true since we provide syntax validation.
51
+ * Returns true for WASM compilation only if Pyodide is loaded.
52
+ */
53
+ async isAvailable() {
54
+ // Basic validation is always available
55
+ return true;
56
+ }
57
+ /**
58
+ * Check if Pyodide runtime is available
59
+ */
60
+ async isPyodideAvailable() {
61
+ if (this.pyodideAvailable !== null) {
62
+ return this.pyodideAvailable;
63
+ }
64
+ // Check if running in browser/worker with Pyodide
65
+ if (typeof globalThis !== "undefined") {
66
+ const g = globalThis;
67
+ this.pyodideAvailable = !!(g.loadPyodide || g.pyodide);
68
+ }
69
+ else {
70
+ this.pyodideAvailable = false;
71
+ }
72
+ return this.pyodideAvailable;
73
+ }
74
+ /**
75
+ * Validate Python source code syntax
76
+ */
77
+ async validate(source) {
78
+ try {
79
+ // Empty source is valid
80
+ if (!source.trim()) {
81
+ return { valid: true };
82
+ }
83
+ // Run syntax checks
84
+ const errors = [];
85
+ // Check for common syntax errors
86
+ const bracketResult = this.checkBrackets(source);
87
+ if (!bracketResult.valid) {
88
+ return bracketResult;
89
+ }
90
+ const indentResult = this.checkIndentation(source);
91
+ if (!indentResult.valid) {
92
+ return indentResult;
93
+ }
94
+ const stringResult = this.checkStrings(source);
95
+ if (!stringResult.valid) {
96
+ return stringResult;
97
+ }
98
+ // Check for invalid syntax patterns
99
+ const syntaxResult = this.checkSyntaxPatterns(source);
100
+ if (!syntaxResult.valid) {
101
+ return syntaxResult;
102
+ }
103
+ // If we have access to Pyodide, use its parser for full validation
104
+ if (await this.isPyodideAvailable()) {
105
+ return this.validateWithPyodide(source);
106
+ }
107
+ // Basic validation passed
108
+ return { valid: true, error: errors.length > 0 ? errors.join("; ") : undefined };
109
+ }
110
+ catch (error) {
111
+ return {
112
+ valid: false,
113
+ error: `Validation error: ${error instanceof Error ? error.message : String(error)}`,
114
+ };
115
+ }
116
+ }
117
+ /**
118
+ * Compile Python source to WASM
119
+ *
120
+ * For now, creates a stub WASM module that wraps the Python code.
121
+ * When Pyodide is available, can use full Python-to-WASM execution.
122
+ */
123
+ async compile(source, permissions, limits, options) {
124
+ // Validate first
125
+ const validation = await this.validate(source);
126
+ if (!validation.valid) {
127
+ throw new Error(`Python syntax error: ${validation.error}`);
128
+ }
129
+ // Check permissions - Python needs filesystem and network for many operations
130
+ this.checkPermissions(permissions);
131
+ // If Pyodide is available, we could use it for actual execution
132
+ // For now, create a stub WASM module that stores the Python code
133
+ const wasmBytes = await this.createStubWasm(source, options);
134
+ return {
135
+ wasmBytes,
136
+ source, // Include original Python source for interpreted execution
137
+ exports: ["run", "get_output", "set_input"],
138
+ imports: [
139
+ { module: "env", name: "memory", type: "memory" },
140
+ { module: "env", name: "log", type: "function", signature: "(i32, i32) -> ()" },
141
+ ],
142
+ memoryRequirements: {
143
+ initial: this.calculateMemoryPages(source, limits),
144
+ maximum: limits.memory ? Math.ceil(this.parseMemoryLimit(limits.memory) / 65536) : 256,
145
+ },
146
+ };
147
+ }
148
+ /**
149
+ * Get Python language capabilities
150
+ */
151
+ getCapabilities() {
152
+ return {
153
+ repl: true,
154
+ stateful: true,
155
+ compiled: false,
156
+ gc: true,
157
+ imports: true,
158
+ async: true,
159
+ };
160
+ }
161
+ /**
162
+ * Check bracket matching
163
+ */
164
+ checkBrackets(source) {
165
+ const stack = [];
166
+ const pairs = { "(": ")", "[": "]", "{": "}" };
167
+ const openBrackets = new Set(["(", "[", "{"]);
168
+ const closeBrackets = new Set([")", "]", "}"]);
169
+ let inString = false;
170
+ let stringChar = "";
171
+ let escaped = false;
172
+ const lines = source.split("\n");
173
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
174
+ const line = lines[lineNum];
175
+ for (let col = 0; col < line.length; col++) {
176
+ const char = line[col];
177
+ // Handle string literals
178
+ if (!escaped && (char === '"' || char === "'")) {
179
+ if (!inString) {
180
+ inString = true;
181
+ stringChar = char;
182
+ // Check for triple quotes
183
+ if (line.slice(col, col + 3) === char.repeat(3)) {
184
+ stringChar = char.repeat(3);
185
+ col += 2;
186
+ }
187
+ }
188
+ else if (char === stringChar || (stringChar.length === 1 && char === stringChar)) {
189
+ inString = false;
190
+ stringChar = "";
191
+ }
192
+ continue;
193
+ }
194
+ // Handle escape sequences
195
+ if (inString && char === "\\" && !escaped) {
196
+ escaped = true;
197
+ continue;
198
+ }
199
+ escaped = false;
200
+ // Skip brackets inside strings
201
+ if (inString)
202
+ continue;
203
+ if (openBrackets.has(char)) {
204
+ stack.push({ char, line: lineNum + 1, col: col + 1 });
205
+ }
206
+ else if (closeBrackets.has(char)) {
207
+ if (stack.length === 0) {
208
+ return {
209
+ valid: false,
210
+ error: `Unmatched closing bracket '${char}'`,
211
+ line: lineNum + 1,
212
+ column: col + 1,
213
+ };
214
+ }
215
+ const last = stack.pop();
216
+ if (pairs[last.char] !== char) {
217
+ return {
218
+ valid: false,
219
+ error: `Mismatched brackets: '${last.char}' at line ${last.line} should close with '${pairs[last.char]}', found '${char}'`,
220
+ line: lineNum + 1,
221
+ column: col + 1,
222
+ };
223
+ }
224
+ }
225
+ }
226
+ }
227
+ if (stack.length > 0) {
228
+ const last = stack[stack.length - 1];
229
+ return {
230
+ valid: false,
231
+ error: `Unclosed bracket '${last.char}'`,
232
+ line: last.line,
233
+ column: last.col,
234
+ };
235
+ }
236
+ return { valid: true };
237
+ }
238
+ /**
239
+ * Check Python indentation
240
+ */
241
+ checkIndentation(source) {
242
+ const lines = source.split("\n");
243
+ const indentStack = [0];
244
+ const colonBlockStarts = new Set();
245
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
246
+ const line = lines[lineNum];
247
+ const trimmed = line.trim();
248
+ // Skip empty lines and comments
249
+ if (!trimmed || trimmed.startsWith("#")) {
250
+ continue;
251
+ }
252
+ // Calculate current indentation
253
+ const currentIndent = line.length - line.trimStart().length;
254
+ // Check for tab/space mixing
255
+ const leadingChars = line.slice(0, currentIndent);
256
+ const hasTabs = leadingChars.includes("\t");
257
+ const hasSpaces = leadingChars.includes(" ") && !leadingChars.includes("\t");
258
+ if (hasTabs && hasSpaces) {
259
+ return {
260
+ valid: false,
261
+ error: "Mixed tabs and spaces in indentation",
262
+ line: lineNum + 1,
263
+ column: 1,
264
+ };
265
+ }
266
+ // Check indentation level
267
+ const expectedIndent = indentStack[indentStack.length - 1];
268
+ if (currentIndent > expectedIndent) {
269
+ // Must be after a colon
270
+ if (!colonBlockStarts.has(lineNum - 1) && currentIndent !== indentStack[indentStack.length - 1] + (hasTabs ? 1 : 4)) {
271
+ return {
272
+ valid: false,
273
+ error: `Unexpected indent (${currentIndent} spaces, expected ${expectedIndent})`,
274
+ line: lineNum + 1,
275
+ column: 1,
276
+ };
277
+ }
278
+ indentStack.push(currentIndent);
279
+ }
280
+ else if (currentIndent < expectedIndent) {
281
+ // Dedent - must match a previous level
282
+ while (indentStack.length > 1 && indentStack[indentStack.length - 1] > currentIndent) {
283
+ indentStack.pop();
284
+ }
285
+ if (indentStack[indentStack.length - 1] !== currentIndent) {
286
+ return {
287
+ valid: false,
288
+ error: `Unindent does not match any outer indentation level`,
289
+ line: lineNum + 1,
290
+ column: 1,
291
+ };
292
+ }
293
+ }
294
+ // Mark if this line ends with a colon (starts a block)
295
+ if (trimmed.endsWith(":")) {
296
+ colonBlockStarts.add(lineNum);
297
+ }
298
+ }
299
+ return { valid: true };
300
+ }
301
+ /**
302
+ * Check string literals
303
+ */
304
+ checkStrings(source) {
305
+ const lines = source.split("\n");
306
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
307
+ const line = lines[lineNum];
308
+ let i = 0;
309
+ while (i < line.length) {
310
+ const char = line[i];
311
+ // Check for string start
312
+ if (char === '"' || char === "'") {
313
+ // Check for triple quotes
314
+ const tripleQuote = line.slice(i, i + 3);
315
+ const isTriple = tripleQuote === char.repeat(3);
316
+ const quoteChar = isTriple ? tripleQuote : char;
317
+ const startIndex = i;
318
+ i += quoteChar.length;
319
+ // Find end of string
320
+ let foundEnd = false;
321
+ let escaped = false;
322
+ while (i < line.length) {
323
+ const c = line[i];
324
+ if (escaped) {
325
+ escaped = false;
326
+ i++;
327
+ continue;
328
+ }
329
+ if (c === "\\") {
330
+ escaped = true;
331
+ i++;
332
+ continue;
333
+ }
334
+ if (line.slice(i, i + quoteChar.length) === quoteChar) {
335
+ foundEnd = true;
336
+ i += quoteChar.length;
337
+ break;
338
+ }
339
+ i++;
340
+ }
341
+ // For triple quotes, the end might be on a later line
342
+ // We handle this in a simplified way - just check single-line strings
343
+ if (!isTriple && !foundEnd) {
344
+ return {
345
+ valid: false,
346
+ error: `Unterminated string literal`,
347
+ line: lineNum + 1,
348
+ column: startIndex + 1,
349
+ };
350
+ }
351
+ }
352
+ else {
353
+ i++;
354
+ }
355
+ }
356
+ }
357
+ return { valid: true };
358
+ }
359
+ /**
360
+ * Check for common syntax patterns
361
+ */
362
+ checkSyntaxPatterns(source) {
363
+ const lines = source.split("\n");
364
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
365
+ const line = lines[lineNum].trim();
366
+ // Skip empty lines and comments
367
+ if (!line || line.startsWith("#"))
368
+ continue;
369
+ // Remove string literals for pattern checking
370
+ const codeOnly = line.replace(/(["'])(?:(?=(\\?))\2.)*?\1/g, "");
371
+ // Check for invalid assignment targets
372
+ const invalidAssignment = codeOnly.match(/^(\d+|\d+\.\d+)\s*=/);
373
+ if (invalidAssignment) {
374
+ return {
375
+ valid: false,
376
+ error: `Cannot assign to literal`,
377
+ line: lineNum + 1,
378
+ column: 1,
379
+ };
380
+ }
381
+ // Check for missing colons after block statements
382
+ const blockKeywords = ["if", "elif", "else", "for", "while", "def", "class", "try", "except", "finally", "with"];
383
+ for (const kw of blockKeywords) {
384
+ const pattern = new RegExp(`^${kw}\\b`);
385
+ if (pattern.test(codeOnly) && !codeOnly.endsWith(":")) {
386
+ // Check if it's a single-line statement
387
+ if (!codeOnly.includes(";")) {
388
+ return {
389
+ valid: false,
390
+ error: `Missing ':' after '${kw}' statement`,
391
+ line: lineNum + 1,
392
+ column: codeOnly.indexOf(kw) + 1,
393
+ };
394
+ }
395
+ }
396
+ }
397
+ }
398
+ return { valid: true };
399
+ }
400
+ /**
401
+ * Validate using Pyodide (when available)
402
+ */
403
+ async validateWithPyodide(source) {
404
+ try {
405
+ const g = globalThis;
406
+ if (!g.pyodide?.runPython) {
407
+ return { valid: true }; // Fall back to basic validation
408
+ }
409
+ // Use Python's compile() to check syntax
410
+ const code = `
411
+ import ast
412
+ try:
413
+ ast.parse(${JSON.stringify(source)})
414
+ "valid"
415
+ except SyntaxError as e:
416
+ f"{e.msg}|{e.lineno}|{e.offset}"
417
+ `;
418
+ const result = g.pyodide.runPython(code);
419
+ if (result === "valid") {
420
+ return { valid: true };
421
+ }
422
+ const [msg, line, col] = result.split("|");
423
+ return {
424
+ valid: false,
425
+ error: msg,
426
+ line: line ? parseInt(line, 10) : undefined,
427
+ column: col ? parseInt(col, 10) : undefined,
428
+ };
429
+ }
430
+ catch {
431
+ // If Pyodide validation fails, fall back to basic validation result
432
+ return { valid: true };
433
+ }
434
+ }
435
+ /**
436
+ * Check permissions for Python execution
437
+ */
438
+ checkPermissions(permissions) {
439
+ // Python often needs filesystem access
440
+ if (permissions.fs?.write || permissions.network?.outbound) {
441
+ // These require appropriate sandboxing
442
+ }
443
+ }
444
+ /**
445
+ * Create a stub WASM module that wraps Python code
446
+ *
447
+ * This creates a minimal WASM module that can be used with a Python runtime.
448
+ * The actual Python execution happens in the runtime, not the compiler.
449
+ */
450
+ async createStubWasm(source, options) {
451
+ // Encode the Python source into the WASM data section
452
+ const sourceBytes = new TextEncoder().encode(source);
453
+ // Create a minimal WASM module structure
454
+ // This is a stub - actual execution requires a Python runtime
455
+ const wasmModule = this.buildWasmModule(sourceBytes, options?.optimize ?? false);
456
+ return wasmModule;
457
+ }
458
+ /**
459
+ * Build a minimal WASM module structure
460
+ *
461
+ * Creates a WASM module with:
462
+ * - Memory section
463
+ * - Data section containing Python source
464
+ * - Exported functions for runtime interaction
465
+ */
466
+ buildWasmModule(sourceBytes, _optimize) {
467
+ // WASM module header
468
+ const magic = new Uint8Array([0x00, 0x61, 0x73, 0x6D]); // \0asm
469
+ const version = new Uint8Array([0x01, 0x00, 0x00, 0x00]); // version 1
470
+ // Build sections
471
+ const sections = [];
472
+ // Type section (section id 1)
473
+ const typeSection = this.buildTypeSection();
474
+ sections.push(typeSection);
475
+ // Function section (section id 3)
476
+ const funcSection = this.buildFunctionSection();
477
+ sections.push(funcSection);
478
+ // Memory section (section id 5)
479
+ const memorySection = this.buildMemorySection(sourceBytes.length);
480
+ sections.push(memorySection);
481
+ // Export section (section id 7)
482
+ const exportSection = this.buildExportSection();
483
+ sections.push(exportSection);
484
+ // Code section (section id 10)
485
+ const codeSection = this.buildCodeSection();
486
+ sections.push(codeSection);
487
+ // Data section (section id 11)
488
+ const dataSection = this.buildDataSection(sourceBytes);
489
+ sections.push(dataSection);
490
+ // Combine all parts
491
+ const totalLength = magic.length + version.length +
492
+ sections.reduce((sum, s) => sum + s.length, 0);
493
+ const result = new Uint8Array(totalLength);
494
+ let offset = 0;
495
+ result.set(magic, offset);
496
+ offset += magic.length;
497
+ result.set(version, offset);
498
+ offset += version.length;
499
+ for (const section of sections) {
500
+ result.set(section, offset);
501
+ offset += section.length;
502
+ }
503
+ return result;
504
+ }
505
+ buildTypeSection() {
506
+ // Section id = 1
507
+ // 1 function type: () -> i32
508
+ const content = new Uint8Array([
509
+ 0x01, // section id
510
+ 0x05, // section size
511
+ 0x01, // 1 type
512
+ 0x60, // func type
513
+ 0x00, // 0 params
514
+ 0x01, 0x41, // 1 result: i32
515
+ ]);
516
+ return content;
517
+ }
518
+ buildFunctionSection() {
519
+ // Section id = 3
520
+ // 1 function using type 0
521
+ const content = new Uint8Array([
522
+ 0x03, // section id
523
+ 0x02, // section size
524
+ 0x01, // 1 function
525
+ 0x00, // type index 0
526
+ ]);
527
+ return content;
528
+ }
529
+ buildMemorySection(sourceLength) {
530
+ // Calculate required pages (64KB each)
531
+ const pagesNeeded = Math.ceil((sourceLength + 65536) / 65536);
532
+ const maxPages = Math.max(pagesNeeded, 16);
533
+ // Section id = 5
534
+ const content = new Uint8Array([
535
+ 0x05, // section id
536
+ 0x03, // section size
537
+ 0x01, // 1 memory
538
+ 0x00, // no max specified (has max)
539
+ pagesNeeded & 0x7F, // min pages (LEB128)
540
+ maxPages & 0x7F, // max pages (LEB128)
541
+ ]);
542
+ return content;
543
+ }
544
+ buildExportSection() {
545
+ // Section id = 7
546
+ // Export "run" function
547
+ const nameBytes = new TextEncoder().encode("run");
548
+ const content = new Uint8Array([
549
+ 0x07, // section id
550
+ 0x07, // section size
551
+ 0x01, // 1 export
552
+ nameBytes.length, // name length
553
+ ...nameBytes, // "run"
554
+ 0x00, // export kind: function
555
+ 0x00, // function index 0
556
+ ]);
557
+ return content;
558
+ }
559
+ buildCodeSection() {
560
+ // Section id = 10
561
+ // Simple function that returns the source length
562
+ const content = new Uint8Array([
563
+ 0x0A, // section id
564
+ 0x07, // section size
565
+ 0x01, // 1 function body
566
+ 0x05, // body size
567
+ 0x00, // local count
568
+ 0x41, 0x00, // i32.const 0 (return source start offset)
569
+ 0x0B, // end
570
+ ]);
571
+ return content;
572
+ }
573
+ buildDataSection(sourceBytes) {
574
+ // Section id = 11
575
+ // Store Python source at memory offset 0
576
+ const dataHeader = new Uint8Array([
577
+ 0x0B, // section id
578
+ ]);
579
+ // Calculate section size
580
+ const sizeBytes = this.encodeLEB128(4 + 1 + 2 + sourceBytes.length);
581
+ const dataContent = new Uint8Array([
582
+ 0x01, // 1 data segment
583
+ 0x00, // active, memory index 0
584
+ 0x41, 0x00, // i32.const 0 (offset)
585
+ 0x0B, // end
586
+ ...this.encodeLEB128(sourceBytes.length), // size
587
+ ]);
588
+ const total = new Uint8Array(dataHeader.length + sizeBytes.length + dataContent.length + sourceBytes.length);
589
+ let offset = 0;
590
+ total.set(dataHeader, offset);
591
+ offset += dataHeader.length;
592
+ total.set(sizeBytes, offset);
593
+ offset += sizeBytes.length;
594
+ total.set(dataContent, offset);
595
+ offset += dataContent.length;
596
+ total.set(sourceBytes, offset);
597
+ return total;
598
+ }
599
+ /**
600
+ * Encode a number as LEB128
601
+ */
602
+ encodeLEB128(value) {
603
+ const bytes = [];
604
+ let remaining = value;
605
+ do {
606
+ let byte = remaining & 0x7F;
607
+ remaining >>>= 7;
608
+ if (remaining !== 0) {
609
+ byte |= 0x80;
610
+ }
611
+ bytes.push(byte);
612
+ } while (remaining !== 0);
613
+ return new Uint8Array(bytes);
614
+ }
615
+ /**
616
+ * Calculate memory pages needed
617
+ */
618
+ calculateMemoryPages(source, limits) {
619
+ const sourceSize = new TextEncoder().encode(source).length;
620
+ const basePages = Math.ceil(sourceSize / 65536);
621
+ const limitPages = limits.memory ? Math.ceil(this.parseMemoryLimit(limits.memory) / 65536) : 256;
622
+ return Math.max(Math.min(basePages + 4, limitPages), 4);
623
+ }
624
+ /**
625
+ * Parse memory limit to bytes
626
+ */
627
+ parseMemoryLimit(mem) {
628
+ if (typeof mem === "number")
629
+ return mem;
630
+ const match = mem.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);
631
+ if (!match)
632
+ return 16 * 1024 * 1024;
633
+ const [, num, unit] = match;
634
+ const multipliers = {
635
+ b: 1, kb: 1024, mb: 1024 ** 2, gb: 1024 ** 3,
636
+ };
637
+ return Math.floor(parseFloat(num) * (multipliers[unit?.toLowerCase() ?? "b"] ?? 1));
638
+ }
639
+ }
640
+ /**
641
+ * Create a Python compiler instance
642
+ */
643
+ export function createPythonCompiler() {
644
+ return new PythonCompiler();
645
+ }
646
+ /**
647
+ * Default Python compiler instance
648
+ */
649
+ export const pythonCompiler = new PythonCompiler();
650
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/compilers/python.ts"],"names":[],"mappings":"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"}