@secure-exec/wasmvm 0.2.0-rc.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 (70) hide show
  1. package/LICENSE +191 -0
  2. package/dist/browser-driver.d.ts +68 -0
  3. package/dist/browser-driver.d.ts.map +1 -0
  4. package/dist/browser-driver.js +293 -0
  5. package/dist/browser-driver.js.map +1 -0
  6. package/dist/driver.d.ts +43 -0
  7. package/dist/driver.d.ts.map +1 -0
  8. package/dist/driver.js +1420 -0
  9. package/dist/driver.js.map +1 -0
  10. package/dist/fd-table.d.ts +67 -0
  11. package/dist/fd-table.d.ts.map +1 -0
  12. package/dist/fd-table.js +171 -0
  13. package/dist/fd-table.js.map +1 -0
  14. package/dist/index.d.ts +26 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +19 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/kernel-worker.d.ts +14 -0
  19. package/dist/kernel-worker.d.ts.map +1 -0
  20. package/dist/kernel-worker.js +1205 -0
  21. package/dist/kernel-worker.js.map +1 -0
  22. package/dist/module-cache.d.ts +21 -0
  23. package/dist/module-cache.d.ts.map +1 -0
  24. package/dist/module-cache.js +51 -0
  25. package/dist/module-cache.js.map +1 -0
  26. package/dist/permission-check.d.ts +36 -0
  27. package/dist/permission-check.d.ts.map +1 -0
  28. package/dist/permission-check.js +84 -0
  29. package/dist/permission-check.js.map +1 -0
  30. package/dist/ring-buffer.d.ts +64 -0
  31. package/dist/ring-buffer.d.ts.map +1 -0
  32. package/dist/ring-buffer.js +160 -0
  33. package/dist/ring-buffer.js.map +1 -0
  34. package/dist/syscall-rpc.d.ts +95 -0
  35. package/dist/syscall-rpc.d.ts.map +1 -0
  36. package/dist/syscall-rpc.js +48 -0
  37. package/dist/syscall-rpc.js.map +1 -0
  38. package/dist/user.d.ts +58 -0
  39. package/dist/user.d.ts.map +1 -0
  40. package/dist/user.js +143 -0
  41. package/dist/user.js.map +1 -0
  42. package/dist/wasi-constants.d.ts +77 -0
  43. package/dist/wasi-constants.d.ts.map +1 -0
  44. package/dist/wasi-constants.js +122 -0
  45. package/dist/wasi-constants.js.map +1 -0
  46. package/dist/wasi-file-io.d.ts +50 -0
  47. package/dist/wasi-file-io.d.ts.map +1 -0
  48. package/dist/wasi-file-io.js +10 -0
  49. package/dist/wasi-file-io.js.map +1 -0
  50. package/dist/wasi-polyfill.d.ts +368 -0
  51. package/dist/wasi-polyfill.d.ts.map +1 -0
  52. package/dist/wasi-polyfill.js +1438 -0
  53. package/dist/wasi-polyfill.js.map +1 -0
  54. package/dist/wasi-process-io.d.ts +35 -0
  55. package/dist/wasi-process-io.d.ts.map +1 -0
  56. package/dist/wasi-process-io.js +11 -0
  57. package/dist/wasi-process-io.js.map +1 -0
  58. package/dist/wasi-types.d.ts +175 -0
  59. package/dist/wasi-types.d.ts.map +1 -0
  60. package/dist/wasi-types.js +68 -0
  61. package/dist/wasi-types.js.map +1 -0
  62. package/dist/wasm-magic.d.ts +12 -0
  63. package/dist/wasm-magic.d.ts.map +1 -0
  64. package/dist/wasm-magic.js +53 -0
  65. package/dist/wasm-magic.js.map +1 -0
  66. package/dist/worker-adapter.d.ts +32 -0
  67. package/dist/worker-adapter.d.ts.map +1 -0
  68. package/dist/worker-adapter.js +147 -0
  69. package/dist/worker-adapter.js.map +1 -0
  70. package/package.json +35 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Worker adapter layer for browser and Node.js.
