@scelar/nodepod 1.0.4 → 1.0.6

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 (42) hide show
  1. package/dist/{child_process-53fMkug_.js → child_process-4ZrgCVFu.js} +8234 -8233
  2. package/dist/{child_process-53fMkug_.js.map → child_process-4ZrgCVFu.js.map} +1 -1
  3. package/dist/{child_process-lxSKECHq.cjs → child_process-Cao4lyrb.cjs} +7435 -7434
  4. package/dist/{child_process-lxSKECHq.cjs.map → child_process-Cao4lyrb.cjs.map} +1 -1
  5. package/dist/{index-C-TQIrdG.cjs → index-DuYo2yDs.cjs} +38842 -38005
  6. package/dist/index-DuYo2yDs.cjs.map +1 -0
  7. package/dist/{index-B8lyh_ti.js → index-HkVqijtm.js} +36923 -36065
  8. package/dist/index-HkVqijtm.js.map +1 -0
  9. package/dist/index.cjs +67 -65
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.mjs +61 -59
  13. package/dist/memory-handler.d.ts +57 -0
  14. package/dist/memory-volume.d.ts +12 -2
  15. package/dist/packages/installer.d.ts +3 -0
  16. package/dist/persistence/idb-cache.d.ts +7 -0
  17. package/dist/polyfills/readline.d.ts +108 -87
  18. package/dist/script-engine.d.ts +3 -0
  19. package/dist/sdk/nodepod-process.d.ts +2 -1
  20. package/dist/sdk/nodepod.d.ts +20 -1
  21. package/dist/sdk/types.d.ts +5 -0
  22. package/package.json +1 -1
  23. package/src/index.ts +2 -0
  24. package/src/memory-handler.ts +168 -0
  25. package/src/memory-volume.ts +72 -8
  26. package/src/packages/installer.ts +49 -1
  27. package/src/packages/version-resolver.ts +421 -421
  28. package/src/persistence/idb-cache.ts +107 -0
  29. package/src/polyfills/child_process.ts +3 -0
  30. package/src/polyfills/events.ts +22 -4
  31. package/src/polyfills/readline.ts +593 -71
  32. package/src/polyfills/stream.ts +46 -0
  33. package/src/polyfills/wasi.ts +1306 -1306
  34. package/src/polyfills/zlib.ts +881 -881
  35. package/src/script-engine.ts +3722 -3694
  36. package/src/sdk/nodepod-process.ts +94 -86
  37. package/src/sdk/nodepod.ts +52 -6
  38. package/src/sdk/types.ts +82 -77
  39. package/src/threading/process-manager.ts +11 -0
  40. package/src/threading/worker-protocol.ts +358 -358
  41. package/dist/index-B8lyh_ti.js.map +0 -1
  42. package/dist/index-C-TQIrdG.cjs.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,65 +1,67 @@
