@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,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cell Primitive
|
|
3
|
+
*
|
|
4
|
+
* Represents a single unit of executable code.
|
|
5
|
+
* Cells can be combined into notebooks for sequential execution.
|
|
6
|
+
*/
|
|
7
|
+
import { v4 as uuid } from "uuid";
|
|
8
|
+
/**
|
|
9
|
+
* Cell Builder
|
|
10
|
+
*
|
|
11
|
+
* Fluent API for creating cells.
|
|
12
|
+
*/
|
|
13
|
+
export class CellBuilder {
|
|
14
|
+
id = uuid();
|
|
15
|
+
language = "javascript";
|
|
16
|
+
source = "";
|
|
17
|
+
metadata = {};
|
|
18
|
+
setId(id) {
|
|
19
|
+
this.id = id;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
setLanguage(lang) {
|
|
23
|
+
this.language = lang;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
setSource(code) {
|
|
27
|
+
this.source = code;
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
addMetadata(key, value) {
|
|
31
|
+
this.metadata[key] = value;
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
setIndex(index) {
|
|
35
|
+
this.metadata.index = index;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
addTag(tag) {
|
|
39
|
+
this.metadata.tags = [...(this.metadata.tags ?? []), tag];
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
build() {
|
|
43
|
+
return {
|
|
44
|
+
id: this.id,
|
|
45
|
+
language: this.language,
|
|
46
|
+
source: this.source,
|
|
47
|
+
metadata: Object.keys(this.metadata).length > 0 ? this.metadata : undefined,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
buildExecutable() {
|
|
51
|
+
return {
|
|
52
|
+
...this.build(),
|
|
53
|
+
state: "idle",
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Cell Executor
|
|
59
|
+
*
|
|
60
|
+
* Handles execution of individual cells.
|
|
61
|
+
*/
|
|
62
|
+
export class CellExecutor {
|
|
63
|
+
compileFn;
|
|
64
|
+
executeFn;
|
|
65
|
+
constructor(compileFn, executeFn) {
|
|
66
|
+
this.compileFn = compileFn;
|
|
67
|
+
this.executeFn = executeFn;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Execute a cell
|
|
71
|
+
*/
|
|
72
|
+
async execute(cell, context) {
|
|
73
|
+
cell.state = "running";
|
|
74
|
+
cell.lastRun = new Date();
|
|
75
|
+
try {
|
|
76
|
+
// Compile the cell
|
|
77
|
+
const compiled = await this.compileFn(cell);
|
|
78
|
+
// Execute
|
|
79
|
+
const result = await this.executeFn(compiled, context);
|
|
80
|
+
// Update cell state
|
|
81
|
+
cell.state = result.success ? "success" : "error";
|
|
82
|
+
cell.result = result;
|
|
83
|
+
cell.executionCount = (cell.executionCount ?? 0) + 1;
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
const result = {
|
|
88
|
+
success: false,
|
|
89
|
+
error: {
|
|
90
|
+
message: error instanceof Error ? error.message : String(error),
|
|
91
|
+
type: "runtime",
|
|
92
|
+
},
|
|
93
|
+
metrics: {
|
|
94
|
+
duration: 0,
|
|
95
|
+
memoryUsed: 0,
|
|
96
|
+
},
|
|
97
|
+
output: { stdout: [], stderr: [], displays: [] },
|
|
98
|
+
};
|
|
99
|
+
cell.state = "error";
|
|
100
|
+
cell.result = result;
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Cell Registry
|
|
107
|
+
*
|
|
108
|
+
* Tracks cells and their relationships.
|
|
109
|
+
*/
|
|
110
|
+
export class CellRegistry {
|
|
111
|
+
cells = new Map();
|
|
112
|
+
dependencies = new Map();
|
|
113
|
+
dependents = new Map();
|
|
114
|
+
/**
|
|
115
|
+
* Add a cell
|
|
116
|
+
*/
|
|
117
|
+
add(cell) {
|
|
118
|
+
this.cells.set(cell.id, cell);
|
|
119
|
+
// Track dependencies
|
|
120
|
+
if (cell.dependencies) {
|
|
121
|
+
for (const depId of cell.dependencies) {
|
|
122
|
+
this.addDependency(cell.id, depId);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get a cell by ID
|
|
128
|
+
*/
|
|
129
|
+
get(id) {
|
|
130
|
+
return this.cells.get(id);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Remove a cell
|
|
134
|
+
*/
|
|
135
|
+
remove(id) {
|
|
136
|
+
const cell = this.cells.get(id);
|
|
137
|
+
if (!cell)
|
|
138
|
+
return;
|
|
139
|
+
// Clean up dependencies
|
|
140
|
+
const deps = this.dependencies.get(id);
|
|
141
|
+
if (deps) {
|
|
142
|
+
for (const depId of deps) {
|
|
143
|
+
this.dependents.get(depId)?.delete(id);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Clean up dependents
|
|
147
|
+
const dependents = this.dependents.get(id);
|
|
148
|
+
if (dependents) {
|
|
149
|
+
for (const dependentId of dependents) {
|
|
150
|
+
this.dependencies.get(dependentId)?.delete(id);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
this.cells.delete(id);
|
|
154
|
+
this.dependencies.delete(id);
|
|
155
|
+
this.dependents.delete(id);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get all cells
|
|
159
|
+
*/
|
|
160
|
+
getAll() {
|
|
161
|
+
return Array.from(this.cells.values());
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get cells by language
|
|
165
|
+
*/
|
|
166
|
+
getByLanguage(language) {
|
|
167
|
+
return this.getAll().filter(c => c.language === language);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get cells by state
|
|
171
|
+
*/
|
|
172
|
+
getByState(state) {
|
|
173
|
+
return this.getAll().filter(c => c.state === state);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Add dependency between cells
|
|
177
|
+
*/
|
|
178
|
+
addDependency(cellId, dependsOn) {
|
|
179
|
+
if (!this.dependencies.has(cellId)) {
|
|
180
|
+
this.dependencies.set(cellId, new Set());
|
|
181
|
+
}
|
|
182
|
+
this.dependencies.get(cellId).add(dependsOn);
|
|
183
|
+
if (!this.dependents.has(dependsOn)) {
|
|
184
|
+
this.dependents.set(dependsOn, new Set());
|
|
185
|
+
}
|
|
186
|
+
this.dependents.get(dependsOn).add(cellId);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get dependencies of a cell
|
|
190
|
+
*/
|
|
191
|
+
getDependencies(cellId) {
|
|
192
|
+
return Array.from(this.dependencies.get(cellId) ?? []);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get dependents of a cell (cells that depend on this one)
|
|
196
|
+
*/
|
|
197
|
+
getDependents(cellId) {
|
|
198
|
+
return Array.from(this.dependents.get(cellId) ?? []);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get execution order (topological sort)
|
|
202
|
+
*/
|
|
203
|
+
getExecutionOrder() {
|
|
204
|
+
const order = [];
|
|
205
|
+
const visited = new Set();
|
|
206
|
+
const visiting = new Set();
|
|
207
|
+
const visit = (id) => {
|
|
208
|
+
if (visited.has(id))
|
|
209
|
+
return;
|
|
210
|
+
if (visiting.has(id)) {
|
|
211
|
+
throw new Error(`Circular dependency detected involving cell: ${id}`);
|
|
212
|
+
}
|
|
213
|
+
visiting.add(id);
|
|
214
|
+
const deps = this.dependencies.get(id);
|
|
215
|
+
if (deps) {
|
|
216
|
+
for (const dep of deps) {
|
|
217
|
+
visit(dep);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
visiting.delete(id);
|
|
221
|
+
visited.add(id);
|
|
222
|
+
order.push(id);
|
|
223
|
+
};
|
|
224
|
+
for (const id of this.cells.keys()) {
|
|
225
|
+
visit(id);
|
|
226
|
+
}
|
|
227
|
+
return order;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check if cell has circular dependencies
|
|
231
|
+
*/
|
|
232
|
+
hasCircularDependency(cellId) {
|
|
233
|
+
try {
|
|
234
|
+
this.getExecutionOrder();
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get cells that need re-execution after a cell changes
|
|
243
|
+
*/
|
|
244
|
+
getCellsToReexecute(cellId) {
|
|
245
|
+
const toReexecute = [];
|
|
246
|
+
const visited = new Set();
|
|
247
|
+
const collect = (id) => {
|
|
248
|
+
if (visited.has(id))
|
|
249
|
+
return;
|
|
250
|
+
visited.add(id);
|
|
251
|
+
toReexecute.push(id);
|
|
252
|
+
const dependents = this.dependents.get(id);
|
|
253
|
+
if (dependents) {
|
|
254
|
+
for (const dependent of dependents) {
|
|
255
|
+
collect(dependent);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
collect(cellId);
|
|
260
|
+
return toReexecute.slice(1); // Exclude the original cell
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Clear all cells
|
|
264
|
+
*/
|
|
265
|
+
clear() {
|
|
266
|
+
this.cells.clear();
|
|
267
|
+
this.dependencies.clear();
|
|
268
|
+
this.dependents.clear();
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Get count
|
|
272
|
+
*/
|
|
273
|
+
get count() {
|
|
274
|
+
return this.cells.size;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Create a simple cell
|
|
279
|
+
*/
|
|
280
|
+
export function createCell(language, source, options) {
|
|
281
|
+
return {
|
|
282
|
+
id: options?.id ?? uuid(),
|
|
283
|
+
language,
|
|
284
|
+
source,
|
|
285
|
+
metadata: options?.metadata,
|
|
286
|
+
dependencies: options?.dependencies,
|
|
287
|
+
state: "idle",
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Create cells from code blocks
|
|
292
|
+
*/
|
|
293
|
+
export function createCellsFromMarkdown(markdown, defaultLanguage = "javascript") {
|
|
294
|
+
const cells = [];
|
|
295
|
+
const codeBlockRegex = /```(\w+)?\n([\s\S]*?)```/g;
|
|
296
|
+
let match;
|
|
297
|
+
let index = 0;
|
|
298
|
+
while ((match = codeBlockRegex.exec(markdown)) !== null) {
|
|
299
|
+
const lang = match[1] ?? defaultLanguage;
|
|
300
|
+
const source = match[2].trim();
|
|
301
|
+
cells.push(createCell(lang, source, {
|
|
302
|
+
metadata: { index: index++ },
|
|
303
|
+
}));
|
|
304
|
+
}
|
|
305
|
+
return cells;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Convert cells to markdown
|
|
309
|
+
*/
|
|
310
|
+
export function cellsToMarkdown(cells) {
|
|
311
|
+
return cells
|
|
312
|
+
.sort((a, b) => (a.metadata?.index ?? 0) - (b.metadata?.index ?? 0))
|
|
313
|
+
.map(cell => {
|
|
314
|
+
const lang = cell.language === "javascript" ? "js" : cell.language;
|
|
315
|
+
return `\`\`\`${lang}\n${cell.source}\n\`\`\``;
|
|
316
|
+
})
|
|
317
|
+
.join("\n\n");
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=cell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cell.js","sourceRoot":"","sources":["../../src/core/cell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiler Primitive
|
|
3
|
+
*
|
|
4
|
+
* Transforms source code to executable format (typically WASM).
|
|
5
|
+
* Composable: mix and match compilers for different languages.
|
|
6
|
+
*/
|
|
7
|
+
import type { Language, Permissions, Limits } from "./types.js";
|
|
8
|
+
/** Compiler result */
|
|
9
|
+
export interface CompileResult {
|
|
10
|
+
/** Compiled WASM bytes */
|
|
11
|
+
wasmBytes: Uint8Array;
|
|
12
|
+
/** Original source code (for interpreted languages) */
|
|
13
|
+
source?: string;
|
|
14
|
+
/** Source map for debugging */
|
|
15
|
+
sourceMap?: string;
|
|
16
|
+
/** Exported functions */
|
|
17
|
+
exports: string[];
|
|
18
|
+
/** Imported functions needed */
|
|
19
|
+
imports: ImportDefinition[];
|
|
20
|
+
/** Memory requirements */
|
|
21
|
+
memoryRequirements?: {
|
|
22
|
+
initial: number;
|
|
23
|
+
maximum?: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** Import definition */
|
|
27
|
+
export interface ImportDefinition {
|
|
28
|
+
module: string;
|
|
29
|
+
name: string;
|
|
30
|
+
type: "function" | "memory" | "global" | "table";
|
|
31
|
+
signature?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Compiler options */
|
|
34
|
+
export interface CompilerOptions {
|
|
35
|
+
/** Optimize output */
|
|
36
|
+
optimize?: boolean;
|
|
37
|
+
/** Debug info */
|
|
38
|
+
debug?: boolean;
|
|
39
|
+
/** Source map */
|
|
40
|
+
sourceMap?: boolean;
|
|
41
|
+
/** Target WASM features */
|
|
42
|
+
features?: {
|
|
43
|
+
simd?: boolean;
|
|
44
|
+
threads?: boolean;
|
|
45
|
+
referenceTypes?: boolean;
|
|
46
|
+
bulkMemory?: boolean;
|
|
47
|
+
};
|
|
48
|
+
/** Additional compiler-specific options */
|
|
49
|
+
extra?: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
/** Base compiler interface */
|
|
52
|
+
export interface ICompiler {
|
|
53
|
+
/** Language this compiler handles */
|
|
54
|
+
readonly language: Language;
|
|
55
|
+
/** Check if this compiler is available */
|
|
56
|
+
isAvailable(): Promise<boolean>;
|
|
57
|
+
/** Check if code syntax is valid */
|
|
58
|
+
validate(source: string): Promise<{
|
|
59
|
+
valid: boolean;
|
|
60
|
+
error?: string;
|
|
61
|
+
}>;
|
|
62
|
+
/** Compile source to WASM */
|
|
63
|
+
compile(source: string, permissions: Permissions, limits: Limits, options?: CompilerOptions): Promise<CompileResult>;
|
|
64
|
+
/** Get language capabilities */
|
|
65
|
+
getCapabilities(): LanguageCapabilities;
|
|
66
|
+
}
|
|
67
|
+
/** Language capabilities */
|
|
68
|
+
export interface LanguageCapabilities {
|
|
69
|
+
/** Supports REPL-style execution */
|
|
70
|
+
repl: boolean;
|
|
71
|
+
/** Can maintain state between executions */
|
|
72
|
+
stateful: boolean;
|
|
73
|
+
/** Requires compilation step */
|
|
74
|
+
compiled: boolean;
|
|
75
|
+
/** Has garbage collection */
|
|
76
|
+
gc: boolean;
|
|
77
|
+
/** Can import external modules */
|
|
78
|
+
imports: boolean;
|
|
79
|
+
/** Supports async/await */
|
|
80
|
+
async: boolean;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Base Compiler class
|
|
84
|
+
*
|
|
85
|
+
* Extend this to create language-specific compilers.
|
|
86
|
+
*/
|
|
87
|
+
export declare abstract class BaseCompiler implements ICompiler {
|
|
88
|
+
abstract readonly language: Language;
|
|
89
|
+
isAvailable(): Promise<boolean>;
|
|
90
|
+
validate(_source: string): Promise<{
|
|
91
|
+
valid: boolean;
|
|
92
|
+
error?: string;
|
|
93
|
+
}>;
|
|
94
|
+
abstract compile(source: string, permissions: Permissions, limits: Limits, options?: CompilerOptions): Promise<CompileResult>;
|
|
95
|
+
getCapabilities(): LanguageCapabilities;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* WASM Passthrough Compiler
|
|
99
|
+
*
|
|
100
|
+
* Treats already-compiled WASM as "compiled".
|
|
101
|
+
* Used when source is already WASM bytes.
|
|
102
|
+
*/
|
|
103
|
+
export declare class WasmCompiler extends BaseCompiler {
|
|
104
|
+
readonly language: "wasm";
|
|
105
|
+
validate(source: string | Uint8Array): Promise<{
|
|
106
|
+
valid: boolean;
|
|
107
|
+
error?: string;
|
|
108
|
+
}>;
|
|
109
|
+
compile(source: string | Uint8Array, _permissions: Permissions, _limits: Limits, _options?: CompilerOptions): Promise<CompileResult>;
|
|
110
|
+
getCapabilities(): LanguageCapabilities;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Compiler Registry
|
|
114
|
+
*
|
|
115
|
+
* Manages available compilers and routes code to the right one.
|
|
116
|
+
*/
|
|
117
|
+
export declare class CompilerRegistry {
|
|
118
|
+
private compilers;
|
|
119
|
+
register(compiler: ICompiler): void;
|
|
120
|
+
get(language: Language): ICompiler | undefined;
|
|
121
|
+
has(language: Language): boolean;
|
|
122
|
+
getAvailable(): Promise<Language[]>;
|
|
123
|
+
compile(source: string | Uint8Array, language: Language, permissions: Permissions, limits: Limits, options?: CompilerOptions): Promise<CompileResult>;
|
|
124
|
+
}
|
|
125
|
+
export declare const defaultCompilerRegistry: CompilerRegistry;
|
|
126
|
+
//# sourceMappingURL=compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/core/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiler Primitive
|
|
3
|
+
*
|
|
4
|
+
* Transforms source code to executable format (typically WASM).
|
|
5
|
+
* Composable: mix and match compilers for different languages.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Base Compiler class
|
|
9
|
+
*
|
|
10
|
+
* Extend this to create language-specific compilers.
|
|
11
|
+
*/
|
|
12
|
+
export class BaseCompiler {
|
|
13
|
+
async isAvailable() {
|
|
14
|
+
return true; // Override if compiler needs external tools
|
|
15
|
+
}
|
|
16
|
+
async validate(_source) {
|
|
17
|
+
return { valid: true }; // Override for language-specific validation
|
|
18
|
+
}
|
|
19
|
+
getCapabilities() {
|
|
20
|
+
return {
|
|
21
|
+
repl: false,
|
|
22
|
+
stateful: false,
|
|
23
|
+
compiled: true,
|
|
24
|
+
gc: false,
|
|
25
|
+
imports: false,
|
|
26
|
+
async: false,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* WASM Passthrough Compiler
|
|
32
|
+
*
|
|
33
|
+
* Treats already-compiled WASM as "compiled".
|
|
34
|
+
* Used when source is already WASM bytes.
|
|
35
|
+
*/
|
|
36
|
+
export class WasmCompiler extends BaseCompiler {
|
|
37
|
+
language = "wasm";
|
|
38
|
+
async validate(source) {
|
|
39
|
+
try {
|
|
40
|
+
const bytes = typeof source === "string"
|
|
41
|
+
? new TextEncoder().encode(source)
|
|
42
|
+
: source;
|
|
43
|
+
// Check WASM magic number
|
|
44
|
+
if (bytes[0] !== 0x00 || bytes[1] !== 0x61 || bytes[2] !== 0x73 || bytes[3] !== 0x6D) {
|
|
45
|
+
return { valid: false, error: "Invalid WASM magic number" };
|
|
46
|
+
}
|
|
47
|
+
// Use WebAssembly.validate
|
|
48
|
+
const valid = WebAssembly.validate(bytes);
|
|
49
|
+
return { valid };
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return { valid: false, error: String(error) };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async compile(source, _permissions, _limits, _options) {
|
|
56
|
+
const wasmBytes = typeof source === "string"
|
|
57
|
+
? new TextEncoder().encode(source)
|
|
58
|
+
: source;
|
|
59
|
+
// Extract exports from module
|
|
60
|
+
const module = await WebAssembly.compile(wasmBytes);
|
|
61
|
+
const exports = WebAssembly.Module.exports(module).map(e => e.name);
|
|
62
|
+
const imports = WebAssembly.Module.imports(module).map(i => ({
|
|
63
|
+
module: i.module,
|
|
64
|
+
name: i.name,
|
|
65
|
+
type: i.kind,
|
|
66
|
+
}));
|
|
67
|
+
return {
|
|
68
|
+
wasmBytes,
|
|
69
|
+
exports,
|
|
70
|
+
imports,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
getCapabilities() {
|
|
74
|
+
return {
|
|
75
|
+
repl: false,
|
|
76
|
+
stateful: true,
|
|
77
|
+
compiled: true,
|
|
78
|
+
gc: false,
|
|
79
|
+
imports: true,
|
|
80
|
+
async: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Compiler Registry
|
|
86
|
+
*
|
|
87
|
+
* Manages available compilers and routes code to the right one.
|
|
88
|
+
*/
|
|
89
|
+
export class CompilerRegistry {
|
|
90
|
+
compilers = new Map();
|
|
91
|
+
register(compiler) {
|
|
92
|
+
this.compilers.set(compiler.language, compiler);
|
|
93
|
+
}
|
|
94
|
+
get(language) {
|
|
95
|
+
return this.compilers.get(language);
|
|
96
|
+
}
|
|
97
|
+
has(language) {
|
|
98
|
+
return this.compilers.has(language);
|
|
99
|
+
}
|
|
100
|
+
async getAvailable() {
|
|
101
|
+
const available = [];
|
|
102
|
+
for (const [lang, compiler] of this.compilers) {
|
|
103
|
+
if (await compiler.isAvailable()) {
|
|
104
|
+
available.push(lang);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return available;
|
|
108
|
+
}
|
|
109
|
+
async compile(source, language, permissions, limits, options) {
|
|
110
|
+
const compiler = this.compilers.get(language);
|
|
111
|
+
if (!compiler) {
|
|
112
|
+
throw new Error(`No compiler registered for language: ${language}`);
|
|
113
|
+
}
|
|
114
|
+
if (!(await compiler.isAvailable())) {
|
|
115
|
+
throw new Error(`Compiler for ${language} is not available`);
|
|
116
|
+
}
|
|
117
|
+
return compiler.compile(source, permissions, limits, options);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Default registry with built-in compilers
|
|
121
|
+
export const defaultCompilerRegistry = new CompilerRegistry();
|
|
122
|
+
defaultCompilerRegistry.register(new WasmCompiler());
|
|
123
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/core/compiler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyFH;;;;GAIG;AACH,MAAM,OAAgB,YAAY;IAGhC,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,CAAC,4CAA4C;IAC3D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,4CAA4C;IACtE,CAAC;IASD,eAAe;QACb,OAAO;YACL,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,IAAI;YACd,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,YAAY;IACnC,QAAQ,GAAG,MAAe,CAAC;IAEpC,KAAK,CAAC,QAAQ,CAAC,MAA2B;QACxC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ;gBACtC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;gBAClC,CAAC,CAAC,MAAM,CAAC;YAEX,0BAA0B;YAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACrF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;YAC9D,CAAC;YAED,2BAA2B;YAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAA2B,EAC3B,YAAyB,EACzB,OAAe,EACf,QAA0B;QAE1B,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ;YAC1C,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,CAAC,CAAC,MAAM,CAAC;QAEX,8BAA8B;QAC9B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAkD;SAC3D,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,SAAS;YACT,OAAO;YACP,OAAO;SACR,CAAC;IACJ,CAAC;IAED,eAAe;QACb,OAAO;YACL,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IACnB,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEnD,QAAQ,CAAC,QAAmB;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED,GAAG,CAAC,QAAkB;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,QAAkB;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9C,IAAI,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;gBACjC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAA2B,EAC3B,QAAkB,EAClB,WAAwB,EACxB,MAAc,EACd,OAAyB;QAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,mBAAmB,CAAC,CAAC;QAC/D,CAAC;QAED,OAAQ,QAEN,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;CACF;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAC9D,uBAAuB,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Primitives
|
|
3
|
+
*
|
|
4
|
+
* Composable building blocks for sandboxed execution.
|
|
5
|
+
* Each primitive can be used independently or combined.
|
|
6
|
+
*/
|
|
7
|
+
export type { Language, LanguageCapabilities, PermissionLevel, Permissions, FileSystemPermission, NetworkPermission, EnvironmentPermission, ProcessPermission, Limits, Cell, ExecutionContext, ExecutionOptions, ExecutionResult, ExecutionError, ExecutionMetrics, DisplayOutput, Compiler, CompileOptions, Runtime, Kernel, CompletionResult, InspectResult, Notebook, NotebookMetadata, NotebookRunOptions, NotebookResult, Session, PolyglotCell, LanguageBridge, Sandbox, SandboxOptions, SessionOptions, NotebookOptions, } from "./types.js";
|
|
8
|
+
export { permissionsFromLevel, parseMemory, parseTime, } from "./types.js";
|
|
9
|
+
export type { CompileResult, ImportDefinition, CompilerOptions, ICompiler, } from "./compiler.js";
|
|
10
|
+
export { BaseCompiler, WasmCompiler, CompilerRegistry, defaultCompilerRegistry, } from "./compiler.js";
|
|
11
|
+
export type { RuntimeOptions, ExecutionRequest, IRuntime, RuntimeCapabilities, } from "./runtime.js";
|
|
12
|
+
export { Wasm2WasmRuntime, NativeWasmRuntime, RuntimeRegistry, defaultRuntimeRegistry, } from "./runtime.js";
|
|
13
|
+
export type { PermissionChecker as PermissionCheckerType, } from "./permissions.js";
|
|
14
|
+
export { PermissionChecker, PermissionBuilder, createPermissions, mergePermissions, impliesPermission, upgradePermissions, } from "./permissions.js";
|
|
15
|
+
export type { ParsedLimits, } from "./limits.js";
|
|
16
|
+
export { DEFAULT_LIMITS, LimitsParser, LimitsEnforcer, LimitsBuilder, mergeLimits, } from "./limits.js";
|
|
17
|
+
export type { CellMetadata, CellState, ExecutableCell, } from "./cell.js";
|
|
18
|
+
export { CellBuilder, CellExecutor, CellRegistry, createCell, createCellsFromMarkdown, cellsToMarkdown, } from "./cell.js";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,MAAM,EACN,IAAI,EACJ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,cAAc,EACd,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,cAAc,EACd,OAAO,EACP,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACR,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,iBAAiB,IAAI,qBAAqB,GAC3C,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,YAAY,EACZ,SAAS,EACT,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,uBAAuB,EACvB,eAAe,GAChB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Primitives
|
|
3
|
+
*
|
|
4
|
+
* Composable building blocks for sandboxed execution.
|
|
5
|
+
* Each primitive can be used independently or combined.
|
|
6
|
+
*/
|
|
7
|
+
// Type utilities
|
|
8
|
+
export { permissionsFromLevel, parseMemory, parseTime, } from "./types.js";
|
|
9
|
+
export { BaseCompiler, WasmCompiler, CompilerRegistry, defaultCompilerRegistry, } from "./compiler.js";
|
|
10
|
+
export { Wasm2WasmRuntime, NativeWasmRuntime, RuntimeRegistry, defaultRuntimeRegistry, } from "./runtime.js";
|
|
11
|
+
export { PermissionChecker, PermissionBuilder, createPermissions, mergePermissions, impliesPermission, upgradePermissions, } from "./permissions.js";
|
|
12
|
+
export { DEFAULT_LIMITS, LimitsParser, LimitsEnforcer, LimitsBuilder, mergeLimits, } from "./limits.js";
|
|
13
|
+
export { CellBuilder, CellExecutor, CellRegistry, createCell, createCellsFromMarkdown, cellsToMarkdown, } from "./cell.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuCH,iBAAiB;AACjB,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,SAAS,GACV,MAAM,YAAY,CAAC;AAUpB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAUvB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAOtB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,uBAAuB,EACvB,eAAe,GAChB,MAAM,WAAW,CAAC"}
|