baraqex 1.0.64 → 1.0.66
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/bin/baraqex.js +1013 -1126
- package/dist/api/hello.d.ts +3 -0
- package/dist/api/hello.d.ts.map +1 -0
- package/dist/api/users/[id].d.ts +5 -0
- package/dist/api/users/[id].d.ts.map +1 -0
- package/dist/browser.d.ts +40 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +407 -1
- package/dist/browser.js.map +4 -4
- package/dist/browser.package.json +4 -0
- package/dist/forms/index.d.ts +2 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/types.d.ts +2 -0
- package/dist/forms/types.d.ts.map +1 -0
- package/dist/frontend/components/WasmLoader.d.ts +2 -0
- package/dist/frontend/components/WasmLoader.d.ts.map +1 -0
- package/dist/frontend/hooks/useWasm.d.ts +2 -0
- package/dist/frontend/hooks/useWasm.d.ts.map +1 -0
- package/dist/frontend/index.d.ts +2 -0
- package/dist/frontend/index.d.ts.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +678 -317
- package/dist/index.js.map +4 -4
- package/dist/renderComponent.d.ts +9 -0
- package/dist/renderComponent.d.ts.map +1 -0
- package/dist/router/index.d.ts +2 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/types.d.ts +2 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/server/api-router.d.ts +16 -0
- package/dist/server/api-router.d.ts.map +1 -0
- package/dist/server/auth.d.ts +25 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/database.d.ts +22 -0
- package/dist/server/database.d.ts.map +1 -0
- package/dist/server/index.d.ts +116 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/{server.js → server/index.js} +120 -23
- package/dist/server/index.js.map +7 -0
- package/dist/server/middleware.d.ts +11 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/package.json +4 -0
- package/dist/server/templates.d.ts +31 -0
- package/dist/server/templates.d.ts.map +1 -0
- package/dist/server/types.d.ts +69 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/utils.d.ts +70 -0
- package/dist/server/utils.d.ts.map +1 -0
- package/dist/server/wasm.d.ts +29 -0
- package/dist/server/wasm.d.ts.map +1 -0
- package/dist/server-renderer.d.ts +5 -0
- package/dist/server-renderer.d.ts.map +1 -0
- package/dist/store/index.d.ts +2 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/types.d.ts +2 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/wasm.d.ts +51 -0
- package/dist/wasm.d.ts.map +1 -0
- package/package.json +65 -56
- package/templates/basic-app/src/main.tsx +1 -0
- package/templates/fullstack-template/.env.example +42 -0
- package/templates/fullstack-template/README.md +38 -42
- package/templates/fullstack-template/package-lock.json +7932 -0
- package/templates/fullstack-template/package.json +58 -6
- package/templates/fullstack-template/server.js +28 -9
- package/templates/fullstack-template/src/App.tsx +94 -0
- package/templates/fullstack-template/src/api/auth/login.ts +75 -0
- package/templates/fullstack-template/src/api/auth/me.ts +66 -0
- package/templates/fullstack-template/src/api/auth/register.ts +59 -0
- package/templates/fullstack-template/src/api/todos/[id].ts +108 -0
- package/templates/fullstack-template/src/api/todos/index.ts +79 -0
- package/templates/fullstack-template/src/components/Dashboard.tsx +129 -0
- package/templates/fullstack-template/src/components/Header.tsx +76 -0
- package/templates/fullstack-template/src/contexts/ApiContext.tsx +69 -0
- package/templates/fullstack-template/src/contexts/AuthContext.tsx +155 -0
- package/templates/fullstack-template/src/server.ts +167 -0
- package/templates/fullstack-template/src/styles/App.css +446 -0
- package/templates/ssr-template/package-lock.json +337 -60
- package/templates/ssr-template/package.json +1 -1
- package/templates/ssr-template/src/App.tsx +2 -2
- package/templates/wasm/App.tsx +564 -0
- package/templates/wasm/client.tsx +220 -0
- package/templates/wasm/index.tsx +21 -0
- package/templates/wasm/package-lock.json +5347 -5307
- package/templates/wasm/package.json +43 -25
- package/templates/wasm/public/example.wasm +0 -0
- package/templates/wasm/public/wasm_exec.js +1 -12
- package/templates/wasm/server.ts +145 -0
- package/templates/wasm/vite.config.ts +42 -24
- package/README_WASM.md +0 -472
- package/dist/server.js.map +0 -7
- package/templates/basic-app/src/App.jsx +0 -0
- package/templates/basic-app/src/App.tsx +0 -0
- package/templates/fullstack-template/src/api/hello.js +0 -17
- package/templates/fullstack-template/src/pages/index.js +0 -206
- /package/templates/{basic-app/server.js → wasm/go/wasm_exec.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hello.d.ts","sourceRoot":"","sources":["../../src/api/hello.js"],"names":[],"mappings":"AAAA,8CAOC;AAED,+CAQC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"[id].d.ts","sourceRoot":"","sources":["../../../src/api/users/[id].js"],"names":[],"mappings":"AAOA,6CAeC;AAED,6CAmBC;AAED,iDAkBC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-specific exports for Baraqex
|
|
3
|
+
* This file is used when building for the browser
|
|
4
|
+
*/
|
|
5
|
+
export * from 'frontend-hamroun';
|
|
6
|
+
export { loadGoWasm, callWasmFunction, isWasmReady, getWasmFunctions, useGoWasm } from './wasm.js';
|
|
7
|
+
export type { GoWasmOptions, GoWasmInstance } from './wasm.js';
|
|
8
|
+
export declare const safeJsonParse: (json: string, fallback: any) => any;
|
|
9
|
+
export declare const generateToken: (length?: number) => string;
|
|
10
|
+
export declare const generateDocument: (content: string, options?: any) => string;
|
|
11
|
+
export declare const generateErrorPage: (code: number, message: string) => string;
|
|
12
|
+
export declare const generateLoadingPage: (message?: string) => string;
|
|
13
|
+
export declare const renderToString: (component: any) => string;
|
|
14
|
+
export declare const createServer: () => never;
|
|
15
|
+
export declare const createDevServer: () => never;
|
|
16
|
+
export declare const createProductionServer: () => never;
|
|
17
|
+
export declare const BaraqexServer: null;
|
|
18
|
+
export declare const Database: null;
|
|
19
|
+
export declare const AuthService: null;
|
|
20
|
+
export declare const ApiRouter: null;
|
|
21
|
+
export declare const requestLogger: null;
|
|
22
|
+
export declare const errorHandler: null;
|
|
23
|
+
export declare const notFoundHandler: null;
|
|
24
|
+
export declare const rateLimit: null;
|
|
25
|
+
export declare const initNodeWasm: null;
|
|
26
|
+
export declare const loadGoWasmFromFile: null;
|
|
27
|
+
export declare const hashString: null;
|
|
28
|
+
export declare const getPagination: null;
|
|
29
|
+
export declare const sendSuccess: null;
|
|
30
|
+
export declare const sendError: null;
|
|
31
|
+
export declare const validateFields: null;
|
|
32
|
+
export declare const validateFileUpload: null;
|
|
33
|
+
export declare const getEnvironmentInfo: null;
|
|
34
|
+
export declare const isDirectoryEmpty: null;
|
|
35
|
+
export declare const ensureDirectory: null;
|
|
36
|
+
export declare const writeJsonFile: null;
|
|
37
|
+
export declare const readJsonFile: null;
|
|
38
|
+
export declare const baraqexRenderToString: null;
|
|
39
|
+
export declare const renderComponent: null;
|
|
40
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,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;AAG/D,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,UAAU,GAAG,QAMxD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,SAAQ,MAAW,WAUhD,CAAC;AAGF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,EAAE,UAAS,GAAQ,WACyC,CAAC;AAE7G,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,WACvB,CAAC;AAEzC,eAAO,MAAM,mBAAmB,GAAI,UAAS,MAAqB,WACzC,CAAC;AAG1B,eAAO,MAAM,cAAc,GAAI,WAAW,GAAG,KAAG,MAU/C,CAAC;AAGF,eAAO,MAAM,YAAY,aAExB,CAAC;AAEF,eAAO,MAAM,eAAe,aAE3B,CAAC;AAEF,eAAO,MAAM,sBAAsB,aAElC,CAAC;AAGF,eAAO,MAAM,aAAa,MAAO,CAAC;AAClC,eAAO,MAAM,QAAQ,MAAO,CAAC;AAC7B,eAAO,MAAM,WAAW,MAAO,CAAC;AAChC,eAAO,MAAM,SAAS,MAAO,CAAC;AAC9B,eAAO,MAAM,aAAa,MAAO,CAAC;AAClC,eAAO,MAAM,YAAY,MAAO,CAAC;AACjC,eAAO,MAAM,eAAe,MAAO,CAAC;AACpC,eAAO,MAAM,SAAS,MAAO,CAAC;AAC9B,eAAO,MAAM,YAAY,MAAO,CAAC;AACjC,eAAO,MAAM,kBAAkB,MAAO,CAAC;AACvC,eAAO,MAAM,UAAU,MAAO,CAAC;AAC/B,eAAO,MAAM,aAAa,MAAO,CAAC;AAClC,eAAO,MAAM,WAAW,MAAO,CAAC;AAChC,eAAO,MAAM,SAAS,MAAO,CAAC;AAC9B,eAAO,MAAM,cAAc,MAAO,CAAC;AACnC,eAAO,MAAM,kBAAkB,MAAO,CAAC;AACvC,eAAO,MAAM,kBAAkB,MAAO,CAAC;AACvC,eAAO,MAAM,gBAAgB,MAAO,CAAC;AACrC,eAAO,MAAM,eAAe,MAAO,CAAC;AACpC,eAAO,MAAM,aAAa,MAAO,CAAC;AAClC,eAAO,MAAM,YAAY,MAAO,CAAC;AACjC,eAAO,MAAM,qBAAqB,MAAO,CAAC;AAC1C,eAAO,MAAM,eAAe,MAAO,CAAC"}
|
package/dist/browser.js
CHANGED
|
@@ -1,3 +1,296 @@
|
|
|
1
|
+
// node_modules/frontend-hamroun/dist/index.mjs
|
|
2
|
+
var isBatching = false;
|
|
3
|
+
var queue = [];
|
|
4
|
+
function batchUpdates(fn) {
|
|
5
|
+
if (isBatching) {
|
|
6
|
+
queue.push(fn);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
isBatching = true;
|
|
10
|
+
try {
|
|
11
|
+
fn();
|
|
12
|
+
while (queue.length > 0) {
|
|
13
|
+
const nextFn = queue.shift();
|
|
14
|
+
nextFn == null ? void 0 : nextFn();
|
|
15
|
+
}
|
|
16
|
+
} finally {
|
|
17
|
+
isBatching = false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
var currentRender = 0;
|
|
21
|
+
var states = /* @__PURE__ */ new Map();
|
|
22
|
+
var stateIndices = /* @__PURE__ */ new Map();
|
|
23
|
+
var effects = /* @__PURE__ */ new Map();
|
|
24
|
+
var memos = /* @__PURE__ */ new Map();
|
|
25
|
+
var refs = /* @__PURE__ */ new Map();
|
|
26
|
+
var globalRenderCallback = null;
|
|
27
|
+
var globalContainer = null;
|
|
28
|
+
var currentElement = null;
|
|
29
|
+
var isServer = typeof window === "undefined";
|
|
30
|
+
var serverStates = /* @__PURE__ */ new Map();
|
|
31
|
+
function setRenderCallback(callback, element, container) {
|
|
32
|
+
globalRenderCallback = callback;
|
|
33
|
+
globalContainer = container;
|
|
34
|
+
currentElement = element;
|
|
35
|
+
}
|
|
36
|
+
function prepareRender() {
|
|
37
|
+
currentRender++;
|
|
38
|
+
stateIndices.set(currentRender, 0);
|
|
39
|
+
return currentRender;
|
|
40
|
+
}
|
|
41
|
+
function finishRender() {
|
|
42
|
+
if (isServer) {
|
|
43
|
+
serverStates.delete(currentRender);
|
|
44
|
+
}
|
|
45
|
+
currentRender = 0;
|
|
46
|
+
}
|
|
47
|
+
function useState(initial) {
|
|
48
|
+
if (!currentRender) {
|
|
49
|
+
throw new Error("useState must be called within a render");
|
|
50
|
+
}
|
|
51
|
+
if (isServer) {
|
|
52
|
+
if (!serverStates.has(currentRender)) {
|
|
53
|
+
serverStates.set(currentRender, /* @__PURE__ */ new Map());
|
|
54
|
+
}
|
|
55
|
+
const componentState = serverStates.get(currentRender);
|
|
56
|
+
const index2 = stateIndices.get(currentRender) || 0;
|
|
57
|
+
if (!componentState.has(index2)) {
|
|
58
|
+
componentState.set(index2, initial);
|
|
59
|
+
}
|
|
60
|
+
const state2 = componentState.get(index2);
|
|
61
|
+
const setState2 = (newValue) => {
|
|
62
|
+
};
|
|
63
|
+
stateIndices.set(currentRender, index2 + 1);
|
|
64
|
+
return [state2, setState2];
|
|
65
|
+
}
|
|
66
|
+
if (!states.has(currentRender)) {
|
|
67
|
+
states.set(currentRender, []);
|
|
68
|
+
}
|
|
69
|
+
const componentStates = states.get(currentRender);
|
|
70
|
+
const index = stateIndices.get(currentRender);
|
|
71
|
+
if (index >= componentStates.length) {
|
|
72
|
+
componentStates.push(initial);
|
|
73
|
+
}
|
|
74
|
+
const state = componentStates[index];
|
|
75
|
+
const setState = (newValue) => {
|
|
76
|
+
const nextValue = typeof newValue === "function" ? newValue(componentStates[index]) : newValue;
|
|
77
|
+
if (componentStates[index] === nextValue)
|
|
78
|
+
return;
|
|
79
|
+
componentStates[index] = nextValue;
|
|
80
|
+
if (isBatching) {
|
|
81
|
+
batchUpdates(() => rerender(currentRender));
|
|
82
|
+
} else {
|
|
83
|
+
rerender(currentRender);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
stateIndices.set(currentRender, index + 1);
|
|
87
|
+
return [state, setState];
|
|
88
|
+
}
|
|
89
|
+
function useEffect(callback, deps) {
|
|
90
|
+
if (!currentRender)
|
|
91
|
+
throw new Error("useEffect must be called within a render");
|
|
92
|
+
const effectIndex = stateIndices.get(currentRender);
|
|
93
|
+
if (!effects.has(currentRender)) {
|
|
94
|
+
effects.set(currentRender, []);
|
|
95
|
+
}
|
|
96
|
+
const componentEffects = effects.get(currentRender);
|
|
97
|
+
const prevEffect = componentEffects[effectIndex];
|
|
98
|
+
if (!prevEffect || !deps || !prevEffect.deps || deps.some((dep, i) => dep !== prevEffect.deps[i])) {
|
|
99
|
+
if (prevEffect == null ? void 0 : prevEffect.cleanup) {
|
|
100
|
+
prevEffect.cleanup();
|
|
101
|
+
}
|
|
102
|
+
queueMicrotask(() => {
|
|
103
|
+
const cleanup = callback() || void 0;
|
|
104
|
+
componentEffects[effectIndex] = { cleanup, deps };
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
stateIndices.set(currentRender, effectIndex + 1);
|
|
108
|
+
}
|
|
109
|
+
function useMemo(factory, deps) {
|
|
110
|
+
if (!currentRender)
|
|
111
|
+
throw new Error("useMemo must be called within a render");
|
|
112
|
+
const memoIndex = stateIndices.get(currentRender);
|
|
113
|
+
if (!memos.has(currentRender)) {
|
|
114
|
+
memos.set(currentRender, []);
|
|
115
|
+
}
|
|
116
|
+
const componentMemos = memos.get(currentRender);
|
|
117
|
+
const prevMemo = componentMemos[memoIndex];
|
|
118
|
+
if (!prevMemo || deps && deps.some((dep, i) => !Object.is(dep, prevMemo.deps[i]))) {
|
|
119
|
+
const value = factory();
|
|
120
|
+
componentMemos[memoIndex] = { value, deps };
|
|
121
|
+
stateIndices.set(currentRender, memoIndex + 1);
|
|
122
|
+
return value;
|
|
123
|
+
}
|
|
124
|
+
stateIndices.set(currentRender, memoIndex + 1);
|
|
125
|
+
return prevMemo.value;
|
|
126
|
+
}
|
|
127
|
+
function useRef(initial) {
|
|
128
|
+
if (!currentRender)
|
|
129
|
+
throw new Error("useRef must be called within a render");
|
|
130
|
+
const refIndex = stateIndices.get(currentRender);
|
|
131
|
+
if (!refs.has(currentRender)) {
|
|
132
|
+
refs.set(currentRender, []);
|
|
133
|
+
}
|
|
134
|
+
const componentRefs = refs.get(currentRender);
|
|
135
|
+
if (refIndex >= componentRefs.length) {
|
|
136
|
+
const ref2 = { current: initial };
|
|
137
|
+
componentRefs.push(ref2);
|
|
138
|
+
stateIndices.set(currentRender, refIndex + 1);
|
|
139
|
+
return ref2;
|
|
140
|
+
}
|
|
141
|
+
const ref = componentRefs[refIndex];
|
|
142
|
+
stateIndices.set(currentRender, refIndex + 1);
|
|
143
|
+
return ref;
|
|
144
|
+
}
|
|
145
|
+
async function rerender(rendererId) {
|
|
146
|
+
try {
|
|
147
|
+
const componentEffects = effects.get(rendererId);
|
|
148
|
+
if (componentEffects) {
|
|
149
|
+
componentEffects.forEach((effect) => {
|
|
150
|
+
if (effect.cleanup)
|
|
151
|
+
effect.cleanup();
|
|
152
|
+
});
|
|
153
|
+
effects.set(rendererId, []);
|
|
154
|
+
}
|
|
155
|
+
if (globalRenderCallback && globalContainer && currentElement) {
|
|
156
|
+
await globalRenderCallback(currentElement, globalContainer);
|
|
157
|
+
}
|
|
158
|
+
} catch (error) {
|
|
159
|
+
console.error("Error during rerender:", error);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function useErrorBoundary() {
|
|
163
|
+
const [error, setError] = useState(null);
|
|
164
|
+
return [error, () => setError(null)];
|
|
165
|
+
}
|
|
166
|
+
function createContext(defaultValue) {
|
|
167
|
+
const context = {
|
|
168
|
+
Provider: ({ value, children }) => {
|
|
169
|
+
return children;
|
|
170
|
+
},
|
|
171
|
+
Consumer: ({ children }) => {
|
|
172
|
+
return children(defaultValue);
|
|
173
|
+
},
|
|
174
|
+
_id: Symbol(),
|
|
175
|
+
useSelector: (selector) => {
|
|
176
|
+
return selector(defaultValue);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
return context;
|
|
180
|
+
}
|
|
181
|
+
function useContext(context) {
|
|
182
|
+
return context;
|
|
183
|
+
}
|
|
184
|
+
function jsx(type, props) {
|
|
185
|
+
console.log("JSX Transform:", { type, props });
|
|
186
|
+
const processedProps = { ...props };
|
|
187
|
+
if (arguments.length > 2) {
|
|
188
|
+
processedProps.children = Array.prototype.slice.call(arguments, 2);
|
|
189
|
+
}
|
|
190
|
+
return { type, props: processedProps };
|
|
191
|
+
}
|
|
192
|
+
var Fragment = ({ children }) => children;
|
|
193
|
+
async function createElement(vnode) {
|
|
194
|
+
var _a;
|
|
195
|
+
console.log("Creating element from:", vnode);
|
|
196
|
+
if (vnode == null) {
|
|
197
|
+
return document.createTextNode("");
|
|
198
|
+
}
|
|
199
|
+
if (typeof vnode === "boolean") {
|
|
200
|
+
return document.createTextNode("");
|
|
201
|
+
}
|
|
202
|
+
if (typeof vnode === "number" || typeof vnode === "string") {
|
|
203
|
+
return document.createTextNode(String(vnode));
|
|
204
|
+
}
|
|
205
|
+
if (Array.isArray(vnode)) {
|
|
206
|
+
const fragment = document.createDocumentFragment();
|
|
207
|
+
for (const child of vnode) {
|
|
208
|
+
const node = await createElement(child);
|
|
209
|
+
fragment.appendChild(node);
|
|
210
|
+
}
|
|
211
|
+
return fragment;
|
|
212
|
+
}
|
|
213
|
+
if ("type" in vnode && vnode.props !== void 0) {
|
|
214
|
+
const { type, props } = vnode;
|
|
215
|
+
if (typeof type === "function") {
|
|
216
|
+
try {
|
|
217
|
+
const result = await type(props || {});
|
|
218
|
+
const node = await createElement(result);
|
|
219
|
+
if (node instanceof Element) {
|
|
220
|
+
node.setAttribute("data-component-id", type.name || type.toString());
|
|
221
|
+
}
|
|
222
|
+
return node;
|
|
223
|
+
} catch (error) {
|
|
224
|
+
console.error("Error rendering component:", error);
|
|
225
|
+
return document.createTextNode("");
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const element = document.createElement(type);
|
|
229
|
+
for (const [key, value] of Object.entries(props || {})) {
|
|
230
|
+
if (key === "children")
|
|
231
|
+
continue;
|
|
232
|
+
if (key.startsWith("on") && typeof value === "function") {
|
|
233
|
+
const eventName = key.toLowerCase().slice(2);
|
|
234
|
+
const existingHandler = (_a = element.__events) == null ? void 0 : _a[eventName];
|
|
235
|
+
if (existingHandler) {
|
|
236
|
+
element.removeEventListener(eventName, existingHandler);
|
|
237
|
+
}
|
|
238
|
+
element.addEventListener(eventName, value);
|
|
239
|
+
if (!element.__events) {
|
|
240
|
+
element.__events = {};
|
|
241
|
+
}
|
|
242
|
+
element.__events[eventName] = value;
|
|
243
|
+
} else if (key === "style" && typeof value === "object") {
|
|
244
|
+
Object.assign(element.style, value);
|
|
245
|
+
} else if (key === "className") {
|
|
246
|
+
element.setAttribute("class", String(value));
|
|
247
|
+
} else if (key !== "key" && key !== "ref") {
|
|
248
|
+
element.setAttribute(key, String(value));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const children = props == null ? void 0 : props.children;
|
|
252
|
+
if (children != null) {
|
|
253
|
+
const childArray = Array.isArray(children) ? children.flat() : [children];
|
|
254
|
+
for (const child of childArray) {
|
|
255
|
+
const childNode = await createElement(child);
|
|
256
|
+
element.appendChild(childNode);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return element;
|
|
260
|
+
}
|
|
261
|
+
return document.createTextNode(String(vnode));
|
|
262
|
+
}
|
|
263
|
+
var isHydrating = false;
|
|
264
|
+
async function hydrate(element, container) {
|
|
265
|
+
isHydrating = true;
|
|
266
|
+
try {
|
|
267
|
+
await render(element, container);
|
|
268
|
+
} finally {
|
|
269
|
+
isHydrating = false;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
async function render(element, container) {
|
|
273
|
+
console.log("Rendering to:", container.id);
|
|
274
|
+
batchUpdates(async () => {
|
|
275
|
+
const rendererId = prepareRender();
|
|
276
|
+
try {
|
|
277
|
+
setRenderCallback(render, element, container);
|
|
278
|
+
const domNode = await createElement(element);
|
|
279
|
+
if (!isHydrating) {
|
|
280
|
+
container.innerHTML = "";
|
|
281
|
+
}
|
|
282
|
+
container.appendChild(domNode);
|
|
283
|
+
} finally {
|
|
284
|
+
finishRender();
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
var server = {
|
|
289
|
+
async getServer() {
|
|
290
|
+
throw new Error("Server module can only be used in Node.js environment");
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
|
|
1
294
|
// src/wasm.ts
|
|
2
295
|
async function loadGoWasm(wasmUrl, options = {}) {
|
|
3
296
|
if (typeof window === "undefined") {
|
|
@@ -86,11 +379,124 @@ function useGoWasm(wasmUrl, options = {}) {
|
|
|
86
379
|
getFunctions: getWasmFunctions
|
|
87
380
|
};
|
|
88
381
|
}
|
|
382
|
+
|
|
383
|
+
// src/browser.ts
|
|
384
|
+
var safeJsonParse = (json, fallback) => {
|
|
385
|
+
try {
|
|
386
|
+
return JSON.parse(json);
|
|
387
|
+
} catch {
|
|
388
|
+
return fallback;
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
var generateToken = (length = 32) => {
|
|
392
|
+
const array = new Uint8Array(length);
|
|
393
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
|
|
394
|
+
crypto.getRandomValues(array);
|
|
395
|
+
} else {
|
|
396
|
+
for (let i = 0; i < array.length; i++) {
|
|
397
|
+
array[i] = Math.floor(Math.random() * 256);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return Array.from(array, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
401
|
+
};
|
|
402
|
+
var generateDocument = (content, options = {}) => `<!DOCTYPE html><html><head><title>${options.title || "App"}</title></head><body>${content}</body></html>`;
|
|
403
|
+
var generateErrorPage = (code, message) => `<div>Error ${code}: ${message}</div>`;
|
|
404
|
+
var generateLoadingPage = (message = "Loading...") => `<div>${message}</div>`;
|
|
405
|
+
var renderToString = (component) => {
|
|
406
|
+
try {
|
|
407
|
+
if (typeof component === "function") {
|
|
408
|
+
const result = component();
|
|
409
|
+
return typeof result === "string" ? result : String(result || "");
|
|
410
|
+
}
|
|
411
|
+
return String(component || "");
|
|
412
|
+
} catch (error) {
|
|
413
|
+
return "<div>Error rendering component</div>";
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
var createServer = () => {
|
|
417
|
+
throw new Error("createServer is not available in browser environment");
|
|
418
|
+
};
|
|
419
|
+
var createDevServer = () => {
|
|
420
|
+
throw new Error("createDevServer is not available in browser environment");
|
|
421
|
+
};
|
|
422
|
+
var createProductionServer = () => {
|
|
423
|
+
throw new Error("createProductionServer is not available in browser environment");
|
|
424
|
+
};
|
|
425
|
+
var BaraqexServer = null;
|
|
426
|
+
var Database = null;
|
|
427
|
+
var AuthService = null;
|
|
428
|
+
var ApiRouter = null;
|
|
429
|
+
var requestLogger = null;
|
|
430
|
+
var errorHandler = null;
|
|
431
|
+
var notFoundHandler = null;
|
|
432
|
+
var rateLimit = null;
|
|
433
|
+
var initNodeWasm = null;
|
|
434
|
+
var loadGoWasmFromFile = null;
|
|
435
|
+
var hashString = null;
|
|
436
|
+
var getPagination = null;
|
|
437
|
+
var sendSuccess = null;
|
|
438
|
+
var sendError = null;
|
|
439
|
+
var validateFields = null;
|
|
440
|
+
var validateFileUpload = null;
|
|
441
|
+
var getEnvironmentInfo = null;
|
|
442
|
+
var isDirectoryEmpty = null;
|
|
443
|
+
var ensureDirectory = null;
|
|
444
|
+
var writeJsonFile = null;
|
|
445
|
+
var readJsonFile = null;
|
|
446
|
+
var baraqexRenderToString = null;
|
|
447
|
+
var renderComponent = null;
|
|
448
|
+
console.log("Baraqex - Browser build loaded");
|
|
89
449
|
export {
|
|
450
|
+
ApiRouter,
|
|
451
|
+
AuthService,
|
|
452
|
+
BaraqexServer,
|
|
453
|
+
Database,
|
|
454
|
+
Fragment,
|
|
455
|
+
baraqexRenderToString,
|
|
456
|
+
batchUpdates,
|
|
90
457
|
callWasmFunction,
|
|
458
|
+
createContext,
|
|
459
|
+
createDevServer,
|
|
460
|
+
createProductionServer,
|
|
461
|
+
createServer,
|
|
462
|
+
ensureDirectory,
|
|
463
|
+
errorHandler,
|
|
464
|
+
generateDocument,
|
|
465
|
+
generateErrorPage,
|
|
466
|
+
generateLoadingPage,
|
|
467
|
+
generateToken,
|
|
468
|
+
getEnvironmentInfo,
|
|
469
|
+
getPagination,
|
|
91
470
|
getWasmFunctions,
|
|
471
|
+
hashString,
|
|
472
|
+
hydrate,
|
|
473
|
+
initNodeWasm,
|
|
474
|
+
isDirectoryEmpty,
|
|
92
475
|
isWasmReady,
|
|
476
|
+
jsx,
|
|
477
|
+
jsx as jsxs,
|
|
93
478
|
loadGoWasm,
|
|
94
|
-
|
|
479
|
+
loadGoWasmFromFile,
|
|
480
|
+
notFoundHandler,
|
|
481
|
+
rateLimit,
|
|
482
|
+
readJsonFile,
|
|
483
|
+
render,
|
|
484
|
+
renderComponent,
|
|
485
|
+
renderToString,
|
|
486
|
+
requestLogger,
|
|
487
|
+
safeJsonParse,
|
|
488
|
+
sendError,
|
|
489
|
+
sendSuccess,
|
|
490
|
+
server,
|
|
491
|
+
useContext,
|
|
492
|
+
useEffect,
|
|
493
|
+
useErrorBoundary,
|
|
494
|
+
useGoWasm,
|
|
495
|
+
useMemo,
|
|
496
|
+
useRef,
|
|
497
|
+
useState,
|
|
498
|
+
validateFields,
|
|
499
|
+
validateFileUpload,
|
|
500
|
+
writeJsonFile
|
|
95
501
|
};
|
|
96
502
|
//# sourceMappingURL=browser.js.map
|
package/dist/browser.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/wasm.ts"],
|
|
4
|
-
"sourcesContent": ["/**\r\n * WebAssembly integration for Frontend Hamroun\r\n * Works in both browser and Node.js environments\r\n */\r\n\r\nexport interface GoWasmOptions {\r\n debug?: boolean;\r\n goWasmPath?: string;\r\n importObject?: any;\r\n onLoad?: (instance: GoWasmInstance) => void;\r\n}\r\n\r\nexport interface GoWasmInstance {\r\n instance: WebAssembly.Instance;\r\n module: WebAssembly.Module;\r\n exports: WebAssembly.Exports;\r\n functions: Record<string, Function>;\r\n}\r\n\r\n/**\r\n * Load Go WASM module in the browser (like your working frontend code)\r\n */\r\nexport async function loadGoWasm(\r\n wasmUrl: string,\r\n options: GoWasmOptions = {}\r\n): Promise<GoWasmInstance> {\r\n if (typeof window === 'undefined') {\r\n throw new Error('loadGoWasm() is for browser use only. Use loadGoWasmFromFile() in Node.js.');\r\n }\r\n\r\n try {\r\n // Check if Go WASM runtime is available (like your frontend code)\r\n if (!window.Go) {\r\n throw new Error('Go WASM runtime not available. Make sure wasm_exec.js is loaded.');\r\n }\r\n\r\n if (options.debug) {\r\n console.log('[WASM] Loading WASM from:', wasmUrl);\r\n }\r\n\r\n // Fetch the WASM file (exactly like your frontend code)\r\n const response = await fetch(wasmUrl);\r\n \r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch WASM file: ${response.status}`);\r\n }\r\n\r\n const wasmBytes = await response.arrayBuffer();\r\n \r\n // Initialize Go runtime (exactly like your frontend code)\r\n const go = new window.Go();\r\n const wasmModule = await WebAssembly.instantiate(wasmBytes, go.importObject);\r\n \r\n // Run the Go program (exactly like your frontend code)\r\n go.run(wasmModule.instance);\r\n \r\n // Wait a bit for Go functions to be registered (like your frontend code)\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n \r\n if (options.debug) {\r\n console.log('[WASM] Go program started, checking for registered functions...');\r\n }\r\n\r\n // Extract exported functions from global scope (like your frontend code)\r\n const functions: Record<string, Function> = {};\r\n \r\n // Look for Go functions in global scope\r\n for (const key in window) {\r\n if (typeof window[key] === 'function' && key.startsWith('go')) {\r\n functions[key] = window[key] as Function;\r\n if (options.debug) {\r\n console.log(`[WASM] Found function: ${key}`);\r\n }\r\n }\r\n }\r\n\r\n const wasmInstance: GoWasmInstance = {\r\n instance: wasmModule.instance,\r\n module: wasmModule,\r\n exports: wasmModule.instance.exports,\r\n functions\r\n };\r\n\r\n if (options.onLoad) {\r\n options.onLoad(wasmInstance);\r\n }\r\n\r\n if (options.debug) {\r\n console.log(`[WASM] Module loaded successfully with ${Object.keys(functions).length} functions`);\r\n }\r\n\r\n return wasmInstance;\r\n\r\n } catch (error) {\r\n console.error('[WASM] Error loading Go WASM module:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Call a Go WASM function (like your frontend code's callWasmFunction)\r\n */\r\nexport function callWasmFunction(funcName: string, ...args: any[]): any {\r\n if (typeof window === 'undefined') {\r\n throw new Error('callWasmFunction() is for browser use only.');\r\n }\r\n\r\n const func = (window as any)[funcName];\r\n if (typeof func !== 'function') {\r\n throw new Error(`Function ${funcName} not found. Make sure the WASM module is loaded.`);\r\n }\r\n \r\n return func(...args);\r\n}\r\n\r\n/**\r\n * Check if Go WASM is ready (like your frontend code's wasmReady state)\r\n */\r\nexport function isWasmReady(): boolean {\r\n if (typeof window === 'undefined') {\r\n return false;\r\n }\r\n\r\n // Check if Go runtime is available and at least one Go function exists\r\n return !!(window.Go && Object.keys(window).some(key => \r\n key.startsWith('go') && typeof window[key] === 'function'\r\n ));\r\n}\r\n\r\n/**\r\n * Get all available Go WASM functions\r\n */\r\nexport function getWasmFunctions(): string[] {\r\n if (typeof window === 'undefined') {\r\n return [];\r\n }\r\n\r\n return Object.keys(window).filter(key => \r\n key.startsWith('go') && typeof window[key] === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Hook for React components (like your frontend code's useEffect pattern)\r\n */\r\nexport function useGoWasm(wasmUrl: string, options: GoWasmOptions = {}) {\r\n if (typeof window === 'undefined') {\r\n throw new Error('useGoWasm() is for browser use only.');\r\n }\r\n\r\n // This would need to be implemented as a React hook in frontend-hamroun\r\n // For now, return the basic functionality\r\n return {\r\n loadWasm: () => loadGoWasm(wasmUrl, options),\r\n callFunction: callWasmFunction,\r\n isReady: isWasmReady,\r\n getFunctions: getWasmFunctions\r\n };\r\n}\r\n\r\n// Browser-specific type declarations\r\ndeclare global {\r\n interface Window {\r\n Go: new () => {\r\n importObject: any;\r\n run: (instance: WebAssembly.Instance) => void;\r\n };\r\n [key: string]: any;\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": ";
|
|
6
|
-
"names": []
|
|
3
|
+
"sources": ["../node_modules/frontend-hamroun/src/batch.ts", "../node_modules/frontend-hamroun/src/hooks.ts", "../node_modules/frontend-hamroun/src/context.ts", "../node_modules/frontend-hamroun/src/jsx-runtime.ts", "../node_modules/frontend-hamroun/src/renderer.ts", "../node_modules/frontend-hamroun/src/server-renderer.ts", "../node_modules/frontend-hamroun/src/index.client.ts", "../src/wasm.ts", "../src/browser.ts"],
|
|
4
|
+
"sourcesContent": ["export let isBatching = false;\r\nconst queue: Function[] = [];\r\n\r\nexport function batchUpdates(fn: Function) {\r\n if (isBatching) {\r\n queue.push(fn);\r\n return;\r\n }\r\n\r\n isBatching = true;\r\n try {\r\n fn();\r\n while (queue.length > 0) {\r\n const nextFn = queue.shift();\r\n nextFn?.();\r\n }\r\n } finally {\r\n isBatching = false;\r\n }\r\n}\r\n\r\nexport function getIsBatching() {\r\n return isBatching;\r\n}\r\n", "import { createElement } from './jsx-runtime';\r\nimport { batchUpdates, isBatching } from './batch';\r\nimport { diff } from './vdom';\r\n\r\nlet currentRender: number = 0;\r\nconst states = new Map<number, any[]>();\r\nconst stateIndices = new Map<number, number>();\r\nconst effects = new Map<number, Effect[]>();\r\nconst memos = new Map<number, { value: any; deps: any[] }[]>();\r\nconst refs = new Map<number, any[]>();\r\n\r\ninterface Effect {\r\n cleanup?: () => void;\r\n deps?: any[];\r\n}\r\n\r\n// Add at the top with other declarations\r\nlet globalRenderCallback: ((element: any, container: HTMLElement) => void) | null = null;\r\nlet globalContainer: HTMLElement | null = null;\r\nlet currentElement: any = null;\r\n\r\nconst isServer = typeof window === 'undefined';\r\nconst serverStates = new Map<number, any>();\r\n\r\nexport function setRenderCallback(\r\n callback: (element: any, container: HTMLElement) => void,\r\n element: any,\r\n container: HTMLElement\r\n) {\r\n globalRenderCallback = callback;\r\n globalContainer = container;\r\n currentElement = element;\r\n}\r\n\r\nexport function prepareRender() {\r\n currentRender++;\r\n stateIndices.set(currentRender, 0);\r\n return currentRender;\r\n}\r\n\r\nexport function finishRender() {\r\n if (isServer) {\r\n serverStates.delete(currentRender);\r\n }\r\n currentRender = 0;\r\n}\r\n\r\nexport function useState<T>(initial: T): [T, (value: T | ((prev: T) => T)) => void] {\r\n if (!currentRender) {\r\n throw new Error('useState must be called within a render');\r\n }\r\n\r\n if (isServer) {\r\n // Server-side state handling\r\n if (!serverStates.has(currentRender)) {\r\n serverStates.set(currentRender, new Map());\r\n }\r\n const componentState = serverStates.get(currentRender)!;\r\n const index = stateIndices.get(currentRender) || 0;\r\n \r\n if (!componentState.has(index)) {\r\n componentState.set(index, initial);\r\n }\r\n\r\n const state = componentState.get(index);\r\n const setState = (newValue: T | ((prev: T) => T)) => {\r\n // No-op for server-side\r\n };\r\n\r\n stateIndices.set(currentRender, index + 1);\r\n return [state, setState];\r\n }\r\n\r\n if (!states.has(currentRender)) {\r\n states.set(currentRender, []);\r\n }\r\n\r\n const componentStates = states.get(currentRender)!;\r\n const index = stateIndices.get(currentRender)!;\r\n \r\n if (index >= componentStates.length) {\r\n componentStates.push(initial);\r\n }\r\n\r\n const state = componentStates[index];\r\n const setState = (newValue: T | ((prev: T) => T)) => {\r\n const nextValue = typeof newValue === 'function' \r\n ? (newValue as Function)(componentStates[index])\r\n : newValue;\r\n\r\n if (componentStates[index] === nextValue) return; // Skip if value hasn't changed\r\n \r\n componentStates[index] = nextValue;\r\n \r\n if (isBatching) {\r\n batchUpdates(() => rerender(currentRender));\r\n } else {\r\n rerender(currentRender);\r\n }\r\n };\r\n\r\n stateIndices.set(currentRender, index + 1);\r\n return [state, setState];\r\n}\r\n\r\nexport function useEffect(callback: () => (() => void) | void, deps?: any[]) {\r\n if (!currentRender) throw new Error('useEffect must be called within a render');\r\n \r\n const effectIndex = stateIndices.get(currentRender)!;\r\n \r\n if (!effects.has(currentRender)) {\r\n effects.set(currentRender, []);\r\n }\r\n\r\n const componentEffects = effects.get(currentRender)!;\r\n const prevEffect = componentEffects[effectIndex];\r\n \r\n // Run effect if deps changed\r\n if (!prevEffect || !deps || !prevEffect.deps || \r\n deps.some((dep, i) => dep !== prevEffect.deps![i])) {\r\n \r\n // Cleanup previous effect\r\n if (prevEffect?.cleanup) {\r\n prevEffect.cleanup();\r\n }\r\n\r\n // Schedule new effect\r\n queueMicrotask(() => {\r\n const cleanup = callback() || undefined;\r\n componentEffects[effectIndex] = { cleanup: cleanup, deps };\r\n });\r\n }\r\n \r\n stateIndices.set(currentRender, effectIndex + 1);\r\n}\r\n\r\nexport function useMemo<T>(factory: () => T, deps: any[]): T {\r\n if (!currentRender) throw new Error('useMemo must be called within a render');\r\n \r\n const memoIndex = stateIndices.get(currentRender)!;\r\n \r\n if (!memos.has(currentRender)) {\r\n memos.set(currentRender, []);\r\n }\r\n\r\n const componentMemos = memos.get(currentRender)!;\r\n const prevMemo = componentMemos[memoIndex];\r\n \r\n if (!prevMemo || (deps && deps.some((dep, i) => !Object.is(dep, prevMemo.deps[i])))) {\r\n const value = factory();\r\n componentMemos[memoIndex] = { value, deps };\r\n stateIndices.set(currentRender, memoIndex + 1);\r\n return value;\r\n }\r\n\r\n stateIndices.set(currentRender, memoIndex + 1);\r\n return prevMemo.value;\r\n}\r\n\r\nexport function useRef<T>(initial: T) {\r\n if (!currentRender) throw new Error('useRef must be called within a render');\r\n \r\n const refIndex = stateIndices.get(currentRender)!;\r\n \r\n if (!refs.has(currentRender)) {\r\n refs.set(currentRender, []);\r\n }\r\n\r\n const componentRefs = refs.get(currentRender)!;\r\n if (refIndex >= componentRefs.length) {\r\n // Initialize with an object that has a current property\r\n const ref = { current: initial };\r\n componentRefs.push(ref);\r\n stateIndices.set(currentRender, refIndex + 1);\r\n return ref;\r\n }\r\n\r\n const ref = componentRefs[refIndex];\r\n stateIndices.set(currentRender, refIndex + 1);\r\n return ref;\r\n}\r\n\r\n// Add a map to track component DOM nodes\r\nconst componentNodes = new Map<Function, Node>();\r\n\r\nasync function rerender(rendererId: number) {\r\n try {\r\n // Clean up effects\r\n const componentEffects = effects.get(rendererId);\r\n if (componentEffects) {\r\n componentEffects.forEach(effect => {\r\n if (effect.cleanup) effect.cleanup();\r\n });\r\n effects.set(rendererId, []);\r\n }\r\n\r\n if (globalRenderCallback && globalContainer && currentElement) {\r\n await globalRenderCallback(currentElement, globalContainer);\r\n }\r\n } catch (error) {\r\n console.error('Error during rerender:', error);\r\n }\r\n}\r\n\r\n// Add new hook for error boundaries\r\nexport function useErrorBoundary(): [Error | null, () => void] {\r\n const [error, setError] = useState<Error | null>(null);\r\n return [error, () => setError(null)];\r\n}\r\n\r\n// Remove withHooks export\r\n", "\r\n\r\nconst contexts = new Map<symbol, any>();\r\nlet currentRender: Function | null = null;\r\n\r\nexport interface Context<T> {\r\n Provider: (props: { value: T; children?: any }) => any;\r\n Consumer: (props: { children: (value: T) => any }) => any;\r\n _id: symbol;\r\n useSelector: <S>(selector: (state: T) => S) => S;\r\n}\r\n\r\nexport function createContext<T>(defaultValue: T): Context<T> {\r\n const context = {\r\n Provider: ({ value, children }: { value: T, children?: any }) => {\r\n return children;\r\n },\r\n Consumer: ({ children }: { children: (value: T) => any }) => {\r\n return children(defaultValue);\r\n },\r\n _id: Symbol(),\r\n useSelector: <S>(selector: (state: T) => S) => {\r\n return selector(defaultValue);\r\n }\r\n };\r\n\r\n return context;\r\n}\r\n\r\nexport function useContext<T>(context: any): T {\r\n return context;\r\n}\r\n", "import type { Component } from './component';\r\n\r\ninterface VNode {\r\n type: string | Function;\r\n props: Record<string, any>;\r\n}\r\n\r\nfunction jsx(type: string | Function, props: any): VNode {\r\n console.log('JSX Transform:', { type, props });\r\n const processedProps = { ...props };\r\n \r\n // Handle children properly\r\n if (arguments.length > 2) {\r\n processedProps.children = Array.prototype.slice.call(arguments, 2);\r\n }\r\n \r\n return { type, props: processedProps };\r\n}\r\n\r\nconst Fragment = ({ children }: { children: any }) => children;\r\n\r\nasync function createElement(vnode: VNode | any): Promise<Node> {\r\n console.log('Creating element from:', vnode);\r\n\r\n // Handle primitives and null\r\n if (vnode == null) {\r\n return document.createTextNode('');\r\n }\r\n \r\n if (typeof vnode === 'boolean') {\r\n return document.createTextNode('');\r\n }\r\n\r\n if (typeof vnode === 'number' || typeof vnode === 'string') {\r\n return document.createTextNode(String(vnode));\r\n }\r\n\r\n // Handle arrays\r\n if (Array.isArray(vnode)) {\r\n const fragment = document.createDocumentFragment();\r\n for (const child of vnode) {\r\n const node = await createElement(child);\r\n fragment.appendChild(node);\r\n }\r\n return fragment;\r\n }\r\n\r\n // Handle VNode\r\n if ('type' in vnode && vnode.props !== undefined) {\r\n const { type, props } = vnode;\r\n \r\n // Handle function components\r\n if (typeof type === 'function') {\r\n try {\r\n const result = await type(props || {});\r\n const node = await createElement(result);\r\n if (node instanceof Element) {\r\n node.setAttribute('data-component-id', type.name || type.toString());\r\n }\r\n return node;\r\n } catch (error) {\r\n console.error('Error rendering component:', error);\r\n return document.createTextNode('');\r\n }\r\n }\r\n\r\n // Create DOM element\r\n const element = document.createElement(type as string);\r\n \r\n // Handle props\r\n for (const [key, value] of Object.entries(props || {})) {\r\n if (key === 'children') continue;\r\n if (key.startsWith('on') && typeof value === 'function') {\r\n const eventName = key.toLowerCase().slice(2);\r\n // Remove existing event listener if any\r\n const existingHandler = (element as any).__events?.[eventName];\r\n if (existingHandler) {\r\n element.removeEventListener(eventName, existingHandler);\r\n }\r\n \r\n // Add new event listener\r\n element.addEventListener(eventName, value as EventListener);\r\n if (!(element as any).__events) {\r\n (element as any).__events = {};\r\n }\r\n (element as any).__events[eventName] = value;\r\n } else if (key === 'style' && typeof value === 'object') {\r\n Object.assign(element.style, value);\r\n } else if (key === 'className') {\r\n element.setAttribute('class', String(value));\r\n } else if (key !== 'key' && key !== 'ref') {\r\n element.setAttribute(key, String(value));\r\n }\r\n }\r\n\r\n // Handle children\r\n const children = props?.children;\r\n if (children != null) {\r\n const childArray = Array.isArray(children) ? children.flat() : [children];\r\n for (const child of childArray) {\r\n const childNode = await createElement(child);\r\n element.appendChild(childNode);\r\n }\r\n }\r\n\r\n return element;\r\n }\r\n\r\n // Handle other objects by converting to string\r\n return document.createTextNode(String(vnode));\r\n}\r\n\r\n// Export named functions and aliases without duplicates\r\nexport {\r\n jsx,\r\n jsx as jsxs,\r\n jsx as jsxDEV,\r\n Fragment,\r\n createElement\r\n};\r\n\r\n// Named exports object\r\nconst jsxRuntime = {\r\n jsx,\r\n jsxs: jsx,\r\n jsxDEV: jsx,\r\n Fragment,\r\n createElement\r\n};\r\n\r\nexport default jsxRuntime;\r\n", "import { createElement } from './jsx-runtime';\r\nimport { prepareRender, finishRender, setRenderCallback } from './hooks';\r\nimport { batchUpdates } from './batch';\r\n\r\nlet isHydrating = false;\r\n\r\nexport async function hydrate(element: any, container: HTMLElement) {\r\n isHydrating = true;\r\n try {\r\n await render(element, container);\r\n } finally {\r\n isHydrating = false;\r\n }\r\n}\r\n\r\nexport async function render(element: any, container: HTMLElement) {\r\n console.log('Rendering to:', container.id);\r\n \r\n batchUpdates(async () => {\r\n const rendererId = prepareRender();\r\n try {\r\n setRenderCallback(render, element, container);\r\n const domNode = await createElement(element);\r\n \r\n if (!isHydrating) {\r\n container.innerHTML = '';\r\n }\r\n container.appendChild(domNode);\r\n \r\n } finally {\r\n finishRender();\r\n }\r\n });\r\n}\r\n", "import { VNode, Component } from './types';\r\nimport { prepareRender, finishRender } from './hooks';\r\n\r\n/**\r\n * Renders a virtual DOM tree to an HTML string\r\n */\r\nexport function renderToString(vnode: VNode): string {\r\n // Reset hook state for this render\r\n prepareRender();\r\n \r\n // Render the tree to HTML\r\n const html = renderNodeToString(vnode);\r\n \r\n // Clean up after rendering\r\n finishRender();\r\n \r\n return html;\r\n}\r\n\r\n/**\r\n * Internal function to convert a virtual node to an HTML string\r\n */\r\nfunction renderNodeToString(vnode: VNode | string | number | boolean | null | undefined): string {\r\n // Handle primitive values\r\n if (vnode === null || vnode === undefined) return '';\r\n if (typeof vnode === 'boolean') return '';\r\n if (typeof vnode === 'number' || typeof vnode === 'string') return escapeHtml(String(vnode));\r\n \r\n // Handle function components\r\n if (typeof vnode.type === 'function') {\r\n const Component = vnode.type as Component;\r\n const renderedNode = Component(vnode.props || {});\r\n return renderNodeToString(renderedNode);\r\n }\r\n \r\n // Handle intrinsic elements (regular HTML tags)\r\n if (typeof vnode.type === 'string') {\r\n const tag = vnode.type;\r\n let attrs = '';\r\n let children = '';\r\n \r\n // Convert props to HTML attributes\r\n if (vnode.props) {\r\n for (const [key, value] of Object.entries(vnode.props)) {\r\n // Skip children prop as we handle it separately\r\n if (key === 'children') continue;\r\n \r\n // Skip event handlers (they start with 'on')\r\n if (key.startsWith('on')) continue;\r\n \r\n // Handle the className prop specially\r\n if (key === 'className') {\r\n attrs += ` class=\"${escapeHtml(value as string)}\"`;\r\n continue;\r\n }\r\n \r\n // Handle other attributes\r\n if (typeof value === 'string' || typeof value === 'number') {\r\n attrs += ` ${key}=\"${escapeHtml(String(value))}\"`;\r\n } else if (value === true) {\r\n // Boolean attributes\r\n attrs += ` ${key}`;\r\n }\r\n }\r\n }\r\n \r\n // Process children\r\n const childrenArray = (vnode.props?.children) \r\n ? Array.isArray(vnode.props.children) \r\n ? vnode.props.children \r\n : [vnode.props.children]\r\n : [];\r\n \r\n for (const child of childrenArray) {\r\n children += renderNodeToString(child);\r\n }\r\n \r\n // Self-closing tags\r\n const selfClosing = [\r\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\r\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\r\n ];\r\n \r\n if (selfClosing.includes(tag)) {\r\n return `<${tag}${attrs}/>`;\r\n }\r\n \r\n // Regular tags with closing\r\n return `<${tag}${attrs}>${children}</${tag}>`;\r\n }\r\n \r\n // Handle fragments\r\n if (vnode.type === Symbol.for('react.fragment')) {\r\n let fragmentOutput = '';\r\n const children = Array.isArray(vnode.props?.children)\r\n ? vnode.props.children\r\n : vnode.props?.children ? [vnode.props.children] : [];\r\n \r\n for (const child of children) {\r\n fragmentOutput += renderNodeToString(child);\r\n }\r\n \r\n return fragmentOutput;\r\n }\r\n \r\n // Fallback for unknown node types\r\n console.warn('Unknown vnode type:', vnode.type);\r\n return '';\r\n}\r\n\r\n/**\r\n * Escape HTML special characters to prevent XSS\r\n */\r\nfunction escapeHtml(text: string): string {\r\n return text\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''');\r\n}\r\n", "import { createElement } from './jsx-runtime';\r\nimport { prepareRender, finishRender, setRenderCallback } from './hooks';\r\n\r\nexport { \r\n useState, \r\n useEffect, \r\n useMemo, \r\n useRef,\r\n useErrorBoundary \r\n} from './hooks';\r\n\r\nexport { createContext, useContext } from './context';\r\nexport { batchUpdates } from './batch';\r\nexport { jsx, jsxs, Fragment } from './jsx-runtime';\r\nexport { render, hydrate } from './renderer';\r\nexport { renderToString } from './server-renderer';\r\n\r\n// Re-export types for client-side usage\r\nexport type { Context } from './context';\r\nexport type { VNode } from './types';\r\n\r\n// Export server types for type checking\r\nexport type {\r\n Server,\r\n ServerConfig,\r\n User,\r\n DbConfig,\r\n MiddlewareFunction\r\n} from './server-types';\r\n\r\n// Provide placeholder server functionality\r\nexport const server = {\r\n async getServer() {\r\n throw new Error('Server module can only be used in Node.js environment');\r\n }\r\n};\r\n\r\nlet isHydrating = false;\r\n", "/**\r\n * WebAssembly integration for Frontend Hamroun\r\n * Works in both browser and Node.js environments\r\n */\r\n\r\nexport interface GoWasmOptions {\r\n debug?: boolean;\r\n goWasmPath?: string;\r\n importObject?: any;\r\n onLoad?: (instance: GoWasmInstance) => void;\r\n}\r\n\r\nexport interface GoWasmInstance {\r\n instance: WebAssembly.Instance;\r\n module: WebAssembly.Module;\r\n exports: WebAssembly.Exports;\r\n functions: Record<string, Function>;\r\n}\r\n\r\n/**\r\n * Load Go WASM module in the browser (like your working frontend code)\r\n */\r\nexport async function loadGoWasm(\r\n wasmUrl: string,\r\n options: GoWasmOptions = {}\r\n): Promise<GoWasmInstance> {\r\n if (typeof window === 'undefined') {\r\n throw new Error('loadGoWasm() is for browser use only. Use loadGoWasmFromFile() in Node.js.');\r\n }\r\n\r\n try {\r\n // Check if Go WASM runtime is available (like your frontend code)\r\n if (!window.Go) {\r\n throw new Error('Go WASM runtime not available. Make sure wasm_exec.js is loaded.');\r\n }\r\n\r\n if (options.debug) {\r\n console.log('[WASM] Loading WASM from:', wasmUrl);\r\n }\r\n\r\n // Fetch the WASM file (exactly like your frontend code)\r\n const response = await fetch(wasmUrl);\r\n \r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch WASM file: ${response.status}`);\r\n }\r\n\r\n const wasmBytes = await response.arrayBuffer();\r\n \r\n // Initialize Go runtime (exactly like your frontend code)\r\n const go = new window.Go();\r\n const wasmModule = await WebAssembly.instantiate(wasmBytes, go.importObject);\r\n \r\n // Run the Go program (exactly like your frontend code)\r\n go.run(wasmModule.instance);\r\n \r\n // Wait a bit for Go functions to be registered (like your frontend code)\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n \r\n if (options.debug) {\r\n console.log('[WASM] Go program started, checking for registered functions...');\r\n }\r\n\r\n // Extract exported functions from global scope (like your frontend code)\r\n const functions: Record<string, Function> = {};\r\n \r\n // Look for Go functions in global scope\r\n for (const key in window) {\r\n if (typeof window[key] === 'function' && key.startsWith('go')) {\r\n functions[key] = window[key] as Function;\r\n if (options.debug) {\r\n console.log(`[WASM] Found function: ${key}`);\r\n }\r\n }\r\n }\r\n\r\n const wasmInstance: GoWasmInstance = {\r\n instance: wasmModule.instance,\r\n module: wasmModule,\r\n exports: wasmModule.instance.exports,\r\n functions\r\n };\r\n\r\n if (options.onLoad) {\r\n options.onLoad(wasmInstance);\r\n }\r\n\r\n if (options.debug) {\r\n console.log(`[WASM] Module loaded successfully with ${Object.keys(functions).length} functions`);\r\n }\r\n\r\n return wasmInstance;\r\n\r\n } catch (error) {\r\n console.error('[WASM] Error loading Go WASM module:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Call a Go WASM function (like your frontend code's callWasmFunction)\r\n */\r\nexport function callWasmFunction(funcName: string, ...args: any[]): any {\r\n if (typeof window === 'undefined') {\r\n throw new Error('callWasmFunction() is for browser use only.');\r\n }\r\n\r\n const func = (window as any)[funcName];\r\n if (typeof func !== 'function') {\r\n throw new Error(`Function ${funcName} not found. Make sure the WASM module is loaded.`);\r\n }\r\n \r\n return func(...args);\r\n}\r\n\r\n/**\r\n * Check if Go WASM is ready (like your frontend code's wasmReady state)\r\n */\r\nexport function isWasmReady(): boolean {\r\n if (typeof window === 'undefined') {\r\n return false;\r\n }\r\n\r\n // Check if Go runtime is available and at least one Go function exists\r\n return !!(window.Go && Object.keys(window).some(key => \r\n key.startsWith('go') && typeof window[key] === 'function'\r\n ));\r\n}\r\n\r\n/**\r\n * Get all available Go WASM functions\r\n */\r\nexport function getWasmFunctions(): string[] {\r\n if (typeof window === 'undefined') {\r\n return [];\r\n }\r\n\r\n return Object.keys(window).filter(key => \r\n key.startsWith('go') && typeof window[key] === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Hook for React components (like your frontend code's useEffect pattern)\r\n */\r\nexport function useGoWasm(wasmUrl: string, options: GoWasmOptions = {}) {\r\n if (typeof window === 'undefined') {\r\n throw new Error('useGoWasm() is for browser use only.');\r\n }\r\n\r\n // This would need to be implemented as a React hook in frontend-hamroun\r\n // For now, return the basic functionality\r\n return {\r\n loadWasm: () => loadGoWasm(wasmUrl, options),\r\n callFunction: callWasmFunction,\r\n isReady: isWasmReady,\r\n getFunctions: getWasmFunctions\r\n };\r\n}\r\n\r\n// Browser-specific type declarations\r\ndeclare global {\r\n interface Window {\r\n Go: new () => {\r\n importObject: any;\r\n run: (instance: WebAssembly.Instance) => void;\r\n };\r\n [key: string]: any;\r\n }\r\n}\r\n", "/**\r\n * Browser-specific exports for Baraqex\r\n * This file is used when building for the browser\r\n */\r\n\r\n// Re-export everything from frontend-hamroun for browser usage\r\nexport * from 'frontend-hamroun';\r\n\r\n// Export WASM functionality (browser-only functions)\r\nexport { loadGoWasm, callWasmFunction, isWasmReady, getWasmFunctions, useGoWasm } from './wasm.js';\r\nexport type { GoWasmOptions, GoWasmInstance } from './wasm.js';\r\n\r\n// Export safe utilities that work in browser\r\nexport const safeJsonParse = (json: string, fallback: any) => {\r\n try {\r\n return JSON.parse(json);\r\n } catch {\r\n return fallback;\r\n }\r\n};\r\n\r\nexport const generateToken = (length: number = 32) => {\r\n const array = new Uint8Array(length);\r\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\r\n crypto.getRandomValues(array);\r\n } else {\r\n for (let i = 0; i < array.length; i++) {\r\n array[i] = Math.floor(Math.random() * 256);\r\n }\r\n }\r\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\r\n};\r\n\r\n// Browser-safe template utilities\r\nexport const generateDocument = (content: string, options: any = {}) => \r\n `<!DOCTYPE html><html><head><title>${options.title || 'App'}</title></head><body>${content}</body></html>`;\r\n\r\nexport const generateErrorPage = (code: number, message: string) => \r\n `<div>Error ${code}: ${message}</div>`;\r\n\r\nexport const generateLoadingPage = (message: string = 'Loading...') => \r\n `<div>${message}</div>`;\r\n\r\n// Simple renderToString for browser compatibility\r\nexport const renderToString = (component: any): string => {\r\n try {\r\n if (typeof component === 'function') {\r\n const result = component();\r\n return typeof result === 'string' ? result : String(result || '');\r\n }\r\n return String(component || '');\r\n } catch (error) {\r\n return '<div>Error rendering component</div>';\r\n }\r\n};\r\n\r\n// Stub server functions for browser (they will throw if called)\r\nexport const createServer = () => {\r\n throw new Error('createServer is not available in browser environment');\r\n};\r\n\r\nexport const createDevServer = () => {\r\n throw new Error('createDevServer is not available in browser environment');\r\n};\r\n\r\nexport const createProductionServer = () => {\r\n throw new Error('createProductionServer is not available in browser environment');\r\n};\r\n\r\n// Export null stubs for server-only functionality\r\nexport const BaraqexServer = null;\r\nexport const Database = null;\r\nexport const AuthService = null;\r\nexport const ApiRouter = null;\r\nexport const requestLogger = null;\r\nexport const errorHandler = null;\r\nexport const notFoundHandler = null;\r\nexport const rateLimit = null;\r\nexport const initNodeWasm = null;\r\nexport const loadGoWasmFromFile = null;\r\nexport const hashString = null;\r\nexport const getPagination = null;\r\nexport const sendSuccess = null;\r\nexport const sendError = null;\r\nexport const validateFields = null;\r\nexport const validateFileUpload = null;\r\nexport const getEnvironmentInfo = null;\r\nexport const isDirectoryEmpty = null;\r\nexport const ensureDirectory = null;\r\nexport const writeJsonFile = null;\r\nexport const readJsonFile = null;\r\nexport const baraqexRenderToString = null;\r\nexport const renderComponent = null;\r\n\r\nconsole.log('Baraqex - Browser build loaded');\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["index", "state", "setState", "ref"]
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/forms/types.ts"],"names":[],"mappings":""}
|
|
@@ -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":"useWasm.d.ts","sourceRoot":"","sources":["../../../src/frontend/hooks/useWasm.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/frontend/index.ts"],"names":[],"mappings":""}
|