1
- 'use strict';
2
-
3
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
-
5
- const index = require('./index-C-TQIrdG.cjs');
6
-
7
-
8
-
9
- exports.DependencyInstaller = index.DependencyInstaller;
10
- exports.IframeSandbox = index.IframeSandbox;
11
- exports.MemoryVolume = index.MemoryVolume;
12
- exports.Nodepod = index.Nodepod;
13
- exports.NodepodFS = index.NodepodFS;
14
- exports.NodepodProcess = index.NodepodProcess;
15
- exports.NodepodTerminal = index.NodepodTerminal;
16
- exports.ProcessHandle = index.ProcessHandle;
17
- exports.ProcessManager = index.ProcessManager;
18
- exports.ProcessWorkerAdapter = index.ProcessWorkerAdapter;
19
- exports.RequestProxy = index.RequestProxy;
20
- exports.SANDBOX_DEPLOYMENT_GUIDE = index.SANDBOX_DEPLOYMENT_GUIDE;
21
- exports.ScriptEngine = index.ScriptEngine;
22
- exports.SharedVFSController = index.SharedVFSController;
23
- exports.SharedVFSReader = index.SharedVFSReader;
24
- exports.SyncChannelController = index.SyncChannelController;
25
- exports.SyncChannelWorker = index.SyncChannelWorker;
26
- exports.VFSBridge = index.VFSBridge;
27
- exports.WorkerSandbox = index.WorkerSandbox;
28
- exports.WorkerVFS = index.WorkerVFS;
29
- exports.assert = index.assert;
30
- exports.buildFileSystemBridge = index.buildFileSystemBridge;
31
- exports.buildProcessEnv = index.buildProcessEnv;
32
- exports.chokidar = index.watcherPolyfill;
33
- exports.createProcessContext = index.createProcessContext;
34
- exports.createWorkspace = index.createWorkspace;
35
- exports.default = index.createWorkspace;
36
- exports.esbuild = index.esbuildPolyfill;
37
- exports.events = index.events;
38
- exports.executeCode = index.executeCode;
39
- exports.fsevents = index.macEventsPolyfill;
40
- exports.generateSandboxDeployment = index.generateSandboxDeployment;
41
- exports.getActiveContext = index.getActiveContext;
42
- exports.getProxyInstance = index.getProxyInstance;
43
- exports.getSandboxHostingConfig = index.getSandboxHostingConfig;
44
- exports.getSandboxPageHtml = index.getSandboxPageHtml;
45
- exports.http = index.httpPolyfill;
46
- exports.install = index.install;
47
- exports.isSharedArrayBufferAvailable = index.isSharedArrayBufferAvailable;
48
- exports.module = index.module;
49
- exports.net = index.tcpPolyfill;
50
- exports.npm = index.installer;
51
- exports.path = index.pathPolyfill;
52
- exports.perf_hooks = index.perfPolyfill;
53
- exports.querystring = index.qsPolyfill;
54
- exports.readdirp = index.scannerPolyfill;
55
- exports.resetProxy = index.resetProxy;
56
- exports.rollup = index.rollupPolyfill;
57
- exports.setActiveContext = index.setActiveContext;
58
- exports.spawnEngine = index.spawnEngine;
59
- exports.spawnProcessWorkerEngine = index.spawnProcessWorkerEngine;
60
- exports.stream = index.stream;
61
- exports.url = index.urlPolyfill;
62
- exports.util = index.helpersPolyfill;
63
- exports.worker_threads = index.threadPoolPolyfill;
64
- exports.ws = index.wsPolyfill;
65
- //# sourceMappingURL=index.cjs.map
1
+ 'use strict';
2
+
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
+
5
+ const index = require('./index-DuYo2yDs.cjs');
6
+
7
+
8
+
9
+ exports.DependencyInstaller = index.DependencyInstaller;
10
+ exports.IframeSandbox = index.IframeSandbox;
11
+ exports.LRUCache = index.LRUCache;
12
+ exports.MemoryHandler = index.MemoryHandler;
13
+ exports.MemoryVolume = index.MemoryVolume;
14
+ exports.Nodepod = index.Nodepod;
15
+ exports.NodepodFS = index.NodepodFS;
16
+ exports.NodepodProcess = index.NodepodProcess;
17
+ exports.NodepodTerminal = index.NodepodTerminal;
18
+ exports.ProcessHandle = index.ProcessHandle;
19
+ exports.ProcessManager = index.ProcessManager;
20
+ exports.ProcessWorkerAdapter = index.ProcessWorkerAdapter;
21
+ exports.RequestProxy = index.RequestProxy;
22
+ exports.SANDBOX_DEPLOYMENT_GUIDE = index.SANDBOX_DEPLOYMENT_GUIDE;
23
+ exports.ScriptEngine = index.ScriptEngine;
24
+ exports.SharedVFSController = index.SharedVFSController;
25
+ exports.SharedVFSReader = index.SharedVFSReader;
26
+ exports.SyncChannelController = index.SyncChannelController;
27
+ exports.SyncChannelWorker = index.SyncChannelWorker;
28
+ exports.VFSBridge = index.VFSBridge;
29
+ exports.WorkerSandbox = index.WorkerSandbox;
30
+ exports.WorkerVFS = index.WorkerVFS;
31
+ exports.assert = index.assert;
32
+ exports.buildFileSystemBridge = index.buildFileSystemBridge;
33
+ exports.buildProcessEnv = index.buildProcessEnv;
34
+ exports.chokidar = index.watcherPolyfill;
35
+ exports.createProcessContext = index.createProcessContext;
36
+ exports.createWorkspace = index.createWorkspace;
37
+ exports.default = index.createWorkspace;
38
+ exports.esbuild = index.esbuildPolyfill;
39
+ exports.events = index.events;
40
+ exports.executeCode = index.executeCode;
41
+ exports.fsevents = index.macEventsPolyfill;
42
+ exports.generateSandboxDeployment = index.generateSandboxDeployment;
43
+ exports.getActiveContext = index.getActiveContext;
44
+ exports.getProxyInstance = index.getProxyInstance;
45
+ exports.getSandboxHostingConfig = index.getSandboxHostingConfig;
46
+ exports.getSandboxPageHtml = index.getSandboxPageHtml;
47
+ exports.http = index.httpPolyfill;
48
+ exports.install = index.install;
49
+ exports.isSharedArrayBufferAvailable = index.isSharedArrayBufferAvailable;
50
+ exports.module = index.module;
51
+ exports.net = index.tcpPolyfill;
52
+ exports.npm = index.installer;
53
+ exports.path = index.pathPolyfill;
54
+ exports.perf_hooks = index.perfPolyfill;
55
+ exports.querystring = index.qsPolyfill;
56
+ exports.readdirp = index.scannerPolyfill;
57
+ exports.resetProxy = index.resetProxy;
58
+ exports.rollup = index.rollupPolyfill;
59
+ exports.setActiveContext = index.setActiveContext;
60
+ exports.spawnEngine = index.spawnEngine;
61
+ exports.spawnProcessWorkerEngine = index.spawnProcessWorkerEngine;
62
+ exports.stream = index.stream;
63
+ exports.url = index.urlPolyfill;
64
+ exports.util = index.helpersPolyfill;
65
+ exports.worker_threads = index.threadPoolPolyfill;
66
+ exports.ws = index.wsPolyfill;
67
+ //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -74,6 +74,8 @@ export { NodepodTerminal } from "./sdk/nodepod-terminal";
74
74
  export { NodepodProcess } from "./sdk/nodepod-process";
