runframe 1.0.0

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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +351 -0
  3. package/dist/async.d.ts +38 -0
  4. package/dist/async.d.ts.map +1 -0
  5. package/dist/async.js +98 -0
  6. package/dist/async.js.map +1 -0
  7. package/dist/benchmark.d.ts +9 -0
  8. package/dist/benchmark.d.ts.map +1 -0
  9. package/dist/benchmark.js +216 -0
  10. package/dist/benchmark.js.map +1 -0
  11. package/dist/capabilities.d.ts +26 -0
  12. package/dist/capabilities.d.ts.map +1 -0
  13. package/dist/capabilities.js +110 -0
  14. package/dist/capabilities.js.map +1 -0
  15. package/dist/deterministic.d.ts +81 -0
  16. package/dist/deterministic.d.ts.map +1 -0
  17. package/dist/deterministic.js +135 -0
  18. package/dist/deterministic.js.map +1 -0
  19. package/dist/index.d.ts +17 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +12 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/limits.d.ts +24 -0
  24. package/dist/limits.d.ts.map +1 -0
  25. package/dist/limits.js +42 -0
  26. package/dist/limits.js.map +1 -0
  27. package/dist/memory-optimization.d.ts +43 -0
  28. package/dist/memory-optimization.d.ts.map +1 -0
  29. package/dist/memory-optimization.js +103 -0
  30. package/dist/memory-optimization.js.map +1 -0
  31. package/dist/optimization-examples.d.ts +33 -0
  32. package/dist/optimization-examples.d.ts.map +1 -0
  33. package/dist/optimization-examples.js +255 -0
  34. package/dist/optimization-examples.js.map +1 -0
  35. package/dist/optimized-index.d.ts +12 -0
  36. package/dist/optimized-index.d.ts.map +1 -0
  37. package/dist/optimized-index.js +9 -0
  38. package/dist/optimized-index.js.map +1 -0
  39. package/dist/optimized-sandbox.d.ts +77 -0
  40. package/dist/optimized-sandbox.d.ts.map +1 -0
  41. package/dist/optimized-sandbox.js +153 -0
  42. package/dist/optimized-sandbox.js.map +1 -0
  43. package/dist/sandbox.d.ts +25 -0
  44. package/dist/sandbox.d.ts.map +1 -0
  45. package/dist/sandbox.js +55 -0
  46. package/dist/sandbox.js.map +1 -0
  47. package/dist/script-cache.d.ts +48 -0
  48. package/dist/script-cache.d.ts.map +1 -0
  49. package/dist/script-cache.js +97 -0
  50. package/dist/script-cache.js.map +1 -0
  51. package/dist/stats.d.ts +41 -0
  52. package/dist/stats.d.ts.map +1 -0
  53. package/dist/stats.js +70 -0
  54. package/dist/stats.js.map +1 -0
  55. package/dist/test-corpus.d.ts +15 -0
  56. package/dist/test-corpus.d.ts.map +1 -0
  57. package/dist/test-corpus.js +225 -0
  58. package/dist/test-corpus.js.map +1 -0
  59. package/dist/vm-runtime.d.ts +21 -0
  60. package/dist/vm-runtime.d.ts.map +1 -0
  61. package/dist/vm-runtime.js +276 -0
  62. package/dist/vm-runtime.js.map +1 -0
  63. package/dist/worker-pool.d.ts +62 -0
  64. package/dist/worker-pool.d.ts.map +1 -0
  65. package/dist/worker-pool.js +144 -0
  66. package/dist/worker-pool.js.map +1 -0
  67. package/dist/worker.d.ts +2 -0
  68. package/dist/worker.d.ts.map +1 -0
  69. package/dist/worker.js +39 -0
  70. package/dist/worker.js.map +1 -0
  71. package/package.json +67 -0
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CPU/Memory limit helpers
3
+ */
4
+ export interface ResourceLimits {
5
+ cpuMs: number;
6
+ memoryMb: number;
7
+ }
8
+ /**
9
+ * Default strict limits for untrusted code
10
+ */
11
+ export declare const DEFAULT_LIMITS: ResourceLimits;
12
+ /**
13
+ * Strict mode - minimal resources
14
+ */
15
+ export declare const STRICT_LIMITS: ResourceLimits;
16
+ /**
17
+ * Relaxed mode - for trusted/safe code
18
+ */
19
+ export declare const RELAXED_LIMITS: ResourceLimits;
20
+ /**
21
+ * Validate that limits are reasonable
22
+ */
23
+ export declare function validateLimits(limits: ResourceLimits): void;
24
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,cAG5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,cAG3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,cAG5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAa3D"}
package/dist/limits.js ADDED
@@ -0,0 +1,42 @@
1
+ /**
2
+ * CPU/Memory limit helpers
3
+ */
4
+ /**
5
+ * Default strict limits for untrusted code
6
+ */
7
+ export const DEFAULT_LIMITS = {
8
+ cpuMs: 5000, // 5 second timeout
9
+ memoryMb: 128 // 128 MB max
10
+ };
11
+ /**
12
+ * Strict mode - minimal resources
13
+ */
14
+ export const STRICT_LIMITS = {
15
+ cpuMs: 1000, // 1 second timeout
16
+ memoryMb: 32 // 32 MB max
17
+ };
18
+ /**
19
+ * Relaxed mode - for trusted/safe code
20
+ */
21
+ export const RELAXED_LIMITS = {
22
+ cpuMs: 30000, // 30 second timeout
23
+ memoryMb: 512 // 512 MB max
24
+ };
25
+ /**
26
+ * Validate that limits are reasonable
27
+ */
28
+ export function validateLimits(limits) {
29
+ if (limits.cpuMs < 100) {
30
+ throw new Error("CPU timeout must be at least 100ms");
31
+ }
32
+ if (limits.cpuMs > 300000) {
33
+ throw new Error("CPU timeout cannot exceed 300s");
34
+ }
35
+ if (limits.memoryMb < 16) {
36
+ throw new Error("Memory limit must be at least 16MB");
37
+ }
38
+ if (limits.memoryMb > 2048) {
39
+ throw new Error("Memory limit cannot exceed 2048MB");
40
+ }
41
+ }
42
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,KAAK,EAAE,IAAI,EAAO,mBAAmB;IACrC,QAAQ,EAAE,GAAG,CAAK,aAAa;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,KAAK,EAAE,IAAI,EAAO,mBAAmB;IACrC,QAAQ,EAAE,EAAE,CAAM,YAAY;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,KAAK,EAAE,KAAK,EAAM,oBAAoB;IACtC,QAAQ,EAAE,GAAG,CAAK,aAAa;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,IAAI,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Memory optimization utilities
3
+ */
4
+ /**
5
+ * Lazy capability membrane builder
6
+ * Only creates proxies for capabilities that are actually restricted
7
+ */
8
+ export declare function createLazyCapabilityProxy(target: any, capability: string, granted: boolean): any;
9
+ /**
10
+ * Compress stats for storage/transmission
11
+ */
12
+ export interface CompressedStats {
13
+ d: number;
14
+ m: number;
15
+ p: number;
16
+ c: number;
17
+ r: number;
18
+ e: number;
19
+ t: boolean;
20
+ }
21
+ export declare function compressStats(stats: any): CompressedStats;
22
+ export declare function decompressStats(compressed: CompressedStats, memoryStart: number): any;
23
+ /**
24
+ * GC hints for Node.js
25
+ */
26
+ export declare function suggestGC(): void;
27
+ /**
28
+ * Periodic memory warning handler
29
+ */
30
+ export declare function setupMemoryWatcher(threshold?: number): () => void;
31
+ /**
32
+ * Limit queue depth to prevent memory explosion
33
+ */
34
+ export declare class BoundedQueue<T> {
35
+ private queue;
36
+ private maxSize;
37
+ constructor(maxSize?: number);
38
+ push(item: T): boolean;
39
+ shift(): T | undefined;
40
+ size(): number;
41
+ clear(): void;
42
+ }
43
+ //# sourceMappingURL=memory-optimization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-optimization.d.ts","sourceRoot":"","sources":["../src/memory-optimization.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,OAmBjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,OAAO,CAAC;CACZ;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,eAAe,CAUzD;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,GAAG,CAarF;AAED;;GAEG;AACH,wBAAgB,SAAS,SAMxB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,MAAY,cAgBzD;AAED;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAa;IAIlC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAQtB,KAAK,IAAI,CAAC,GAAG,SAAS;IAItB,IAAI,IAAI,MAAM;IAId,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Memory optimization utilities
3
+ */
4
+ /**
5
+ * Lazy capability membrane builder
6
+ * Only creates proxies for capabilities that are actually restricted
7
+ */
8
+ export function createLazyCapabilityProxy(target, capability, granted) {
9
+ // If granted, no need to wrap - save memory
10
+ if (granted) {
11
+ return target;
12
+ }
13
+ // Only wrap if denied
14
+ return new Proxy(target, {
15
+ get() {
16
+ throw new Error(`Capability '${capability}' is not granted`);
17
+ },
18
+ set() {
19
+ throw new Error(`Capability '${capability}' is not granted`);
20
+ },
21
+ has() {
22
+ return false;
23
+ }
24
+ });
25
+ }
26
+ export function compressStats(stats) {
27
+ return {
28
+ d: stats.duration,
29
+ m: stats.memoryEnd - stats.memoryStart,
30
+ p: stats.memoryPeak - stats.memoryStart,
31
+ c: stats.promisesCreated,
32
+ r: stats.promisesResolved,
33
+ e: stats.errors?.length || 0,
34
+ t: stats.timeout
35
+ };
36
+ }
37
+ export function decompressStats(compressed, memoryStart) {
38
+ return {
39
+ duration: compressed.d,
40
+ memoryStart,
41
+ memoryEnd: memoryStart + compressed.m,
42
+ memoryPeak: memoryStart + compressed.p,
43
+ promisesCreated: compressed.c,
44
+ promisesResolved: compressed.r,
45
+ promisesRejected: 0,
46
+ errors: Array(compressed.e).fill(""),
47
+ timeout: compressed.t,
48
+ completed: !compressed.t
49
+ };
50
+ }
51
+ /**
52
+ * GC hints for Node.js
53
+ */
54
+ export function suggestGC() {
55
+ // Only if gc is exposed
56
+ if (typeof global.gc !== "undefined") {
57
+ // Full GC
58
+ global.gc();
59
+ }
60
+ }
61
+ /**
62
+ * Periodic memory warning handler
63
+ */
64
+ export function setupMemoryWatcher(threshold = 0.9) {
65
+ const memWatcher = setInterval(() => {
66
+ const usage = process.memoryUsage();
67
+ const heapPercent = usage.heapUsed / usage.heapTotal;
68
+ if (heapPercent > threshold) {
69
+ console.warn(`⚠️ Memory usage high: ${(heapPercent * 100).toFixed(2)}%`);
70
+ // Try to clean up
71
+ if (typeof global.gc !== "undefined") {
72
+ global.gc();
73
+ }
74
+ }
75
+ }, 10000);
76
+ return () => clearInterval(memWatcher);
77
+ }
78
+ /**
79
+ * Limit queue depth to prevent memory explosion
80
+ */
81
+ export class BoundedQueue {
82
+ constructor(maxSize = 1000) {
83
+ this.queue = [];
84
+ this.maxSize = maxSize;
85
+ }
86
+ push(item) {
87
+ if (this.queue.length >= this.maxSize) {
88
+ return false; // Queue full
89
+ }
90
+ this.queue.push(item);
91
+ return true;
92
+ }
93
+ shift() {
94
+ return this.queue.shift();
95
+ }
96
+ size() {
97
+ return this.queue.length;
98
+ }
99
+ clear() {
100
+ this.queue = [];
101
+ }
102
+ }
103
+ //# sourceMappingURL=memory-optimization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-optimization.js","sourceRoot":"","sources":["../src/memory-optimization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Complete optimization example
3
+ * Shows all performance improvements in action
4
+ */
5
+ /**
6
+ * Example 1: High-throughput sandbox with pooling
7
+ */
8
+ export declare function example1_HighThroughput(): Promise<void>;
9
+ /**
10
+ * Example 2: Batch execution (reduce overhead)
11
+ */
12
+ export declare function example2_BatchExecution(): Promise<void>;
13
+ /**
14
+ * Example 3: Script caching benefit
15
+ */
16
+ export declare function example3_ScriptCaching(): Promise<void>;
17
+ /**
18
+ * Example 4: Memory-constrained environment
19
+ */
20
+ export declare function example4_MemoryOptimized(): Promise<void>;
21
+ /**
22
+ * Example 5: Comparison - Old vs New
23
+ */
24
+ export declare function example5_ComparisonOldVsNew(): Promise<void>;
25
+ /**
26
+ * Example 6: Production setup with queue
27
+ */
28
+ export declare function example6_ProductionQueue(): Promise<void>;
29
+ /**
30
+ * Run all examples
31
+ */
32
+ export declare function runAllExamples(): Promise<void>;
33
+ //# sourceMappingURL=optimization-examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimization-examples.d.ts","sourceRoot":"","sources":["../src/optimization-examples.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;GAEG;AACH,wBAAsB,uBAAuB,kBA0C5C;AAED;;GAEG;AACH,wBAAsB,uBAAuB,kBAmC5C;AAED;;GAEG;AACH,wBAAsB,sBAAsB,kBA6B3C;AAED;;GAEG;AACH,wBAAsB,wBAAwB,kBA4C7C;AAED;;GAEG;AACH,wBAAsB,2BAA2B,kBAmDhD;AAED;;GAEG;AACH,wBAAsB,wBAAwB,kBA0D7C;AAED;;GAEG;AACH,wBAAsB,cAAc,kBAanC"}
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Complete optimization example
3
+ * Shows all performance improvements in action
4
+ */
5
+ import { createOptimizedSandbox } from "./optimized-sandbox.js";
6
+ import { setupMemoryWatcher, suggestGC, BoundedQueue } from "./memory-optimization.js";
7
+ import { HIGH_CONCURRENCY_CONFIG } from "./worker-pool.js";
8
+ /**
9
+ * Example 1: High-throughput sandbox with pooling
10
+ */
11
+ export async function example1_HighThroughput() {
12
+ console.log("📊 Example 1: High-Throughput Sandbox");
13
+ const sandbox = createOptimizedSandbox({
14
+ cpuMs: 5000,
15
+ memoryMb: 128,
16
+ poolConfig: HIGH_CONCURRENCY_CONFIG,
17
+ cacheScripts: true
18
+ });
19
+ // Stop memory watcher on cleanup
20
+ const stopWatcher = setupMemoryWatcher(0.85);
21
+ const startMem = process.memoryUsage();
22
+ const startTime = Date.now();
23
+ // Simulate 100 concurrent requests
24
+ const promises = [];
25
+ for (let i = 0; i < 100; i++) {
26
+ promises.push(sandbox.run(`
27
+ const arr = Array(${i + 1}).fill(0).map((_, i) => i * 2);
28
+ arr.reduce((a, b) => a + b, 0);
29
+ `));
30
+ }
31
+ const results = await Promise.allSettled(promises);
32
+ const duration = Date.now() - startTime;
33
+ const endMem = process.memoryUsage();
34
+ // Show results
35
+ const succeeded = results.filter((r) => r.status === "fulfilled").length;
36
+ console.log(`✅ Succeeded: ${succeeded}/100`);
37
+ console.log(`⏱️ Total time: ${duration}ms (avg: ${(duration / 100).toFixed(2)}ms)`);
38
+ console.log(`📈 Memory delta: ${((endMem.heapUsed - startMem.heapUsed) / 1024 / 1024).toFixed(2)}MB`);
39
+ console.log(`🔄 Pool stats:`, sandbox.stats().pool);
40
+ console.log(`💾 Cache stats:`, sandbox.stats().cache);
41
+ await sandbox.destroy();
42
+ stopWatcher();
43
+ }
44
+ /**
45
+ * Example 2: Batch execution (reduce overhead)
46
+ */
47
+ export async function example2_BatchExecution() {
48
+ console.log("\n📦 Example 2: Batch Execution");
49
+ const sandbox = createOptimizedSandbox({
50
+ cpuMs: 3000,
51
+ memoryMb: 64,
52
+ poolConfig: { minWorkers: 2, maxWorkers: 4, idleTimeout: 30000, memoryMb: 64 },
53
+ cacheScripts: true
54
+ });
55
+ const startTime = Date.now();
56
+ // Create 50 operations
57
+ const operations = Array.from({ length: 50 }, (_, i) => ({
58
+ id: `op_${i}`,
59
+ code: `
60
+ const data = ${JSON.stringify(Array(10).fill(i))};
61
+ data.map(x => x * Math.PI).reduce((a, b) => a + b, 0);
62
+ `
63
+ }));
64
+ // Execute with 4 concurrent workers
65
+ const results = await sandbox.batch(operations, {
66
+ concurrency: 4,
67
+ stopOnError: false
68
+ });
69
+ const duration = Date.now() - startTime;
70
+ const successful = results.filter((r) => !r.error).length;
71
+ console.log(`✅ Successful: ${successful}/50`);
72
+ console.log(`⏱️ Total time: ${duration}ms (avg: ${(duration / 50).toFixed(2)}ms per op)`);
73
+ console.log(`📊 First result:`, results[0]);
74
+ await sandbox.destroy();
75
+ }
76
+ /**
77
+ * Example 3: Script caching benefit
78
+ */
79
+ export async function example3_ScriptCaching() {
80
+ console.log("\n🔄 Example 3: Script Caching");
81
+ const sandbox = createOptimizedSandbox({
82
+ cpuMs: 2000,
83
+ memoryMb: 32,
84
+ cacheScripts: true
85
+ });
86
+ const code = `
87
+ const arr = [1, 2, 3, 4, 5];
88
+ arr.map(x => x * 2).reduce((a, b) => a + b, 0);
89
+ `;
90
+ // Run same code 20 times
91
+ console.log("Running same code 20 times...");
92
+ const startTime = Date.now();
93
+ for (let i = 0; i < 20; i++) {
94
+ await sandbox.run(code);
95
+ }
96
+ const duration = Date.now() - startTime;
97
+ console.log(`⏱️ Total time: ${duration}ms (avg: ${(duration / 20).toFixed(2)}ms)`);
98
+ console.log(`💾 Cache stats:`, sandbox.stats().cache);
99
+ console.log(`💡 First run compiles, rest use cache (saves compilation time)`);
100
+ await sandbox.destroy();
101
+ }
102
+ /**
103
+ * Example 4: Memory-constrained environment
104
+ */
105
+ export async function example4_MemoryOptimized() {
106
+ console.log("\n💾 Example 4: Memory Optimization");
107
+ const sandbox = createOptimizedSandbox({
108
+ cpuMs: 3000,
109
+ memoryMb: 32, // Very low
110
+ poolConfig: {
111
+ minWorkers: 1,
112
+ maxWorkers: 2,
113
+ idleTimeout: 10000,
114
+ memoryMb: 32
115
+ },
116
+ cacheScripts: true
117
+ });
118
+ // Watch memory
119
+ const stopWatcher = setupMemoryWatcher(0.75);
120
+ const startMem = process.memoryUsage();
121
+ // Run 30 operations sequentially
122
+ const operations = Array.from({ length: 30 }, (_, i) => ({
123
+ id: `mem_${i}`,
124
+ code: `Array(1000).fill(0).map(x => Math.random())`
125
+ }));
126
+ const results = await sandbox.batch(operations, {
127
+ concurrency: 1, // Serial execution to save memory
128
+ stopOnError: false
129
+ });
130
+ const endMem = process.memoryUsage();
131
+ console.log(`✅ Completed: ${results.filter((r) => !r.error).length}/30`);
132
+ console.log(`📈 Memory used: ${((endMem.heapUsed - startMem.heapUsed) / 1024 / 1024).toFixed(2)}MB`);
133
+ console.log(`🔄 Pool stats:`, sandbox.stats().pool);
134
+ // Suggest GC
135
+ suggestGC();
136
+ await sandbox.destroy();
137
+ stopWatcher();
138
+ }
139
+ /**
140
+ * Example 5: Comparison - Old vs New
141
+ */
142
+ export async function example5_ComparisonOldVsNew() {
143
+ console.log("\n⚡ Example 5: Old vs Optimized (10 runs)");
144
+ const OLD_TIME = [];
145
+ const NEW_TIME = [];
146
+ // Simulate old approach (spawn new worker each time)
147
+ for (let run = 0; run < 3; run++) {
148
+ const startTime = Date.now();
149
+ const promises = [];
150
+ for (let i = 0; i < 10; i++) {
151
+ promises.push(new Promise((resolve) => {
152
+ // Simulate old way - would be much slower
153
+ setTimeout(() => resolve(i * 2), 10); // Simulated spawn overhead
154
+ }));
155
+ }
156
+ await Promise.all(promises);
157
+ OLD_TIME.push(Date.now() - startTime);
158
+ }
159
+ // New optimized approach
160
+ const sandbox = createOptimizedSandbox({
161
+ cpuMs: 3000,
162
+ memoryMb: 64,
163
+ poolConfig: HIGH_CONCURRENCY_CONFIG,
164
+ cacheScripts: true
165
+ });
166
+ for (let run = 0; run < 3; run++) {
167
+ const startTime = Date.now();
168
+ const promises = [];
169
+ for (let i = 0; i < 10; i++) {
170
+ promises.push(sandbox.run(`${i} * 2`));
171
+ }
172
+ await Promise.all(promises);
173
+ NEW_TIME.push(Date.now() - startTime);
174
+ }
175
+ await sandbox.destroy();
176
+ console.log(`Old approach (simulated): ${OLD_TIME.map((t) => t + "ms").join(", ")}`);
177
+ console.log(`Optimized approach: ${NEW_TIME.map((t) => t + "ms").join(", ")}`);
178
+ console.log(`💡 Speedup: ~${((OLD_TIME[2] / NEW_TIME[2]) * 100).toFixed(0)}% faster`);
179
+ }
180
+ /**
181
+ * Example 6: Production setup with queue
182
+ */
183
+ export async function example6_ProductionQueue() {
184
+ console.log("\n🏭 Example 6: Production Queue with Rate Limiting");
185
+ const sandbox = createOptimizedSandbox({
186
+ cpuMs: 5000,
187
+ memoryMb: 128,
188
+ poolConfig: HIGH_CONCURRENCY_CONFIG
189
+ });
190
+ // Bounded queue prevents memory explosion
191
+ const queue = new BoundedQueue(500);
192
+ let processed = 0;
193
+ let rejected = 0;
194
+ // Simulate incoming requests
195
+ const incomingRate = 100; // 100 req/s
196
+ const processingTime = 10; // ms per req
197
+ const simulator = setInterval(async () => {
198
+ // Try to add 10 requests
199
+ for (let i = 0; i < 10; i++) {
200
+ const queued = queue.push({
201
+ resolve: () => { },
202
+ reject: () => { },
203
+ code: `Array(100).fill(0).reduce((a,b) => a+b, 0)`
204
+ });
205
+ if (!queued) {
206
+ rejected++;
207
+ }
208
+ }
209
+ }, 100);
210
+ // Process queue
211
+ while (processed < 100) {
212
+ const item = queue.shift();
213
+ if (item) {
214
+ try {
215
+ await sandbox.run(item.code);
216
+ processed++;
217
+ }
218
+ catch (err) {
219
+ if (item.reject) {
220
+ item.reject(err);
221
+ }
222
+ }
223
+ }
224
+ else {
225
+ await new Promise((r) => setTimeout(r, 10));
226
+ }
227
+ }
228
+ clearInterval(simulator);
229
+ console.log(`✅ Processed: ${processed}`);
230
+ console.log(`❌ Rejected: ${rejected}`);
231
+ console.log(`📊 Queue depth limit: 500`);
232
+ await sandbox.destroy();
233
+ }
234
+ /**
235
+ * Run all examples
236
+ */
237
+ export async function runAllExamples() {
238
+ try {
239
+ await example1_HighThroughput();
240
+ await example2_BatchExecution();
241
+ await example3_ScriptCaching();
242
+ await example4_MemoryOptimized();
243
+ await example5_ComparisonOldVsNew();
244
+ await example6_ProductionQueue();
245
+ console.log("\n✅ All examples completed!");
246
+ }
247
+ catch (err) {
248
+ console.error("Error:", err);
249
+ }
250
+ }
251
+ // Run if executed directly
252
+ if (import.meta.url === `file://${process.argv[1]}`) {
253
+ runAllExamples();
254
+ }
255
+ //# sourceMappingURL=optimization-examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimization-examples.js","sourceRoot":"","sources":["../src/optimization-examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * nodebox/optimized - Optimized sandbox with pooling and caching
3
+ * @module nodebox/optimized
4
+ */
5
+ export { createOptimizedSandbox } from './optimized-sandbox.js';
6
+ export type { OptimizedSandboxOptions } from './optimized-sandbox.js';
7
+ export { WorkerPool } from './worker-pool.js';
8
+ export type { PooledWorker, PoolConfig, PoolStats } from './worker-pool.js';
9
+ export { ScriptCache } from './script-cache.js';
10
+ export type { CachedScript, CacheStats } from './script-cache.js';
11
+ export { createLazyCapabilityProxy, compressStats, decompressStats, suggestGC, setupMemoryWatcher, BoundedQueue } from './memory-optimization.js';
12
+ //# sourceMappingURL=optimized-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimized-index.d.ts","sourceRoot":"","sources":["../src/optimized-index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,YAAY,EACb,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * nodebox/optimized - Optimized sandbox with pooling and caching
3
+ * @module nodebox/optimized
4
+ */
5
+ export { createOptimizedSandbox } from './optimized-sandbox.js';
6
+ export { WorkerPool } from './worker-pool.js';
7
+ export { ScriptCache } from './script-cache.js';
8
+ export { createLazyCapabilityProxy, compressStats, decompressStats, suggestGC, setupMemoryWatcher, BoundedQueue } from './memory-optimization.js';
9
+ //# sourceMappingURL=optimized-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimized-index.js","sourceRoot":"","sources":["../src/optimized-index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,YAAY,EACb,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Optimized sandbox for high throughput
3
+ * Features: worker pool, script cache, batch execution
4
+ */
5
+ import { PoolConfig } from "./worker-pool.js";
6
+ import { CapabilityGrant } from "./capabilities.js";
7
+ import { ExecutionStats } from "./stats.js";
8
+ export interface OptimizedSandboxOptions {
9
+ cpuMs: number;
10
+ memoryMb: number;
11
+ capabilities?: Partial<CapabilityGrant>;
12
+ seed?: number;
13
+ poolConfig?: Partial<PoolConfig>;
14
+ cacheScripts?: boolean;
15
+ enableStrictFreezing?: boolean;
16
+ }
17
+ export interface SandboxResult {
18
+ type: "result";
19
+ result: unknown;
20
+ stats: ExecutionStats;
21
+ }
22
+ export interface SandboxError {
23
+ type: "error";
24
+ error: string;
25
+ }
26
+ export type SandboxMessage = SandboxResult | SandboxError;
27
+ /**
28
+ * Optimized sandbox with pooling and caching
29
+ */
30
+ export declare class OptimizedSandbox {
31
+ private pool;
32
+ private scriptCache;
33
+ private options;
34
+ private intrinsicsFrozen;
35
+ constructor(options: OptimizedSandboxOptions);
36
+ /**
37
+ * Run code in sandbox
38
+ */
39
+ run(code: string): Promise<SandboxMessage>;
40
+ /**
41
+ * Batch execute multiple operations
42
+ */
43
+ batch(operations: Array<{
44
+ code: string;
45
+ id?: string;
46
+ }>, options?: {
47
+ concurrency?: number;
48
+ stopOnError?: boolean;
49
+ }): Promise<{
50
+ id?: string;
51
+ result?: unknown;
52
+ error?: string;
53
+ stats?: ExecutionStats;
54
+ }[]>;
55
+ /**
56
+ * Get current stats
57
+ */
58
+ stats(): {
59
+ pool: import("./worker-pool.js").PoolStats;
60
+ cache: {
61
+ size: number;
62
+ maxSize: number;
63
+ totalUses: number;
64
+ totalHits: number;
65
+ hitRate: number;
66
+ };
67
+ };
68
+ /**
69
+ * Clean up
70
+ */
71
+ destroy(): Promise<void>;
72
+ }
73
+ /**
74
+ * Create optimized sandbox
75
+ */
76
+ export declare function createOptimizedSandbox(options: OptimizedSandboxOptions): OptimizedSandbox;
77
+ //# sourceMappingURL=optimized-sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimized-sandbox.d.ts","sourceRoot":"","sources":["../src/optimized-sandbox.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAmC,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,eAAe,EAAwB,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAE1D;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,gBAAgB,CAAS;gBAErB,OAAO,EAAE,uBAAuB;IAoB5C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA+D1C;;OAEG;IACG,KAAK,CACT,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAChD,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;aAIlD,MAAM;iBACF,OAAO;gBACR,MAAM;gBACN,cAAc;;IAwC1B;;OAEG;IACH,KAAK;;;;;;;;;;IAOL;;OAEG;IACG,OAAO;CAId;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,oBAEtE"}