3
+ *
4
+ * Provides a unified Worker abstraction that works in both browser
5
+ * (Web Workers) and Node.js (worker_threads), normalizing the API
6
+ * for spawn, messaging, and termination.
7
+ */
8
+ // Environment detection
9
+ const isBrowser = typeof globalThis.window !== 'undefined'
10
+ && typeof globalThis.document !== 'undefined';
11
+ /**
12
+ * Wraps a Node.js worker_threads.Worker with a browser-like interface.
13
+ */
14
+ class NodeWorkerHandle {
15
+ _worker;
16
+ _messageHandlers = [];
17
+ _errorHandlers = [];
18
+ _exitHandlers = [];
19
+ constructor(worker) {
20
+ this._worker = worker;
21
+ this._worker.on('message', (data) => {
22
+ for (const handler of this._messageHandlers) {
23
+ handler(data);
24
+ }
25
+ });
26
+ this._worker.on('error', (err) => {
27
+ for (const handler of this._errorHandlers) {
28
+ handler(err);
29
+ }
30
+ });
31
+ this._worker.on('exit', (code) => {
32
+ for (const handler of this._exitHandlers) {
33
+ handler(code);
34
+ }
35
+ });
36
+ }
37
+ postMessage(data, transferList) {
38
+ this._worker.postMessage(data, transferList);
39
+ }
40
+ onMessage(handler) {
41
+ this._messageHandlers.push(handler);
42
+ }
43
+ onError(handler) {
44
+ this._errorHandlers.push(handler);
45
+ }
46
+ onExit(handler) {
47
+ this._exitHandlers.push(handler);
48
+ }
49
+ terminate() {
50
+ return this._worker.terminate();
51
+ }
52
+ get threadId() {
53
+ return this._worker.threadId;
54
+ }
55
+ }
56
+ /**
57
+ * Wraps a browser Web Worker with the same interface as NodeWorkerHandle.
58
+ */
59
+ class BrowserWorkerHandle {
60
+ _worker;
61
+ _messageHandlers = [];
62
+ _errorHandlers = [];
63
+ constructor(worker) {
64
+ this._worker = worker;
65
+ this._worker.onmessage = (event) => {
66
+ for (const handler of this._messageHandlers) {
67
+ handler(event.data);
68
+ }
69
+ };
70
+ this._worker.onerror = (event) => {
71
+ const err = new Error(event.message || 'Worker error');
72
+ for (const handler of this._errorHandlers) {
73
+ handler(err);
74
+ }
75
+ };
76
+ }
77
+ postMessage(data, transferList) {
78
+ if (transferList) {
79
+ this._worker.postMessage(data, transferList);
80
+ }
81
+ else {
82
+ this._worker.postMessage(data);
83
+ }
84
+ }
85
+ onMessage(handler) {
86
+ this._messageHandlers.push(handler);
87
+ }
88
+ onError(handler) {
89
+ this._errorHandlers.push(handler);
90
+ }
91
+ onExit(_handler) {
92
+ // Web Workers don't have an exit event equivalent.
93
+ // Termination is fire-and-forget.
94
+ }
95
+ terminate() {
96
+ this._worker.terminate();
97
+ }
98
+ }
99
+ /**
100
+ * Unified Worker abstraction for browser and Node.js.
101
+ */
102
+ export class WorkerAdapter {
103
+ _environment;
104
+ constructor() {
105
+ this._environment = isBrowser ? 'browser' : 'node';
106
+ }
107
+ get environment() {
108
+ return this._environment;
109
+ }
110
+ async spawn(script, options = {}) {
111
+ if (this._environment === 'node') {
112
+ return this._spawnNode(script, options);
113
+ }
114
+ else {
115
+ return this._spawnBrowser(script, options);
116
+ }
117
+ }
118
+ async _spawnNode(script, options) {
119
+ const { Worker } = await import('node:worker_threads');
120
+ // If the script is a .ts file, pass --import tsx so the worker can load TypeScript
121
+ const scriptStr = typeof script === 'string' ? script : script.href;
122
+ const execArgv = scriptStr.endsWith('.ts') ? ['--import', 'tsx'] : [];
123
+ const worker = new Worker(script, {
124
+ workerData: options.workerData,
125
+ transferList: options.transferList,
126
+ execArgv,
127
+ });
128
+ return new NodeWorkerHandle(worker);
129
+ }
130
+ async _spawnBrowser(script, options) {
131
+ const worker = new globalThis.Worker(script, { type: 'module' });
132
+ const handle = new BrowserWorkerHandle(worker);
133
+ // In browser, pass workerData as an initial message since
134
+ // Web Workers don't have a workerData constructor option.
135
+ if (options.workerData !== undefined) {
136
+ handle.postMessage({
137
+ type: '__workerData',
138
+ data: options.workerData,
139
+ }, options.transferList);
140
+ }
141
+ return handle;
142
+ }
143
+ static isSharedArrayBufferAvailable() {
144
+ return typeof SharedArrayBuffer !== 'undefined';
145
+ }
146
+ }
147
+ //# sourceMappingURL=worker-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-adapter.js","sourceRoot":"","sources":["../src/worker-adapter.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@secure-exec/wasmvm",
3
+ "version": "0.2.0-rc.1",
4
+ "description": "WasmVM runtime driver — BusyBox-style WASM binary with Unix userland",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "README.md"
11
+ ],
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js",
16
+ "default": "./dist/index.js"
17
+ }
18
+ },
19
+ "license": "Apache-2.0",
20
+ "dependencies": {
21
+ "@secure-exec/core": "0.2.0-rc.1"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^22.10.2",
25
+ "@xterm/headless": "^6.0.0",
26
+ "minimatch": "^10.2.4",
27
+ "typescript": "^5.7.2",
28
+ "vitest": "^2.1.8"
29
+ },
30
+ "scripts": {
31
+ "check-types": "tsc --noEmit",
32
+ "build": "tsc",
33
+ "test": "vitest run"
34
+ }
35
+ }