75
75
  export { NodepodFS } from "./sdk/nodepod-fs";
76
76
  export type { NodepodOptions, TerminalOptions, TerminalTheme, StatResult, Snapshot, SpawnOptions, } from "./sdk/types";
77
+ export { MemoryHandler, LRUCache } from "./memory-handler";
78
+ export type { MemoryHandlerOptions } from "./memory-handler";
77
79
  export { ProcessManager } from "./threading/process-manager";
78
80
  export { ProcessHandle } from "./threading/process-handle";
79
81
  export type { ProcessState } from "./threading/process-handle";
package/dist/index.mjs CHANGED
@@ -1,59 +1,61 @@
1
- import { p, I, q, s, t, v, w, P, x, y, z, A, S, C, F, G, H, J, K, O, Q, U, X, Z, _, $, $ as $2, a0, a1, a2, a3, a4, l, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar } from "./index-B8lyh_ti.js";
2
- export {
3
- p as DependencyInstaller,
4
- I as IframeSandbox,
5
- q as MemoryVolume,
6
- s as Nodepod,
7
- t as NodepodFS,
8
- v as NodepodProcess,
9
- w as NodepodTerminal,
10
- P as ProcessHandle,
11
- x as ProcessManager,
12
- y as ProcessWorkerAdapter,
13
- z as RequestProxy,
14
- A as SANDBOX_DEPLOYMENT_GUIDE,
15
- S as ScriptEngine,
16
- C as SharedVFSController,
17
- F as SharedVFSReader,
18
- G as SyncChannelController,
19
- H as SyncChannelWorker,
20
- J as VFSBridge,
21
- K as WorkerSandbox,
22
- O as WorkerVFS,
23
- Q as assert,
24
- U as buildFileSystemBridge,
25
- X as buildProcessEnv,
26
- Z as chokidar,
27
- _ as createProcessContext,
28
- $ as createWorkspace,
29
- $2 as default,
30
- a0 as esbuild,
31
- a1 as events,
32
- a2 as executeCode,
33
- a3 as fsevents,
34
- a4 as generateSandboxDeployment,
35
- l as getActiveContext,
36
- a5 as getProxyInstance,
37
- a6 as getSandboxHostingConfig,
38
- a7 as getSandboxPageHtml,
39
- a8 as http,
40
- a9 as install,
41
- aa as isSharedArrayBufferAvailable,
42
- ab as module,
43
- ac as net,
44
- ad as npm,
45
- ae as path,
46
- af as perf_hooks,
47
- ag as querystring,
48
- ah as readdirp,
49
- ai as resetProxy,
50
- aj as rollup,
51
- ak as setActiveContext,
52
- al as spawnEngine,
53
- am as spawnProcessWorkerEngine,
54
- an as stream,
55
- ao as url,
56
- ap as util,
57
- aq as worker_threads,
58
- ar as ws
59
- };
1
+ import { p, I, q, s, t, v, w, x, y, P, z, A, C, F, S, G, H, J, K, O, Q, U, X, Z, _, $, a0, a1, a1 as a12, a2, a3, a4, a5, a6, l, a7, a8, a9, aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, aq, ar, as, at } from "./index-HkVqijtm.js";
2
+ export {
3
+ p as DependencyInstaller,
4
+ I as IframeSandbox,
5
+ q as LRUCache,
6
+ s as MemoryHandler,
7
+ t as MemoryVolume,
8
+ v as Nodepod,
9
+ w as NodepodFS,
10
+ x as NodepodProcess,
11
+ y as NodepodTerminal,
12
+ P as ProcessHandle,
13
+ z as ProcessManager,
14
+ A as ProcessWorkerAdapter,
15
+ C as RequestProxy,
16
+ F as SANDBOX_DEPLOYMENT_GUIDE,
17
+ S as ScriptEngine,
18
+ G as SharedVFSController,
19
+ H as SharedVFSReader,
20
+ J as SyncChannelController,
21
+ K as SyncChannelWorker,
22
+ O as VFSBridge,
23
+ Q as WorkerSandbox,
24
+ U as WorkerVFS,
25
+ X as assert,
26
+ Z as buildFileSystemBridge,
27
+ _ as buildProcessEnv,
28
+ $ as chokidar,
29
+ a0 as createProcessContext,
30
+ a1 as createWorkspace,
31
+ a12 as default,
32
+ a2 as esbuild,
33
+ a3 as events,
34
+ a4 as executeCode,
35
+ a5 as fsevents,
36
+ a6 as generateSandboxDeployment,
37
+ l as getActiveContext,
38
+ a7 as getProxyInstance,
39
+ a8 as getSandboxHostingConfig,
40
+ a9 as getSandboxPageHtml,
41
+ aa as http,
42
+ ab as install,
43
+ ac as isSharedArrayBufferAvailable,
44
+ ad as module,
45
+ ae as net,
46
+ af as npm,
47
+ ag as path,
48
+ ah as perf_hooks,
49
+ ai as querystring,
50
+ aj as readdirp,
51
+ ak as resetProxy,
52
+ al as rollup,
53
+ am as setActiveContext,
54
+ an as spawnEngine,
55
+ ao as spawnProcessWorkerEngine,
56
+ ap as stream,
57
+ aq as url,
58
+ ar as util,
59
+ as as worker_threads,
60
+ at as ws
61
+ };
@@ -0,0 +1,57 @@
1
+ import type { FileStat } from './memory-volume';
2
+ export declare class LRUCache<K, V> {
3
+ private _map;
4
+ private _capacity;
5
+ constructor(capacity: number);
6
+ get(key: K): V | undefined;
7
+ set(key: K, value: V): void;
8
+ has(key: K): boolean;
9
+ delete(key: K): boolean;
10
+ clear(): void;
11
+ get size(): number;
12
+ keys(): IterableIterator<K>;
13
+ values(): IterableIterator<V>;
14
+ }
15
+ export interface MemoryHandlerOptions {
16
+ /** LRU capacity for path normalization cache. Default: 2048 */
17
+ pathNormCacheSize?: number;
18
+ /** LRU capacity for stat result cache. Default: 512 */
19
+ statCacheSize?: number;
20
+ /** LRU capacity for module resolve cache. Default: 4096 */
21
+ resolveCacheSize?: number;
22
+ /** LRU capacity for package.json manifest cache. Default: 256 */
23
+ manifestCacheSize?: number;
24
+ /** LRU capacity for source transform cache. Default: 512 */
25
+ transformCacheSize?: number;
26
+ /** Max modules before trimming node_modules entries. Default: 512 */
27
+ moduleSoftCacheSize?: number;
28
+ /** Heap usage threshold in MB to trigger pressure callbacks. Default: 350 */
29
+ heapWarnThresholdMB?: number;
30
+ /** Monitoring poll interval in ms. Default: 30000 */
31
+ monitorIntervalMs?: number;
32
+ /** Max process stdout/stderr accumulation in bytes. Default: 4194304 (4MB) */
33
+ maxProcessOutputBytes?: number;
34
+ }
35
+ export declare class MemoryHandler {
36
+ readonly options: Required<MemoryHandlerOptions>;
37
+ readonly pathNormCache: LRUCache<string, string>;
38
+ readonly statCache: LRUCache<string, FileStat>;
39
+ readonly transformCache: LRUCache<string, string>;
40
+ private _monitorTimer;
41
+ private _pressureCallbacks;
42
+ private _destroyed;
43
+ constructor(opts?: MemoryHandlerOptions);
44
+ /** Invalidate a cached stat entry (call on file write/delete). */
45
+ invalidateStat(normalizedPath: string): void;
46
+ /** Register a callback to be invoked when heap pressure is detected. Returns unsubscribe fn. */
47
+ onPressure(cb: () => void): () => void;
48
+ /** Start periodic heap monitoring. */
49
+ startMonitoring(): void;
50
+ /** Stop monitoring. */
51
+ stopMonitoring(): void;
52
+ /** Clear all owned caches. */
53
+ flush(): void;
54
+ /** Full cleanup — stop monitoring, flush caches. */
55
+ destroy(): void;
56
+ private _checkHeap;
57
+ }
@@ -1,4 +1,5 @@
1
1
  import type { VolumeSnapshot } from './engine-types';
