baraqex 1.0.18 → 1.0.20
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/README.md +0 -0
- package/dist/frontend/components/WasmLoader.d.ts +1 -0
- package/dist/frontend/components/WasmLoader.d.ts.map +1 -0
- package/dist/frontend/components/WasmLoader.js +2 -0
- package/dist/frontend/components/WasmLoader.js.map +1 -0
- package/dist/frontend/hooks/useWasm.d.ts +1 -0
- package/dist/frontend/hooks/useWasm.d.ts.map +1 -0
- package/dist/frontend/hooks/useWasm.js +2 -0
- package/dist/frontend/hooks/useWasm.js.map +1 -0
- package/dist/frontend/index.d.ts +1 -0
- package/dist/frontend/index.d.ts.map +1 -0
- package/dist/frontend/index.js +2 -0
- package/dist/frontend/index.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/server/wasm.d.ts +20 -1
- package/dist/server/wasm.d.ts.map +1 -1
- package/dist/server/wasm.js +145 -408
- package/dist/server/wasm.js.map +1 -1
- package/dist/wasm.d.ts +37 -4
- package/dist/wasm.d.ts.map +1 -1
- package/dist/wasm.js +92 -28
- package/dist/wasm.js.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=WasmLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WasmLoader.d.ts","sourceRoot":"","sources":["../../../src/frontend/components/WasmLoader.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WasmLoader.js","sourceRoot":"","sources":["../../../src/frontend/components/WasmLoader.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=useWasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWasm.d.ts","sourceRoot":"","sources":["../../../src/frontend/hooks/useWasm.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWasm.js","sourceRoot":"","sources":["../../../src/frontend/hooks/useWasm.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/frontend/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/frontend/index.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,5 +4,6 @@ export { safeJsonParse, generateToken, hashString, getPagination, sendSuccess, s
|
|
|
4
4
|
export type { ServerConfig, User, DbConfig, MiddlewareFunction } from './server/types.js';
|
|
5
5
|
export { renderToString as baraqexRenderToString, hydrate as baraqexHydrate } from './server-renderer.js';
|
|
6
6
|
export { requestLogger, errorHandler, notFoundHandler, rateLimit } from './server/middleware.js';
|
|
7
|
-
export {
|
|
7
|
+
export { loadGoWasm, callWasmFunction, isWasmReady, getWasmFunctions, useGoWasm } from './wasm.js';
|
|
8
|
+
export type { GoWasmOptions, GoWasmInstance } from './wasm.js';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAKjC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,YAAY,EACb,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG1F,OAAO,EAAE,cAAc,IAAI,qBAAqB,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG1G,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGjG,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAKjC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,YAAY,EACb,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG1F,OAAO,EAAE,cAAc,IAAI,qBAAqB,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG1G,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGjG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnG,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ export { safeJsonParse, generateToken, hashString, getPagination, sendSuccess, s
|
|
|
8
8
|
export { renderToString as baraqexRenderToString, hydrate as baraqexHydrate } from './server-renderer.js';
|
|
9
9
|
// Export middleware functions
|
|
10
10
|
export { requestLogger, errorHandler, notFoundHandler, rateLimit } from './server/middleware.js';
|
|
11
|
-
// Export WASM
|
|
12
|
-
export {
|
|
11
|
+
// Export WASM functionality (browser-only functions)
|
|
12
|
+
export { loadGoWasm, callWasmFunction, isWasmReady, getWasmFunctions, useGoWasm } from './wasm.js';
|
|
13
13
|
console.log('Baraqex - powered by Frontend Hamroun Framework with additional utilities');
|
|
14
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,cAAc,kBAAkB,CAAC;AAEjC,2CAA2C;AAE3C,gEAAgE;AAChE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,YAAY,EACb,MAAM,mBAAmB,CAAC;AAK3B,mCAAmC;AACnC,OAAO,EAAE,cAAc,IAAI,qBAAqB,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE1G,8BAA8B;AAC9B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEjG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,cAAc,kBAAkB,CAAC;AAEjC,2CAA2C;AAE3C,gEAAgE;AAChE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,YAAY,EACb,MAAM,mBAAmB,CAAC;AAK3B,mCAAmC;AACnC,OAAO,EAAE,cAAc,IAAI,qBAAqB,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE1G,8BAA8B;AAC9B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEjG,qDAAqD;AACrD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGnG,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC"}
|
package/dist/server/wasm.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GoWasmInstance, GoWasmOptions } from '../wasm';
|
|
1
|
+
import { GoWasmInstance, GoWasmOptions } from '../wasm.js';
|
|
2
2
|
/**
|
|
3
3
|
* Initialize the Node.js environment for running Go WASM modules
|
|
4
4
|
*/
|
|
@@ -7,4 +7,23 @@ export declare function initNodeWasm(): Promise<void>;
|
|
|
7
7
|
* Load a Go WASM module from a file path for server-side usage
|
|
8
8
|
*/
|
|
9
9
|
export declare function loadGoWasmFromFile(wasmFilePath: string, options?: GoWasmOptions): Promise<GoWasmInstance>;
|
|
10
|
+
/**
|
|
11
|
+
* Call a Go WASM function in Node.js environment
|
|
12
|
+
*/
|
|
13
|
+
export declare function callWasmFunction(funcName: string, ...args: any[]): any;
|
|
14
|
+
/**
|
|
15
|
+
* Check if Go WASM is ready in Node.js
|
|
16
|
+
*/
|
|
17
|
+
export declare function isWasmReady(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Get all available Go WASM functions in Node.js
|
|
20
|
+
*/
|
|
21
|
+
export declare function getWasmFunctions(): string[];
|
|
22
|
+
declare global {
|
|
23
|
+
var Go: new () => {
|
|
24
|
+
importObject: any;
|
|
25
|
+
run: (instance: WebAssembly.Instance) => void;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export type { GoWasmInstance, GoWasmOptions };
|
|
10
29
|
//# sourceMappingURL=wasm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../src/server/wasm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../src/server/wasm.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3D;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAclD;AAuED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,cAAc,CAAC,CA+GzB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAOtE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAKrC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAK3C;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,EAAE,EAAE,UAAU;QAChB,YAAY,EAAE,GAAG,CAAC;QAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,KAAK,IAAI,CAAC;KAC/C,CAAC;CACH;AAED,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/server/wasm.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Server-side Go WASM integration for Node.js
|
|
3
|
+
* Uses the standard Go WASM runtime (wasm_exec.js)
|
|
3
4
|
*/
|
|
4
5
|
import fs from 'fs/promises';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { pathToFileURL } from 'url';
|
|
5
8
|
// Global flag to ensure we only initialize WASM once
|
|
6
9
|
let initialized = false;
|
|
7
10
|
/**
|
|
@@ -11,7 +14,6 @@ export async function initNodeWasm() {
|
|
|
11
14
|
if (initialized)
|
|
12
15
|
return;
|
|
13
16
|
try {
|
|
14
|
-
// Check if node requires WASM flags
|
|
15
17
|
// Global WASM environment setup for Node.js
|
|
16
18
|
globalThis.TextEncoder = globalThis.TextEncoder || TextEncoder;
|
|
17
19
|
globalThis.TextDecoder = globalThis.TextDecoder || TextDecoder;
|
|
@@ -24,443 +26,154 @@ export async function initNodeWasm() {
|
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
|
-
* Load
|
|
29
|
+
* Load Go WASM runtime from wasm_exec.js file
|
|
28
30
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
'runtime.nanotime1': (sp) => {
|
|
58
|
-
const nsec = Date.now() * 1000000;
|
|
59
|
-
new DataView(this.mem.buffer).setBigInt64(sp + 8, BigInt(nsec), true);
|
|
60
|
-
},
|
|
61
|
-
'runtime.walltime': (sp) => {
|
|
62
|
-
const msec = Date.now();
|
|
63
|
-
const sec = Math.floor(msec / 1000);
|
|
64
|
-
const nsec = (msec % 1000) * 1000000;
|
|
65
|
-
new DataView(this.mem.buffer).setBigInt64(sp + 8, BigInt(sec), true);
|
|
66
|
-
new DataView(this.mem.buffer).setInt32(sp + 16, nsec, true);
|
|
67
|
-
},
|
|
68
|
-
'runtime.scheduleTimeoutEvent': (sp) => {
|
|
69
|
-
const id = this._nextCallbackTimeoutID++;
|
|
70
|
-
const delay = new DataView(this.mem.buffer).getBigInt64(sp + 8, true);
|
|
71
|
-
setTimeout(() => {
|
|
72
|
-
this._resume();
|
|
73
|
-
}, Number(delay));
|
|
74
|
-
new DataView(this.mem.buffer).setInt32(sp + 16, id, true);
|
|
75
|
-
},
|
|
76
|
-
'runtime.clearTimeoutEvent': (sp) => {
|
|
77
|
-
// Simplified implementation
|
|
78
|
-
},
|
|
79
|
-
'runtime.getRandomData': (sp) => {
|
|
80
|
-
const buf = new DataView(this.mem.buffer).getInt32(sp + 8, true);
|
|
81
|
-
const len = new DataView(this.mem.buffer).getInt32(sp + 16, true);
|
|
82
|
-
crypto.getRandomValues(new Uint8Array(this.mem.buffer, buf, len));
|
|
83
|
-
},
|
|
84
|
-
// JavaScript interop
|
|
85
|
-
'syscall/js.finalizeRef': () => { },
|
|
86
|
-
'syscall/js.stringVal': (sp) => {
|
|
87
|
-
const s = this._loadString(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
88
|
-
this._storeValue(sp + 16, s);
|
|
89
|
-
},
|
|
90
|
-
'syscall/js.valueGet': (sp) => {
|
|
91
|
-
try {
|
|
92
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
93
|
-
const p = this._loadString(new DataView(this.mem.buffer).getInt32(sp + 16, true));
|
|
94
|
-
// Ensure v is a valid object before using Reflect.get
|
|
95
|
-
if (v === null || v === undefined) {
|
|
96
|
-
console.warn(`[WASM] valueGet called on null/undefined object for property: ${p}`);
|
|
97
|
-
this._storeValue(sp + 24, undefined);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
if (typeof v !== 'object' && typeof v !== 'function') {
|
|
101
|
-
console.warn(`[WASM] valueGet called on non-object (${typeof v}) for property: ${p}`);
|
|
102
|
-
this._storeValue(sp + 24, undefined);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
const result = Reflect.get(v, p);
|
|
106
|
-
this._storeValue(sp + 24, result);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
console.warn(`[WASM] Error in valueGet:`, error);
|
|
110
|
-
this._storeValue(sp + 24, undefined);
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
'syscall/js.valueSet': (sp) => {
|
|
114
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
115
|
-
const p = this._loadString(new DataView(this.mem.buffer).getInt32(sp + 16, true));
|
|
116
|
-
const x = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 24, true));
|
|
117
|
-
Reflect.set(v, p, x);
|
|
118
|
-
},
|
|
119
|
-
'syscall/js.valueDelete': (sp) => {
|
|
120
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
121
|
-
const p = this._loadString(new DataView(this.mem.buffer).getInt32(sp + 16, true));
|
|
122
|
-
Reflect.deleteProperty(v, p);
|
|
123
|
-
},
|
|
124
|
-
'syscall/js.valueIndex': (sp) => {
|
|
125
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
126
|
-
const i = new DataView(this.mem.buffer).getInt32(sp + 16, true);
|
|
127
|
-
this._storeValue(sp + 20, Reflect.get(v, i));
|
|
128
|
-
},
|
|
129
|
-
'syscall/js.valueSetIndex': (sp) => {
|
|
130
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
131
|
-
const i = new DataView(this.mem.buffer).getInt32(sp + 16, true);
|
|
132
|
-
const x = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 20, true));
|
|
133
|
-
Reflect.set(v, i, x);
|
|
134
|
-
},
|
|
135
|
-
'syscall/js.valueCall': (sp) => {
|
|
136
|
-
try {
|
|
137
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
138
|
-
const m = this._loadString(new DataView(this.mem.buffer).getInt32(sp + 16, true));
|
|
139
|
-
const args = this._loadSliceOfValues(new DataView(this.mem.buffer).getInt32(sp + 24, true));
|
|
140
|
-
const result = Reflect.apply(v[m], v, args);
|
|
141
|
-
this._storeValue(sp + 40, result);
|
|
142
|
-
new DataView(this.mem.buffer).setUint8(sp + 48, 1);
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
this._storeValue(sp + 40, err);
|
|
146
|
-
new DataView(this.mem.buffer).setUint8(sp + 48, 0);
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
'syscall/js.valueInvoke': (sp) => {
|
|
150
|
-
try {
|
|
151
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
152
|
-
const args = this._loadSliceOfValues(new DataView(this.mem.buffer).getInt32(sp + 16, true));
|
|
153
|
-
const result = Reflect.apply(v, undefined, args);
|
|
154
|
-
this._storeValue(sp + 32, result);
|
|
155
|
-
new DataView(this.mem.buffer).setUint8(sp + 40, 1);
|
|
156
|
-
}
|
|
157
|
-
catch (err) {
|
|
158
|
-
this._storeValue(sp + 32, err);
|
|
159
|
-
new DataView(this.mem.buffer).setUint8(sp + 40, 0);
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
'syscall/js.valueNew': (sp) => {
|
|
163
|
-
try {
|
|
164
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
165
|
-
const args = this._loadSliceOfValues(new DataView(this.mem.buffer).getInt32(sp + 16, true));
|
|
166
|
-
const result = Reflect.construct(v, args);
|
|
167
|
-
this._storeValue(sp + 32, result);
|
|
168
|
-
new DataView(this.mem.buffer).setUint8(sp + 40, 1);
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
this._storeValue(sp + 32, err);
|
|
172
|
-
new DataView(this.mem.buffer).setUint8(sp + 40, 0);
|
|
173
|
-
}
|
|
174
|
-
},
|
|
175
|
-
'syscall/js.valueLength': (sp) => {
|
|
176
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
177
|
-
new DataView(this.mem.buffer).setInt32(sp + 16, parseInt(v.length), true);
|
|
178
|
-
},
|
|
179
|
-
'syscall/js.valuePrepareString': (sp) => {
|
|
180
|
-
const s = String(this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true)));
|
|
181
|
-
const str = new TextEncoder().encode(s);
|
|
182
|
-
this._storeValue(sp + 16, str);
|
|
183
|
-
new DataView(this.mem.buffer).setInt32(sp + 24, str.length, true);
|
|
184
|
-
},
|
|
185
|
-
'syscall/js.valueLoadString': (sp) => {
|
|
186
|
-
const str = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
187
|
-
new Uint8Array(this.mem.buffer, new DataView(this.mem.buffer).getInt32(sp + 16, true)).set(str);
|
|
188
|
-
},
|
|
189
|
-
'syscall/js.valueInstanceOf': (sp) => {
|
|
190
|
-
const v = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
191
|
-
const t = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 16, true));
|
|
192
|
-
new DataView(this.mem.buffer).setUint8(sp + 24, v instanceof t ? 1 : 0);
|
|
193
|
-
},
|
|
194
|
-
'syscall/js.copyBytesToGo': (sp) => {
|
|
195
|
-
const dst = new DataView(this.mem.buffer).getInt32(sp + 8, true);
|
|
196
|
-
const src = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 16, true));
|
|
197
|
-
new Uint8Array(this.mem.buffer, dst).set(src);
|
|
198
|
-
new DataView(this.mem.buffer).setInt32(sp + 24, src.length, true);
|
|
199
|
-
},
|
|
200
|
-
'syscall/js.copyBytesToJS': (sp) => {
|
|
201
|
-
const dst = this._loadValue(new DataView(this.mem.buffer).getInt32(sp + 8, true));
|
|
202
|
-
const src = new DataView(this.mem.buffer).getInt32(sp + 16, true);
|
|
203
|
-
const len = new DataView(this.mem.buffer).getInt32(sp + 24, true);
|
|
204
|
-
dst.set(new Uint8Array(this.mem.buffer, src, len));
|
|
205
|
-
new DataView(this.mem.buffer).setInt32(sp + 32, len, true);
|
|
206
|
-
},
|
|
207
|
-
// Debug functions
|
|
208
|
-
'debug': (value) => {
|
|
209
|
-
console.log('[Go WASM Debug]:', value);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
this._nextCallbackTimeoutID = 1;
|
|
214
|
-
this._values = [NaN, 0, null, true, false, global, this];
|
|
215
|
-
this._goRefCounts = [];
|
|
216
|
-
this._ids = new Map();
|
|
217
|
-
this._idPool = [];
|
|
218
|
-
}
|
|
219
|
-
_storeValue(addr, v) {
|
|
220
|
-
const nanHead = 0x7FF80000;
|
|
221
|
-
if (typeof v === "number" && v !== 0) {
|
|
222
|
-
if (isNaN(v)) {
|
|
223
|
-
new DataView(this.mem.buffer).setUint32(addr + 4, nanHead, true);
|
|
224
|
-
new DataView(this.mem.buffer).setUint32(addr, 0, true);
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
new DataView(this.mem.buffer).setFloat64(addr, v, true);
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
if (v === undefined) {
|
|
231
|
-
new DataView(this.mem.buffer).setFloat64(addr, 0, true);
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
let id = this._ids.get(v);
|
|
235
|
-
if (id === undefined) {
|
|
236
|
-
id = this._idPool.pop();
|
|
237
|
-
if (id === undefined) {
|
|
238
|
-
id = this._values.length;
|
|
239
|
-
}
|
|
240
|
-
this._values[id] = v;
|
|
241
|
-
this._goRefCounts[id] = 0;
|
|
242
|
-
this._ids.set(v, id);
|
|
243
|
-
}
|
|
244
|
-
this._goRefCounts[id]++;
|
|
245
|
-
let typeFlag = 0;
|
|
246
|
-
switch (typeof v) {
|
|
247
|
-
case "object":
|
|
248
|
-
if (v !== null) {
|
|
249
|
-
typeFlag = 1;
|
|
250
|
-
}
|
|
251
|
-
break;
|
|
252
|
-
case "string":
|
|
253
|
-
typeFlag = 2;
|
|
254
|
-
break;
|
|
255
|
-
case "symbol":
|
|
256
|
-
typeFlag = 3;
|
|
257
|
-
break;
|
|
258
|
-
case "function":
|
|
259
|
-
typeFlag = 4;
|
|
260
|
-
break;
|
|
31
|
+
async function loadGoRuntime(goWasmPath) {
|
|
32
|
+
if (typeof global.Go === 'function') {
|
|
33
|
+
return global.Go;
|
|
34
|
+
}
|
|
35
|
+
// Try to find wasm_exec.js or wasm_exec.cjs
|
|
36
|
+
const possiblePaths = [
|
|
37
|
+
goWasmPath,
|
|
38
|
+
'./wasm_exec.cjs',
|
|
39
|
+
'./wasm_exec.js',
|
|
40
|
+
'./public/wasm_exec.cjs',
|
|
41
|
+
'./public/wasm_exec.js',
|
|
42
|
+
'./src/wasm_exec.cjs',
|
|
43
|
+
'./src/wasm_exec.js',
|
|
44
|
+
path.join(process.cwd(), 'wasm_exec.cjs'),
|
|
45
|
+
path.join(process.cwd(), 'wasm_exec.js'),
|
|
46
|
+
path.join(process.cwd(), 'public', 'wasm_exec.cjs'),
|
|
47
|
+
path.join(process.cwd(), 'public', 'wasm_exec.js'),
|
|
48
|
+
path.join(process.cwd(), 'src', 'wasm_exec.cjs'),
|
|
49
|
+
path.join(process.cwd(), 'src', 'wasm_exec.js')
|
|
50
|
+
].filter(Boolean);
|
|
51
|
+
for (const wasmExecPath of possiblePaths) {
|
|
52
|
+
try {
|
|
53
|
+
const resolvedPath = path.resolve(wasmExecPath);
|
|
54
|
+
// Check if file exists using fs.stat instead of fs.access
|
|
55
|
+
try {
|
|
56
|
+
const stats = await fs.stat(resolvedPath);
|
|
57
|
+
if (!stats.isFile()) {
|
|
58
|
+
continue;
|
|
261
59
|
}
|
|
262
|
-
new DataView(this.mem.buffer).setUint32(addr + 4, nanHead | typeFlag, true);
|
|
263
|
-
new DataView(this.mem.buffer).setUint32(addr, id, true);
|
|
264
60
|
}
|
|
265
|
-
|
|
266
|
-
try
|
|
267
|
-
// Validate address bounds
|
|
268
|
-
if (addr < 0 || addr >= this.mem.buffer.byteLength - 8) {
|
|
269
|
-
console.warn(`[WASM] Invalid _loadValue address: ${addr}`);
|
|
270
|
-
return undefined;
|
|
271
|
-
}
|
|
272
|
-
const f = new DataView(this.mem.buffer).getFloat64(addr, true);
|
|
273
|
-
if (f === 0) {
|
|
274
|
-
return undefined;
|
|
275
|
-
}
|
|
276
|
-
if (!isNaN(f)) {
|
|
277
|
-
return f;
|
|
278
|
-
}
|
|
279
|
-
const id = new DataView(this.mem.buffer).getUint32(addr, true);
|
|
280
|
-
// Validate the ID is within bounds
|
|
281
|
-
if (id < 0 || id >= this._values.length) {
|
|
282
|
-
console.warn(`[WASM] Invalid value ID: ${id}, values length: ${this._values.length}`);
|
|
283
|
-
return undefined;
|
|
284
|
-
}
|
|
285
|
-
return this._values[id];
|
|
286
|
-
}
|
|
287
|
-
catch (error) {
|
|
288
|
-
console.warn(`[WASM] Error loading value at ${addr}:`, error);
|
|
289
|
-
return undefined;
|
|
290
|
-
}
|
|
61
|
+
catch (statError) {
|
|
62
|
+
continue; // File doesn't exist, try next path
|
|
291
63
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
return '';
|
|
298
|
-
}
|
|
299
|
-
const saddr = new DataView(this.mem.buffer).getInt32(addr + 0, true);
|
|
300
|
-
const len = new DataView(this.mem.buffer).getInt32(addr + 8, true);
|
|
301
|
-
// Validate string data address and length
|
|
302
|
-
if (saddr < 0 || len < 0 || saddr + len > this.mem.buffer.byteLength) {
|
|
303
|
-
console.warn(`[WASM] Invalid string data - addr: ${saddr}, len: ${len}, buffer size: ${this.mem.buffer.byteLength}`);
|
|
304
|
-
return '';
|
|
305
|
-
}
|
|
306
|
-
return new TextDecoder("utf-8").decode(new DataView(this.mem.buffer, saddr, len));
|
|
307
|
-
}
|
|
308
|
-
catch (error) {
|
|
309
|
-
console.warn(`[WASM] Error loading string at ${addr}:`, error);
|
|
310
|
-
return '';
|
|
311
|
-
}
|
|
64
|
+
// Load the Go runtime using dynamic import with file:// URL
|
|
65
|
+
const wasmExecUrl = pathToFileURL(resolvedPath).href;
|
|
66
|
+
// Clear global.Go to ensure fresh import
|
|
67
|
+
if (global.Go) {
|
|
68
|
+
delete global.Go;
|
|
312
69
|
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
return [];
|
|
319
|
-
}
|
|
320
|
-
const array = new DataView(this.mem.buffer).getInt32(addr + 0, true);
|
|
321
|
-
const len = new DataView(this.mem.buffer).getInt32(addr + 8, true);
|
|
322
|
-
// Validate array parameters
|
|
323
|
-
if (len < 0 || len > 1000) { // Reasonable limit
|
|
324
|
-
console.warn(`[WASM] Invalid slice length: ${len}`);
|
|
325
|
-
return [];
|
|
326
|
-
}
|
|
327
|
-
if (array < 0 || array + (len * 8) > this.mem.buffer.byteLength) {
|
|
328
|
-
console.warn(`[WASM] Invalid slice data - addr: ${array}, len: ${len}`);
|
|
329
|
-
return [];
|
|
330
|
-
}
|
|
331
|
-
const a = new Array(len);
|
|
332
|
-
for (let i = 0; i < len; i++) {
|
|
333
|
-
a[i] = this._loadValue(array + i * 8);
|
|
334
|
-
}
|
|
335
|
-
return a;
|
|
336
|
-
}
|
|
337
|
-
catch (error) {
|
|
338
|
-
console.warn(`[WASM] Error loading slice at ${addr}:`, error);
|
|
339
|
-
return [];
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
_resume() {
|
|
343
|
-
if (this.inst && this.inst.exports.resume) {
|
|
344
|
-
try {
|
|
345
|
-
this.inst.exports.resume();
|
|
346
|
-
}
|
|
347
|
-
catch (error) {
|
|
348
|
-
console.warn('[WASM] Error resuming:', error);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
70
|
+
// Import the module
|
|
71
|
+
await import(wasmExecUrl);
|
|
72
|
+
if (typeof global.Go === 'function') {
|
|
73
|
+
console.log(`[WASM] Loaded Go runtime from: ${resolvedPath}`);
|
|
74
|
+
return global.Go;
|
|
351
75
|
}
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
this.mem = instance.exports.mem;
|
|
355
|
-
// Set up the global object with common browser APIs
|
|
356
|
-
global.global = global;
|
|
357
|
-
global.Object = Object;
|
|
358
|
-
global.Array = Array;
|
|
359
|
-
global.console = console;
|
|
360
|
-
global.document = {
|
|
361
|
-
createElement: (tag) => ({ tagName: tag, innerHTML: '', style: {} }),
|
|
362
|
-
getElementById: () => null,
|
|
363
|
-
querySelector: () => null
|
|
364
|
-
};
|
|
365
|
-
global.window = global;
|
|
366
|
-
// Add required crypto for Go WASM
|
|
367
|
-
if (!global.crypto) {
|
|
368
|
-
global.crypto = {
|
|
369
|
-
getRandomValues: (array) => {
|
|
370
|
-
if (array && array instanceof Uint8Array) {
|
|
371
|
-
for (let i = 0; i < array.length; i++) {
|
|
372
|
-
array[i] = Math.floor(Math.random() * 256);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
return array;
|
|
376
|
-
},
|
|
377
|
-
subtle: {},
|
|
378
|
-
randomUUID: () => {
|
|
379
|
-
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
380
|
-
const r = Math.random() * 16 | 0;
|
|
381
|
-
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
382
|
-
return v.toString(16);
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
|
-
if (options.debug) {
|
|
388
|
-
console.log('[WASM] Go runtime initialized with proper imports');
|
|
389
|
-
console.log('[WASM] Memory size:', this.mem.buffer.byteLength, 'bytes');
|
|
390
|
-
}
|
|
391
|
-
// Run the Go program with error handling
|
|
392
|
-
try {
|
|
393
|
-
if (instance.exports.run) {
|
|
394
|
-
instance.exports.run();
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
catch (error) {
|
|
398
|
-
console.error('[WASM] Error running Go program:', error);
|
|
399
|
-
throw error;
|
|
400
|
-
}
|
|
76
|
+
else {
|
|
77
|
+
console.warn(`[WASM] File found but Go class not exported: ${resolvedPath}`);
|
|
401
78
|
}
|
|
402
|
-
}
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.warn(`[WASM] Error loading from ${wasmExecPath}:`, error.message);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
throw new Error('[WASM] Could not find wasm_exec.js. Please ensure you have the Go WASM runtime file available.\n' +
|
|
86
|
+
'You can get it from: https://github.com/golang/go/blob/master/misc/wasm/wasm_exec.js\n' +
|
|
87
|
+
`Searched paths: ${possiblePaths.join(', ')}`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Load a Go WASM module from a file path for server-side usage
|
|
91
|
+
*/
|
|
92
|
+
export async function loadGoWasmFromFile(wasmFilePath, options = {}) {
|
|
93
|
+
try {
|
|
94
|
+
// Initialize Node.js WASM environment
|
|
95
|
+
await initNodeWasm();
|
|
96
|
+
if (options.debug) {
|
|
97
|
+
console.log('[WASM] Loading WASM from file:', wasmFilePath);
|
|
98
|
+
}
|
|
99
|
+
// Load the standard Go runtime
|
|
100
|
+
const GoRuntime = await loadGoRuntime(options.goWasmPath);
|
|
101
|
+
const go = new GoRuntime();
|
|
403
102
|
// Load WASM binary
|
|
404
103
|
const wasmBuffer = await fs.readFile(wasmFilePath);
|
|
405
104
|
const wasmModule = await WebAssembly.compile(wasmBuffer);
|
|
406
|
-
//
|
|
407
|
-
|
|
408
|
-
|
|
105
|
+
// The updated wasm_exec.js provides imports under 'gojs' instead of 'go'
|
|
106
|
+
// Create imports object with the correct structure
|
|
107
|
+
const baseImports = go.importObject;
|
|
409
108
|
const finalImportObject = {
|
|
410
|
-
...
|
|
109
|
+
...baseImports,
|
|
411
110
|
...options.importObject
|
|
412
111
|
};
|
|
112
|
+
if (options.debug) {
|
|
113
|
+
console.log('[WASM] Available import modules:', Object.keys(finalImportObject));
|
|
114
|
+
// Debug each module's functions
|
|
115
|
+
for (const [moduleName, moduleExports] of Object.entries(finalImportObject)) {
|
|
116
|
+
if (typeof moduleExports === 'object' && moduleExports !== null) {
|
|
117
|
+
const exportNames = Object.keys(moduleExports);
|
|
118
|
+
console.log(`[WASM] ${moduleName} import functions:`, exportNames);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
413
122
|
// Instantiate the WASM module
|
|
414
123
|
const instance = await WebAssembly.instantiate(wasmModule, finalImportObject);
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
//
|
|
420
|
-
const
|
|
124
|
+
if (options.debug) {
|
|
125
|
+
console.log('[WASM] WASM instance created, starting Go runtime...');
|
|
126
|
+
}
|
|
127
|
+
// Initialize Go runtime - this will run the main function
|
|
128
|
+
// The go.run() method returns a promise that resolves when the program exits
|
|
129
|
+
const runPromise = go.run(instance);
|
|
130
|
+
if (options.debug) {
|
|
131
|
+
console.log('[WASM] Go runtime started, waiting for initialization...');
|
|
132
|
+
}
|
|
133
|
+
// Give Go runtime time to initialize and register functions
|
|
134
|
+
// Don't wait for the program to finish, just wait for functions to be registered
|
|
135
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
136
|
+
if (options.debug) {
|
|
137
|
+
console.log('[WASM] Scanning global object for Go functions...');
|
|
138
|
+
}
|
|
139
|
+
// Extract exported functions from global scope
|
|
421
140
|
const functions = {};
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
const originalFn = functions[key];
|
|
429
|
-
functions[key] = (...args) => {
|
|
430
|
-
console.log(`[WASM] Calling ${key}(${args.join(', ')})`);
|
|
431
|
-
const result = originalFn(...args);
|
|
432
|
-
console.log(`[WASM] ${key} returned:`, result);
|
|
433
|
-
return result;
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
}
|
|
141
|
+
const globalObj = global;
|
|
142
|
+
// Scan for Go functions
|
|
143
|
+
const allKeys = Object.getOwnPropertyNames(globalObj);
|
|
144
|
+
const goKeys = allKeys.filter(key => key.startsWith('go'));
|
|
145
|
+
if (options.debug) {
|
|
146
|
+
console.log('[WASM] All keys starting with "go":', goKeys);
|
|
437
147
|
}
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
const globalFunc = global[key];
|
|
442
|
-
functions[key] = (...args) => globalFunc(...args);
|
|
148
|
+
for (const key of goKeys) {
|
|
149
|
+
if (typeof globalObj[key] === 'function') {
|
|
150
|
+
functions[key] = globalObj[key];
|
|
443
151
|
if (options.debug) {
|
|
444
|
-
|
|
445
|
-
functions[key] = (...args) => {
|
|
446
|
-
console.log(`[WASM] Calling global ${key}(${args.join(', ')})`);
|
|
447
|
-
const result = originalFn(...args);
|
|
448
|
-
console.log(`[WASM] ${key} returned:`, result);
|
|
449
|
-
return result;
|
|
450
|
-
};
|
|
152
|
+
console.log(`[WASM] Found function: ${key}`);
|
|
451
153
|
}
|
|
452
154
|
}
|
|
453
155
|
}
|
|
454
156
|
const wasmInstance = {
|
|
455
157
|
instance,
|
|
456
158
|
module: wasmModule,
|
|
457
|
-
exports,
|
|
159
|
+
exports: instance.exports,
|
|
458
160
|
functions
|
|
459
161
|
};
|
|
460
162
|
// Run onLoad callback if provided
|
|
461
163
|
if (options.onLoad) {
|
|
462
164
|
options.onLoad(wasmInstance);
|
|
463
165
|
}
|
|
166
|
+
if (options.debug) {
|
|
167
|
+
console.log(`[WASM] Module loaded successfully with ${Object.keys(functions).length} functions`);
|
|
168
|
+
console.log('[WASM] Final function list:', Object.keys(functions));
|
|
169
|
+
}
|
|
170
|
+
// Don't await the runPromise - let the Go program finish in the background
|
|
171
|
+
// The functions are already registered and available
|
|
172
|
+
runPromise.catch((error) => {
|
|
173
|
+
if (options.debug) {
|
|
174
|
+
console.log('[WASM] Go program finished with error:', error);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
464
177
|
return wasmInstance;
|
|
465
178
|
}
|
|
466
179
|
catch (error) {
|
|
@@ -468,4 +181,28 @@ export async function loadGoWasmFromFile(wasmFilePath, options = {}) {
|
|
|
468
181
|
throw error;
|
|
469
182
|
}
|
|
470
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Call a Go WASM function in Node.js environment
|
|
186
|
+
*/
|
|
187
|
+
export function callWasmFunction(funcName, ...args) {
|
|
188
|
+
const func = global[funcName];
|
|
189
|
+
if (typeof func !== 'function') {
|
|
190
|
+
throw new Error(`Function ${funcName} not found. Make sure the WASM module is loaded.`);
|
|
191
|
+
}
|
|
192
|
+
return func(...args);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Check if Go WASM is ready in Node.js
|
|
196
|
+
*/
|
|
197
|
+
export function isWasmReady() {
|
|
198
|
+
const globalObj = global;
|
|
199
|
+
return Object.keys(globalObj).some(key => key.startsWith('go') && typeof globalObj[key] === 'function');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get all available Go WASM functions in Node.js
|
|
203
|
+
*/
|
|
204
|
+
export function getWasmFunctions() {
|
|
205
|
+
const globalObj = global;
|
|
206
|
+
return Object.keys(globalObj).filter(key => key.startsWith('go') && typeof globalObj[key] === 'function');
|
|
207
|
+
}
|
|
471
208
|
//# sourceMappingURL=wasm.js.map
|
package/dist/server/wasm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../src/server/wasm.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../src/server/wasm.ts"],"names":[],"mappings":"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"}
|
package/dist/wasm.d.ts
CHANGED
|
@@ -1,18 +1,51 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* WebAssembly integration for Frontend Hamroun
|
|
3
|
+
* Works in both browser and Node.js environments
|
|
3
4
|
*/
|
|
4
5
|
export interface GoWasmOptions {
|
|
5
6
|
debug?: boolean;
|
|
6
7
|
goWasmPath?: string;
|
|
7
|
-
importObject?:
|
|
8
|
+
importObject?: any;
|
|
8
9
|
onLoad?: (instance: GoWasmInstance) => void;
|
|
9
10
|
}
|
|
10
11
|
export interface GoWasmInstance {
|
|
11
12
|
instance: WebAssembly.Instance;
|
|
12
13
|
module: WebAssembly.Module;
|
|
13
|
-
exports: WebAssembly.
|
|
14
|
+
exports: WebAssembly.Exports;
|
|
14
15
|
functions: Record<string, Function>;
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Load Go WASM module in the browser (like your working frontend code)
|
|
19
|
+
*/
|
|
16
20
|
export declare function loadGoWasm(wasmUrl: string, options?: GoWasmOptions): Promise<GoWasmInstance>;
|
|
17
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Call a Go WASM function (like your frontend code's callWasmFunction)
|
|
23
|
+
*/
|
|
24
|
+
export declare function callWasmFunction(funcName: string, ...args: any[]): any;
|
|
25
|
+
/**
|
|
26
|
+
* Check if Go WASM is ready (like your frontend code's wasmReady state)
|
|
27
|
+
*/
|
|
28
|
+
export declare function isWasmReady(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Get all available Go WASM functions
|
|
31
|
+
*/
|
|
32
|
+
export declare function getWasmFunctions(): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Hook for React components (like your frontend code's useEffect pattern)
|
|
35
|
+
*/
|
|
36
|
+
export declare function useGoWasm(wasmUrl: string, options?: GoWasmOptions): {
|
|
37
|
+
loadWasm: () => Promise<GoWasmInstance>;
|
|
38
|
+
callFunction: typeof callWasmFunction;
|
|
39
|
+
isReady: typeof isWasmReady;
|
|
40
|
+
getFunctions: typeof getWasmFunctions;
|
|
41
|
+
};
|
|
42
|
+
declare global {
|
|
43
|
+
interface Window {
|
|
44
|
+
Go: new () => {
|
|
45
|
+
importObject: any;
|
|
46
|
+
run: (instance: WebAssembly.Instance) => void;
|
|
47
|
+
};
|
|
48
|
+
[key: string]: any;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
18
51
|
//# sourceMappingURL=wasm.d.ts.map
|
package/dist/wasm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../src/wasm.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../src/wasm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC/B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,cAAc,CAAC,CAwEzB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAWtE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CASrC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAQ3C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;;;;;EAarE;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,EAAE,EAAE,UAAU;YACZ,YAAY,EAAE,GAAG,CAAC;YAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,KAAK,IAAI,CAAC;SAC/C,CAAC;QACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB;CACF"}
|
package/dist/wasm.js
CHANGED
|
@@ -1,50 +1,114 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* WebAssembly integration for Frontend Hamroun
|
|
3
|
+
* Works in both browser and Node.js environments
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Load Go WASM module in the browser (like your working frontend code)
|
|
3
7
|
*/
|
|
4
|
-
// Browser-side WASM utilities
|
|
5
8
|
export async function loadGoWasm(wasmUrl, options = {}) {
|
|
6
9
|
if (typeof window === 'undefined') {
|
|
7
|
-
throw new Error('loadGoWasm is for browser use only. Use loadGoWasmFromFile
|
|
10
|
+
throw new Error('loadGoWasm() is for browser use only. Use loadGoWasmFromFile() in Node.js.');
|
|
8
11
|
}
|
|
9
12
|
try {
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
// Check if Go WASM runtime is available (like your frontend code)
|
|
14
|
+
if (!window.Go) {
|
|
15
|
+
throw new Error('Go WASM runtime not available. Make sure wasm_exec.js is loaded.');
|
|
16
|
+
}
|
|
17
|
+
if (options.debug) {
|
|
18
|
+
console.log('[WASM] Loading WASM from:', wasmUrl);
|
|
19
|
+
}
|
|
20
|
+
// Fetch the WASM file (exactly like your frontend code)
|
|
21
|
+
const response = await fetch(wasmUrl);
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
throw new Error(`Failed to fetch WASM file: ${response.status}`);
|
|
24
|
+
}
|
|
25
|
+
const wasmBytes = await response.arrayBuffer();
|
|
26
|
+
// Initialize Go runtime (exactly like your frontend code)
|
|
19
27
|
const go = new window.Go();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// Run Go
|
|
28
|
+
const wasmModule = await WebAssembly.instantiate(wasmBytes, go.importObject);
|
|
29
|
+
// Run the Go program (exactly like your frontend code)
|
|
23
30
|
go.run(wasmModule.instance);
|
|
24
|
-
//
|
|
31
|
+
// Wait a bit for Go functions to be registered (like your frontend code)
|
|
32
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
33
|
+
if (options.debug) {
|
|
34
|
+
console.log('[WASM] Go program started, checking for registered functions...');
|
|
35
|
+
}
|
|
36
|
+
// Extract exported functions from global scope (like your frontend code)
|
|
25
37
|
const functions = {};
|
|
26
|
-
|
|
27
|
-
for (const key in
|
|
28
|
-
if (typeof
|
|
29
|
-
functions[key] =
|
|
38
|
+
// Look for Go functions in global scope
|
|
39
|
+
for (const key in window) {
|
|
40
|
+
if (typeof window[key] === 'function' && key.startsWith('go')) {
|
|
41
|
+
functions[key] = window[key];
|
|
42
|
+
if (options.debug) {
|
|
43
|
+
console.log(`[WASM] Found function: ${key}`);
|
|
44
|
+
}
|
|
30
45
|
}
|
|
31
46
|
}
|
|
32
|
-
const
|
|
47
|
+
const wasmInstance = {
|
|
33
48
|
instance: wasmModule.instance,
|
|
34
|
-
module: wasmModule
|
|
35
|
-
exports,
|
|
49
|
+
module: wasmModule,
|
|
50
|
+
exports: wasmModule.instance.exports,
|
|
36
51
|
functions
|
|
37
52
|
};
|
|
38
53
|
if (options.onLoad) {
|
|
39
|
-
options.onLoad(
|
|
54
|
+
options.onLoad(wasmInstance);
|
|
55
|
+
}
|
|
56
|
+
if (options.debug) {
|
|
57
|
+
console.log(`[WASM] Module loaded successfully with ${Object.keys(functions).length} functions`);
|
|
40
58
|
}
|
|
41
|
-
return
|
|
59
|
+
return wasmInstance;
|
|
42
60
|
}
|
|
43
61
|
catch (error) {
|
|
44
|
-
console.error('[WASM]
|
|
62
|
+
console.error('[WASM] Error loading Go WASM module:', error);
|
|
45
63
|
throw error;
|
|
46
64
|
}
|
|
47
65
|
}
|
|
48
|
-
|
|
49
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Call a Go WASM function (like your frontend code's callWasmFunction)
|
|
68
|
+
*/
|
|
69
|
+
export function callWasmFunction(funcName, ...args) {
|
|
70
|
+
if (typeof window === 'undefined') {
|
|
71
|
+
throw new Error('callWasmFunction() is for browser use only.');
|
|
72
|
+
}
|
|
73
|
+
const func = window[funcName];
|
|
74
|
+
if (typeof func !== 'function') {
|
|
75
|
+
throw new Error(`Function ${funcName} not found. Make sure the WASM module is loaded.`);
|
|
76
|
+
}
|
|
77
|
+
return func(...args);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if Go WASM is ready (like your frontend code's wasmReady state)
|
|
81
|
+
*/
|
|
82
|
+
export function isWasmReady() {
|
|
83
|
+
if (typeof window === 'undefined') {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
// Check if Go runtime is available and at least one Go function exists
|
|
87
|
+
return !!(window.Go && Object.keys(window).some(key => key.startsWith('go') && typeof window[key] === 'function'));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get all available Go WASM functions
|
|
91
|
+
*/
|
|
92
|
+
export function getWasmFunctions() {
|
|
93
|
+
if (typeof window === 'undefined') {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
return Object.keys(window).filter(key => key.startsWith('go') && typeof window[key] === 'function');
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Hook for React components (like your frontend code's useEffect pattern)
|
|
100
|
+
*/
|
|
101
|
+
export function useGoWasm(wasmUrl, options = {}) {
|
|
102
|
+
if (typeof window === 'undefined') {
|
|
103
|
+
throw new Error('useGoWasm() is for browser use only.');
|
|
104
|
+
}
|
|
105
|
+
// This would need to be implemented as a React hook in frontend-hamroun
|
|
106
|
+
// For now, return the basic functionality
|
|
107
|
+
return {
|
|
108
|
+
loadWasm: () => loadGoWasm(wasmUrl, options),
|
|
109
|
+
callFunction: callWasmFunction,
|
|
110
|
+
isReady: isWasmReady,
|
|
111
|
+
getFunctions: getWasmFunctions
|
|
112
|
+
};
|
|
113
|
+
}
|
|
50
114
|
//# sourceMappingURL=wasm.js.map
|
package/dist/wasm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../src/wasm.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../src/wasm.ts"],"names":[],"mappings":"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"}
|