2
+ import type { MemoryHandler } from './memory-handler';
2
3
  export interface VolumeNode {
3
4
  kind: 'file' | 'directory' | 'symlink';
4
5
  content?: Uint8Array;
@@ -66,13 +67,22 @@ export declare class MemoryVolume {
66
67
  private textDecoder;
67
68
  private activeWatchers;
68
69
  private subscribers;
69
- constructor();
70
+ private _handler;
71
+ constructor(handler?: MemoryHandler | null);
70
72
  on(event: 'change', handler: FileChangeHandler): this;
71
73
  on(event: 'delete', handler: FileDeleteHandler): this;
72
74
  off(event: 'change', handler: FileChangeHandler): this;
73
75
  off(event: 'delete', handler: FileDeleteHandler): this;
74
76
  private broadcast;
75
- toSnapshot(excludePrefixes?: string[]): VolumeSnapshot;
77
+ getStats(): {
78
+ fileCount: number;
79
+ totalBytes: number;
80
+ dirCount: number;
81
+ watcherCount: number;
82
+ };
83
+ /** Clean up all watchers, subscribers, and global listeners. */
84
+ dispose(): void;
85
+ toSnapshot(excludePrefixes?: string[], excludeDirNames?: Set<string>): VolumeSnapshot;
76
86
  private collectEntries;
77
87
  static fromBinarySnapshot(snapshot: {
78
88
  manifest: Array<{
@@ -1,6 +1,7 @@
1
1
  import { MemoryVolume } from "../memory-volume";
2
2
  import { RegistryConfig } from "./registry-client";
3
3
  import { ResolvedDependency } from "./version-resolver";
4
+ import type { IDBSnapshotCache } from "../persistence/idb-cache";
4
5
  export interface InstallFlags {
5
6
  registry?: string;
6
7
  persist?: boolean;
@@ -22,8 +23,10 @@ export declare class DependencyInstaller {
22
23
  private vol;
23
24
  private registryClient;
24
25
  private workingDir;
26
+ private _snapshotCache;
25
27
  constructor(vol: MemoryVolume, opts?: {
26
28
  cwd?: string;
29
+ snapshotCache?: IDBSnapshotCache | null;
27
30
  } & RegistryConfig);
28
31
  install(packageName: string, version?: string, flags?: InstallFlags): Promise<InstallOutcome>;
29
32
  installFromManifest(manifestPath?: string, flags?: InstallFlags): Promise<InstallOutcome>;
@@ -0,0 +1,7 @@
1
+ import type { VolumeSnapshot } from '../engine-types';
2
+ export interface IDBSnapshotCache {
3
+ get(packageJsonHash: string): Promise<VolumeSnapshot | null>;
4
+ set(packageJsonHash: string, snapshot: VolumeSnapshot): Promise<void>;
5
+ close(): void;
6
+ }
7
+ export declare function openSnapshotCache(): Promise<IDBSnapshotCache | null>;
@@ -1,87 +1,108 @@
1
- import { EventEmitter } from "./events";
2
- export declare function getActiveInterfaceCount(): number;
3
- export declare function setActiveInterfaceCount(n: number): void;
4
- export declare function resetActiveInterfaceCount(): void;
5
- export interface InterfaceConfig {
6
- input?: unknown;
7
- output?: unknown;
8
- terminal?: boolean;
9
- prompt?: string;
10
- historySize?: number;
11
- completer?: (line: string) => [string[], string] | void;
12
- crlfDelay?: number;
13
- escapeCodeTimeout?: number;
14
- tabSize?: number;
15
- }
16
- export declare function emitKeypressEvents(stream: unknown, _iface?: Interface): void;
17
- export interface Interface extends EventEmitter {
18
- _promptStr: string;
19
- _input: unknown;
20
- _output: unknown;
21
- _closed: boolean;
22
- _lineBuffer: string;
23
- _pendingQuestions: Array<{
24
- query: string;
25
- handler: (answer: string) => void;
26
- }>;
27
- terminal: boolean;
28
- line: string;
29
- cursor: number;
30
- _refreshLine(): void;
31
- _onKeypress(char: string | undefined, key: any): void;
32
- _onData(text: string): void;
33
- prompt(preserveCursor?: boolean): void;
34
- setPrompt(text: string): void;
35
- getPrompt(): string;
36
- question(query: string, optsOrHandler?: unknown, handler?: (answer: string) => void): void;
37
- pause(): this;
38
- resume(): this;
39
- close(): void;
40
- write(data: string | null, _key?: {
41
- ctrl?: boolean;
42
- name?: string;
43
- meta?: boolean;
44
- shift?: boolean;
45
- sequence?: string;
46
- }): void;
47
- getCursorPos(): {
48
- rows: number;
49
- cols: number;
50
- };
51
- [Symbol.asyncIterator](): AsyncGenerator<string, void, undefined>;
52
- }
53
- interface InterfaceConstructor {
54
- new (cfg?: InterfaceConfig): Interface;
55
- (this: any, cfg?: InterfaceConfig): void;
56
- prototype: any;
57
- }
58
- export declare const Interface: InterfaceConstructor;
59
- export declare function createInterface(cfgOrInput?: InterfaceConfig | unknown, output?: unknown): Interface;
60
- export declare function clearLine(stream: unknown, dir: number, done?: () => void): boolean;
61
- export declare function clearScreenDown(stream: unknown, done?: () => void): boolean;
62
- export declare function cursorTo(stream: unknown, x: number, yOrDone?: number | (() => void), done?: () => void): boolean;
63
- export declare function moveCursor(stream: unknown, dx: number, dy: number, done?: () => void): boolean;
64
- export declare const promises: {
65
- createInterface(cfg?: InterfaceConfig): {
66
- question(query: string): Promise<string>;
67
- close(): void;
68
- [Symbol.asyncIterator](): AsyncGenerator<string, void, undefined>;
69
- };
70
- };
71
- declare const _default: {
72
- Interface: InterfaceConstructor;
73
- createInterface: typeof createInterface;
74
- clearLine: typeof clearLine;
75
- clearScreenDown: typeof clearScreenDown;
76
- cursorTo: typeof cursorTo;
77
- moveCursor: typeof moveCursor;
78
- emitKeypressEvents: typeof emitKeypressEvents;
79
- promises: {
80
- createInterface(cfg?: InterfaceConfig): {
81
- question(query: string): Promise<string>;
82
- close(): void;
83
- [Symbol.asyncIterator](): AsyncGenerator<string, void, undefined>;
84
- };
85
- };
86
- };
87
- export default _default;
1
+ import { EventEmitter } from "./events";
2
+ export declare function getActiveInterfaceCount(): number;
3
+ export declare function setActiveInterfaceCount(n: number): void;
4
+ export declare function resetActiveInterfaceCount(): void;
5
+ export interface InterfaceConfig {
6
+ input?: unknown;
7
+ output?: unknown;
8
+ terminal?: boolean;
9
+ prompt?: string;
10
+ historySize?: number;
11
+ history?: string[];
12
+ removeHistoryDuplicates?: boolean;
13
+ completer?: (line: string) => [string[], string] | void;
14
+ crlfDelay?: number;
15
+ escapeCodeTimeout?: number;
16
+ tabSize?: number;
17
+ signal?: AbortSignal;
18
+ }
19
+ export declare function emitKeypressEvents(stream: unknown, _iface?: Interface): void;
20
+ export interface Interface extends EventEmitter {
21
+ _promptStr: string;
22
+ input: unknown;
23
+ output: unknown;
24
+ closed: boolean;
25
+ _lineBuffer: string;
26
+ _pendingQuestions: Array<{
27
+ query: string;
28
+ handler: (answer: string) => void;
29
+ signal?: AbortSignal;
30
+ abortListener?: () => void;
31
+ }>;
32
+ terminal: boolean;
33
+ line: string;
34
+ cursor: number;
35
+ history: string[];
36
+ _historyIndex: number;
37
+ _historySize: number;
38
+ _removeHistoryDuplicates: boolean;
39
+ _savedLine: string;
40
+ _killRing: string[];
41
+ _refreshLine(): void;
42
+ _onKeypress(char: string | undefined, key: any): void;
43
+ _onData(text: string): void;
44
+ _addToHistory(line: string): void;
45
+ prompt(preserveCursor?: boolean): void;
46
+ setPrompt(text: string): void;
47
+ getPrompt(): string;
48
+ question(query: string, optsOrHandler?: unknown, handler?: (answer: string) => void): void;
49
+ pause(): this;
50
+ resume(): this;
51
+ close(): void;
52
+ write(data: string | null, _key?: {
53
+ ctrl?: boolean;
54
+ name?: string;
55
+ meta?: boolean;
56
+ shift?: boolean;
57
+ sequence?: string;
58
+ }): void;
59
+ clearLine(dir?: number): void;
60
+ getCursorPos(): {
61
+ rows: number;
62
+ cols: number;
63
+ };
64
+ [Symbol.asyncIterator](): AsyncGenerator<string, void, undefined>;
65
+ }
66
+ interface InterfaceConstructor {
67
+ new (cfg?: InterfaceConfig): Interface;
68
+ (this: any, cfg?: InterfaceConfig): void;
69
+ prototype: any;
70
+ }
71
+ export declare const Interface: InterfaceConstructor;
72
+ export declare function createInterface(cfgOrInput?: InterfaceConfig | unknown, output?: unknown): Interface;
73
+ export declare function clearLine(stream: unknown, dir: number, done?: () => void): boolean;
74
+ export declare function clearScreenDown(stream: unknown, done?: () => void): boolean;
75
+ export declare function cursorTo(stream: unknown, x: number, yOrDone?: number | (() => void), done?: () => void): boolean;
76
+ export declare function moveCursor(stream: unknown, dx: number, dy: number, done?: () => void): boolean;
77
+ declare class ReadlineWriter {
78
+ private _stream;
79
+ private _buffer;
80
+ private _autoCommit;
81
+ constructor(stream: any, opts?: {
82
+ autoCommit?: boolean;
83
+ });
84
+ clearLine(dir: -1 | 0 | 1): this;
85
+ clearScreenDown(): this;
86
+ cursorTo(x: number, y?: number): this;
87
+ moveCursor(dx: number, dy: number): this;
88
+ commit(): Promise<void>;
89
+ rollback(): this;
90
+ }
91
+ export declare const promises: {
92
+ createInterface(cfg?: InterfaceConfig): any;
93
+ Readline: typeof ReadlineWriter;
94
+ };
95
+ declare const _default: {
96
+ Interface: InterfaceConstructor;
97
+ createInterface: typeof createInterface;
98
+ clearLine: typeof clearLine;
99
+ clearScreenDown: typeof clearScreenDown;
100
+ cursorTo: typeof cursorTo;
101
+ moveCursor: typeof moveCursor;
102
+ emitKeypressEvents: typeof emitKeypressEvents;
103
+ promises: {
104
+ createInterface(cfg?: InterfaceConfig): any;
105
+ Readline: typeof ReadlineWriter;
106
+ };
107
+ };
108
+ export default _default;
@@ -23,6 +23,7 @@ export interface EngineOptions {
23
23
  workerData: unknown;
24
24
  threadId: number;
25
25
  };
26
+ handler?: import('./memory-handler').MemoryHandler;
26
27
  }
27
28
  export interface ResolverFn {
28
29
  (id: string): unknown;
@@ -67,6 +68,8 @@ export declare class ScriptEngine {
67
68
  }>;
68
69
  runFileAsync(filename: string): Promise<ExecutionOutcome>;
69
70
  clearCache(): void;
71
+ /** Evict one node_modules entry when module cache exceeds soft limit. */
72
+ private _trimModuleCache;
70
73
  getVolume(): MemoryVolume;
71
74
  getProcess(): ProcessObject;
72
75
  createREPL(): {
@@ -7,12 +7,13 @@ export declare class NodepodProcess extends EventEmitter {
7
7
  private _exitCode;
8
8
  private _sendStdinFn;
9
9
  private _killFn;
10
+ private _maxOutputBytes;
10
11
  readonly completion: Promise<{
11
12
  stdout: string;
12
13
  stderr: string;
13
14
  exitCode: number;
14
15
  }>;
15
- constructor();
16
+ constructor(maxOutputBytes?: number);
16
17
  _setSendStdin(fn: (data: string) => void): void;
17
18
  _setKillFn(fn: () => void): void;
18
19
  _pushStdout(chunk: string): void;