baraqex 1.0.35 → 1.0.37
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/dist/browser.js +635 -0
- package/dist/browser.js.map +7 -0
- package/dist/browser.package.json +4 -0
- package/dist/index.js +2024 -33
- package/dist/index.js.map +7 -1
- package/dist/server/index.js +1357 -432
- package/dist/server/index.js.map +7 -1
- package/dist/server/package.json +4 -0
- package/dist/wasm.js +86 -104
- package/dist/wasm.js.map +7 -1
- package/package.json +102 -86
- package/templates/ssr-template/esbuild.config.js +28 -3
- package/templates/ssr-template/package-lock.json +74 -1035
- package/templates/ssr-template/package.json +1 -0
- package/templates/ssr-template/src/App.tsx +11 -11
- package/templates/ssr-template/src/client.tsx +3 -2
- package/dist/frontend/components/WasmLoader.d.ts +0 -1
- package/dist/frontend/components/WasmLoader.d.ts.map +0 -1
- package/dist/frontend/components/WasmLoader.js +0 -2
- package/dist/frontend/components/WasmLoader.js.map +0 -1
- package/dist/frontend/hooks/useWasm.d.ts +0 -1
- package/dist/frontend/hooks/useWasm.d.ts.map +0 -1
- package/dist/frontend/hooks/useWasm.js +0 -2
- package/dist/frontend/hooks/useWasm.js.map +0 -1
- package/dist/frontend/index.d.ts +0 -1
- package/dist/frontend/index.d.ts.map +0 -1
- package/dist/frontend/index.js +0 -2
- package/dist/frontend/index.js.map +0 -1
- package/dist/index.d.ts +0 -12
- package/dist/index.d.ts.map +0 -1
- package/dist/renderComponent.d.ts +0 -9
- package/dist/renderComponent.d.ts.map +0 -1
- package/dist/renderComponent.js +0 -39
- package/dist/renderComponent.js.map +0 -1
- package/dist/server/api-router.d.ts +0 -16
- package/dist/server/api-router.d.ts.map +0 -1
- package/dist/server/api-router.js +0 -121
- package/dist/server/api-router.js.map +0 -1
- package/dist/server/auth.d.ts +0 -33
- package/dist/server/auth.d.ts.map +0 -1
- package/dist/server/auth.js +0 -74
- package/dist/server/auth.js.map +0 -1
- package/dist/server/database.d.ts +0 -25
- package/dist/server/database.d.ts.map +0 -1
- package/dist/server/database.js +0 -109
- package/dist/server/database.js.map +0 -1
- package/dist/server/index.d.ts +0 -117
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/middleware.d.ts +0 -12
- package/dist/server/middleware.d.ts.map +0 -1
- package/dist/server/middleware.js +0 -46
- package/dist/server/middleware.js.map +0 -1
- package/dist/server/server.d.ts +0 -10
- package/dist/server/server.d.ts.map +0 -1
- package/dist/server/server.js +0 -81
- package/dist/server/server.js.map +0 -1
- package/dist/server/templates.d.ts +0 -31
- package/dist/server/templates.d.ts.map +0 -1
- package/dist/server/templates.js +0 -208
- package/dist/server/templates.js.map +0 -1
- package/dist/server/types.d.ts +0 -67
- package/dist/server/types.d.ts.map +0 -1
- package/dist/server/types.js +0 -2
- package/dist/server/types.js.map +0 -1
- package/dist/server/utils.d.ts +0 -71
- package/dist/server/utils.d.ts.map +0 -1
- package/dist/server/utils.js +0 -165
- package/dist/server/utils.js.map +0 -1
- package/dist/server/wasm.d.ts +0 -29
- package/dist/server/wasm.d.ts.map +0 -1
- package/dist/server/wasm.js +0 -208
- package/dist/server/wasm.js.map +0 -1
- package/dist/server-renderer.d.ts +0 -5
- package/dist/server-renderer.d.ts.map +0 -1
- package/dist/server-renderer.js +0 -27
- package/dist/server-renderer.js.map +0 -1
- package/dist/wasm.d.ts +0 -51
- package/dist/wasm.d.ts.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState, useEffect, useRef, useMemo } from '
|
|
1
|
+
import { useState, useEffect, useRef, useMemo } from 'baraqex/browser';
|
|
2
2
|
|
|
3
3
|
// Custom hooks for better code organization
|
|
4
4
|
function useTimer(initialTime = 0) {
|
|
@@ -10,7 +10,7 @@ function useTimer(initialTime = 0) {
|
|
|
10
10
|
if (!isRunning) {
|
|
11
11
|
setIsRunning(true);
|
|
12
12
|
intervalRef.current = setInterval(() => {
|
|
13
|
-
setTime(prev => prev + 1);
|
|
13
|
+
setTime((prev: number) => prev + 1);
|
|
14
14
|
}, 1000);
|
|
15
15
|
}
|
|
16
16
|
};
|
|
@@ -50,8 +50,8 @@ function useTimer(initialTime = 0) {
|
|
|
50
50
|
function useCounter(initialValue = 0, step = 1) {
|
|
51
51
|
const [count, setCount] = useState(initialValue);
|
|
52
52
|
|
|
53
|
-
const increment = () => setCount(prev => prev + step);
|
|
54
|
-
const decrement = () => setCount(prev => prev - step);
|
|
53
|
+
const increment = () => setCount((prev: number) => prev + step);
|
|
54
|
+
const decrement = () => setCount((prev: number) => prev - step);
|
|
55
55
|
const reset = () => setCount(initialValue);
|
|
56
56
|
const setValue = (value: number | ((prev: number) => number)) => setCount(value);
|
|
57
57
|
|
|
@@ -71,7 +71,7 @@ function useTodos() {
|
|
|
71
71
|
// Ensure text is a string and handle null/undefined
|
|
72
72
|
const textString = String(text || '');
|
|
73
73
|
if (textString.trim()) {
|
|
74
|
-
setTodos(prev => [...prev, {
|
|
74
|
+
setTodos((prev: any) => [...prev, {
|
|
75
75
|
id: Date.now(),
|
|
76
76
|
text: textString.trim(),
|
|
77
77
|
completed: false
|
|
@@ -80,13 +80,13 @@ function useTodos() {
|
|
|
80
80
|
};
|
|
81
81
|
|
|
82
82
|
const toggleTodo = (id: number) => {
|
|
83
|
-
setTodos(prev => prev.map(todo =>
|
|
83
|
+
setTodos((prev: any[]) => prev.map((todo: { id: number; completed: any; }) =>
|
|
84
84
|
todo.id === id ? { ...todo, completed: !todo.completed } : todo
|
|
85
85
|
));
|
|
86
86
|
};
|
|
87
87
|
|
|
88
88
|
const deleteTodo = (id: number) => {
|
|
89
|
-
setTodos(prev => prev.filter(todo => todo.id !== id));
|
|
89
|
+
setTodos((prev: any[]) => prev.filter((todo: { id: number; }) => todo.id !== id));
|
|
90
90
|
};
|
|
91
91
|
|
|
92
92
|
const filteredTodos = useMemo(() => {
|
|
@@ -127,7 +127,7 @@ function useTheme() {
|
|
|
127
127
|
const [theme, setTheme] = useState('light');
|
|
128
128
|
|
|
129
129
|
const toggleTheme = () => {
|
|
130
|
-
setTheme(prev => prev === 'light' ? 'dark' : 'light');
|
|
130
|
+
setTheme((prev: string) => prev === 'light' ? 'dark' : 'light');
|
|
131
131
|
};
|
|
132
132
|
|
|
133
133
|
const themeColors = useMemo(() => {
|
|
@@ -438,7 +438,7 @@ export function App() {
|
|
|
438
438
|
min="1"
|
|
439
439
|
max="10"
|
|
440
440
|
value={step}
|
|
441
|
-
onChange={(e) => setStep(parseInt(e.target.value))}
|
|
441
|
+
onChange={(e: { target: { value: string; }; }) => setStep(parseInt(e.target.value))}
|
|
442
442
|
style={{ width: '100%' }}
|
|
443
443
|
/>
|
|
444
444
|
</div>
|
|
@@ -479,7 +479,7 @@ export function App() {
|
|
|
479
479
|
background: colors.bg,
|
|
480
480
|
color: colors.text
|
|
481
481
|
}}
|
|
482
|
-
onKeyPress={(e) => {
|
|
482
|
+
onKeyPress={(e: { key: string; target: { value: string; }; }) => {
|
|
483
483
|
if (e.key === 'Enter') {
|
|
484
484
|
setValue(parseInt(e.target.value) || 0);
|
|
485
485
|
e.target.value = '';
|
|
@@ -715,7 +715,7 @@ export function App() {
|
|
|
715
715
|
'🎉 No completed todos yet!'}
|
|
716
716
|
</div>
|
|
717
717
|
) : (
|
|
718
|
-
todos.map(todo => (
|
|
718
|
+
todos.map((todo: { id: any; }) => (
|
|
719
719
|
<TodoItem
|
|
720
720
|
key={todo.id}
|
|
721
721
|
todo={todo}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { hydrate, jsx } from 'frontend-hamroun';
|
|
1
|
+
import { hydrate, jsx, render } from 'frontend-hamroun';
|
|
2
2
|
import { App } from './App.js';
|
|
3
3
|
|
|
4
|
-
hydrate(jsx(App, {}), document.getElementById('root')!);
|
|
4
|
+
await hydrate(jsx(App, {}), document.getElementById('root')!);
|
|
5
|
+
await render(jsx(App, {}), document.getElementById('root')!);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=WasmLoader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WasmLoader.d.ts","sourceRoot":"","sources":["../../../src/frontend/components/WasmLoader.tsx"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WasmLoader.js","sourceRoot":"","sources":["../../../src/frontend/components/WasmLoader.tsx"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=useWasm.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useWasm.d.ts","sourceRoot":"","sources":["../../../src/frontend/hooks/useWasm.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useWasm.js","sourceRoot":"","sources":["../../../src/frontend/hooks/useWasm.ts"],"names":[],"mappings":""}
|
package/dist/frontend/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/frontend/index.ts"],"names":[],"mappings":""}
|
package/dist/frontend/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/frontend/index.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export * from 'frontend-hamroun';
|
|
2
|
-
export { generateDocument, generateErrorPage, generateLoadingPage } from './server/templates.js';
|
|
3
|
-
export { safeJsonParse, generateToken, hashString, getPagination, sendSuccess, sendError, validateFields, validateFileUpload, getEnvironmentInfo, isDirectoryEmpty, ensureDirectory, writeJsonFile, readJsonFile } from './server/utils.js';
|
|
4
|
-
export type { ServerConfig, User, DbConfig, MiddlewareFunction } from './server/types.js';
|
|
5
|
-
export { renderToString as baraqexRenderToString } from './server-renderer.js';
|
|
6
|
-
export { requestLogger, errorHandler, notFoundHandler, rateLimit } from './server/middleware.js';
|
|
7
|
-
export { loadGoWasm, callWasmFunction, isWasmReady, getWasmFunctions, useGoWasm } from './wasm.js';
|
|
8
|
-
export type { GoWasmOptions, GoWasmInstance } from './wasm.js';
|
|
9
|
-
export { Server as BaraqexServer } from './server/index.js';
|
|
10
|
-
export { createDevServer, createServer, createProductionServer } from './server/index.js';
|
|
11
|
-
export declare function renderToString(content: any): Promise<string>;
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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,MAAM,sBAAsB,CAAC;AAG/E,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;AAC/D,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAC,eAAe,EAAC,YAAY,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AAGtF,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAa5D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderComponent.d.ts","sourceRoot":"","sources":["../src/renderComponent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAsB,eAAe,CACnC,SAAS,EAAE,GAAG,EACd,KAAK,GAAE,GAAQ,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAiC5D"}
|
package/dist/renderComponent.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Component rendering utilities
|
|
3
|
-
*/
|
|
4
|
-
export async function renderComponent(Component, props = {}) {
|
|
5
|
-
try {
|
|
6
|
-
// Simple component rendering
|
|
7
|
-
let html = '';
|
|
8
|
-
if (typeof Component === 'function') {
|
|
9
|
-
const result = Component(props);
|
|
10
|
-
if (typeof result === 'string') {
|
|
11
|
-
html = result;
|
|
12
|
-
}
|
|
13
|
-
else if (result && typeof result.then === 'function') {
|
|
14
|
-
// Handle async components
|
|
15
|
-
const asyncResult = await result;
|
|
16
|
-
html = typeof asyncResult === 'string' ? asyncResult : String(asyncResult || '');
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
html = String(result || '');
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
html = String(Component || '');
|
|
24
|
-
}
|
|
25
|
-
return {
|
|
26
|
-
html,
|
|
27
|
-
success: true
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
console.error('Error rendering component:', error);
|
|
32
|
-
return {
|
|
33
|
-
html: '<div>Error rendering component</div>',
|
|
34
|
-
success: false,
|
|
35
|
-
error: error instanceof Error ? error : new Error('Unknown error')
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=renderComponent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"renderComponent.js","sourceRoot":"","sources":["../src/renderComponent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAc,EACd,QAAa,EAAE;IAEf,IAAI,CAAC;QACH,6BAA6B;QAC7B,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAEhC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;iBAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACvD,0BAA0B;gBAC1B,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC;gBACjC,IAAI,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;QAED,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO;YACL,IAAI,EAAE,sCAAsC;YAC5C,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC;SACnE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Router } from 'express';
|
|
2
|
-
import { AuthService } from './auth.js';
|
|
3
|
-
export declare class ApiRouter {
|
|
4
|
-
router: Router;
|
|
5
|
-
private apiDir;
|
|
6
|
-
private auth;
|
|
7
|
-
constructor(apiDir: string, auth?: AuthService | null);
|
|
8
|
-
private setupRoutes;
|
|
9
|
-
private scanDirectory;
|
|
10
|
-
private isRouteFile;
|
|
11
|
-
private getRoutePath;
|
|
12
|
-
private registerRoute;
|
|
13
|
-
private isValidRouteModule;
|
|
14
|
-
private wrapHandler;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=api-router.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-router.d.ts","sourceRoot":"","sources":["../../src/server/api-router.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,MAAM,EAAmC,MAAM,SAAS,CAAC;AAG3E,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAmBxC,qBAAa,SAAS;IACb,MAAM,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAqB;gBAErB,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,WAAW,GAAG,IAAW;IAQ3D,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;YAiBN,aAAa;IAuE3B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,WAAW;CASpB"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import express from 'express';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import fs from 'fs';
|
|
4
|
-
import { pathToFileURL } from 'url';
|
|
5
|
-
export class ApiRouter {
|
|
6
|
-
constructor(apiDir, auth = null) {
|
|
7
|
-
this.router = express.Router();
|
|
8
|
-
this.apiDir = path.resolve(process.cwd(), apiDir);
|
|
9
|
-
this.auth = auth;
|
|
10
|
-
this.setupRoutes();
|
|
11
|
-
}
|
|
12
|
-
setupRoutes() {
|
|
13
|
-
if (!fs.existsSync(this.apiDir)) {
|
|
14
|
-
console.log(`API directory not found: ${this.apiDir}`);
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
this.scanDirectory(this.apiDir, '');
|
|
18
|
-
}
|
|
19
|
-
scanDirectory(dirPath, routePrefix) {
|
|
20
|
-
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
21
|
-
for (const entry of entries) {
|
|
22
|
-
const fullPath = path.join(dirPath, entry.name);
|
|
23
|
-
if (entry.isDirectory()) {
|
|
24
|
-
// Recursively scan subdirectories
|
|
25
|
-
this.scanDirectory(fullPath, `${routePrefix}/${entry.name}`);
|
|
26
|
-
}
|
|
27
|
-
else if (this.isRouteFile(entry.name)) {
|
|
28
|
-
// Process route file
|
|
29
|
-
const routePath = this.getRoutePath(entry.name, routePrefix);
|
|
30
|
-
this.registerRoute(fullPath, routePath);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
isRouteFile(filename) {
|
|
35
|
-
return filename.endsWith('.js') ||
|
|
36
|
-
filename.endsWith('.ts') ||
|
|
37
|
-
filename.endsWith('.mjs');
|
|
38
|
-
}
|
|
39
|
-
getRoutePath(filename, routePrefix) {
|
|
40
|
-
// Remove extension and handle special names
|
|
41
|
-
const baseName = path.basename(filename, path.extname(filename));
|
|
42
|
-
if (baseName === 'index') {
|
|
43
|
-
return routePrefix || '/';
|
|
44
|
-
}
|
|
45
|
-
// Handle dynamic routes [param]
|
|
46
|
-
const paramMatch = baseName.match(/^\[(.+)\]$/);
|
|
47
|
-
if (paramMatch) {
|
|
48
|
-
return `${routePrefix}/:${paramMatch[1]}`;
|
|
49
|
-
}
|
|
50
|
-
return `${routePrefix}/${baseName}`;
|
|
51
|
-
}
|
|
52
|
-
async registerRoute(filePath, routePath) {
|
|
53
|
-
try {
|
|
54
|
-
// Ensure we have an absolute path and normalize it
|
|
55
|
-
const absolutePath = path.isAbsolute(filePath) ? filePath : path.resolve(filePath);
|
|
56
|
-
// Convert to proper file:// URL for Windows
|
|
57
|
-
const fileUrl = pathToFileURL(absolutePath).href;
|
|
58
|
-
if (process.platform === 'win32') {
|
|
59
|
-
// Add timestamp to force reload on Windows
|
|
60
|
-
const urlWithTimestamp = `${fileUrl}?t=${Date.now()}`;
|
|
61
|
-
// Dynamic import the route file
|
|
62
|
-
const routeModule = await import(urlWithTimestamp);
|
|
63
|
-
if (!this.isValidRouteModule(routeModule)) {
|
|
64
|
-
console.warn(`Invalid route module: ${filePath}`);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
console.log(`Registering API route: ${routePath}`);
|
|
68
|
-
// Register middleware if any
|
|
69
|
-
const middleware = routeModule.middleware || [];
|
|
70
|
-
// Register HTTP methods
|
|
71
|
-
for (const method of ['get', 'post', 'put', 'delete', 'patch', 'options']) {
|
|
72
|
-
const handler = routeModule[method];
|
|
73
|
-
if (typeof handler === 'function') {
|
|
74
|
-
const routerMethod = this.router[method];
|
|
75
|
-
routerMethod.call(this.router, routePath, ...middleware, this.wrapHandler(handler));
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
// Non-Windows platforms
|
|
81
|
-
const routeModule = await import(fileUrl);
|
|
82
|
-
if (!this.isValidRouteModule(routeModule)) {
|
|
83
|
-
console.warn(`Invalid route module: ${filePath}`);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
console.log(`Registering API route: ${routePath}`);
|
|
87
|
-
// Register middleware if any
|
|
88
|
-
const middleware = routeModule.middleware || [];
|
|
89
|
-
// Register HTTP methods
|
|
90
|
-
for (const method of ['get', 'post', 'put', 'delete', 'patch', 'options']) {
|
|
91
|
-
const handler = routeModule[method];
|
|
92
|
-
if (typeof handler === 'function') {
|
|
93
|
-
const routerMethod = this.router[method];
|
|
94
|
-
routerMethod.call(this.router, routePath, ...middleware, this.wrapHandler(handler));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
console.error(`Error registering route (${filePath}):`, error);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
isValidRouteModule(module) {
|
|
104
|
-
if (!module)
|
|
105
|
-
return false;
|
|
106
|
-
// Check if at least one HTTP method handler is defined
|
|
107
|
-
return ['get', 'post', 'put', 'delete', 'patch', 'options']
|
|
108
|
-
.some(method => typeof module[method] === 'function');
|
|
109
|
-
}
|
|
110
|
-
wrapHandler(handler) {
|
|
111
|
-
return async (req, res, next) => {
|
|
112
|
-
try {
|
|
113
|
-
await handler(req, res, next);
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
next(error);
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=api-router.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-router.js","sourceRoot":"","sources":["../../src/server/api-router.ts"],"names":[],"mappings":"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"}
|
package/dist/server/auth.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { SignOptions } from 'jsonwebtoken';
|
|
2
|
-
import { Request, Response, NextFunction } from 'express';
|
|
3
|
-
export interface AuthConfig {
|
|
4
|
-
secret: string;
|
|
5
|
-
expiresIn?: SignOptions['expiresIn'];
|
|
6
|
-
}
|
|
7
|
-
export interface User {
|
|
8
|
-
id: string | number;
|
|
9
|
-
username: string;
|
|
10
|
-
password?: string;
|
|
11
|
-
email?: string;
|
|
12
|
-
roles?: string[];
|
|
13
|
-
[key: string]: any;
|
|
14
|
-
}
|
|
15
|
-
export declare class AuthService {
|
|
16
|
-
private config;
|
|
17
|
-
constructor(config: AuthConfig);
|
|
18
|
-
hashPassword(password: string): Promise<string>;
|
|
19
|
-
comparePasswords(password: string, hashedPassword: string): Promise<boolean>;
|
|
20
|
-
generateToken(user: Omit<User, 'password'>): string;
|
|
21
|
-
verifyToken(token: string): any;
|
|
22
|
-
initialize(): (req: Request & {
|
|
23
|
-
user?: any;
|
|
24
|
-
}, res: Response, next: NextFunction) => void;
|
|
25
|
-
requireAuth(): (req: Request & {
|
|
26
|
-
user?: any;
|
|
27
|
-
}, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
|
|
28
|
-
requireRoles(roles: string[]): (req: Request & {
|
|
29
|
-
user?: any;
|
|
30
|
-
}, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
|
|
31
|
-
private extractToken;
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAOxB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlF,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,MAAM;IAcnD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG;IAS/B,UAAU,KACA,KAAK,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;IAa1E,WAAW,KACD,KAAK,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;IAS1E,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAClB,KAAK,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY;IAgB1E,OAAO,CAAC,YAAY;CAMrB"}
|
package/dist/server/auth.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import jwt from 'jsonwebtoken';
|
|
2
|
-
import bcrypt from 'bcryptjs';
|
|
3
|
-
export class AuthService {
|
|
4
|
-
constructor(config) {
|
|
5
|
-
this.config = {
|
|
6
|
-
expiresIn: '24h',
|
|
7
|
-
...config
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
async hashPassword(password) {
|
|
11
|
-
return bcrypt.hash(password, 10);
|
|
12
|
-
}
|
|
13
|
-
async comparePasswords(password, hashedPassword) {
|
|
14
|
-
return bcrypt.compare(password, hashedPassword);
|
|
15
|
-
}
|
|
16
|
-
generateToken(user) {
|
|
17
|
-
const options = {};
|
|
18
|
-
if (this.config.expiresIn) {
|
|
19
|
-
options.expiresIn = this.config.expiresIn;
|
|
20
|
-
}
|
|
21
|
-
return jwt.sign({ id: user.id, username: user.username, roles: user.roles || [] }, this.config.secret, options);
|
|
22
|
-
}
|
|
23
|
-
verifyToken(token) {
|
|
24
|
-
try {
|
|
25
|
-
return jwt.verify(token, this.config.secret);
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
// Express middleware for authentication
|
|
32
|
-
initialize() {
|
|
33
|
-
return (req, res, next) => {
|
|
34
|
-
const token = this.extractToken(req);
|
|
35
|
-
if (token) {
|
|
36
|
-
const decoded = this.verifyToken(token);
|
|
37
|
-
if (decoded) {
|
|
38
|
-
req.user = decoded;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
next();
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
// Express middleware for requiring authentication
|
|
45
|
-
requireAuth() {
|
|
46
|
-
return (req, res, next) => {
|
|
47
|
-
if (!req.user) {
|
|
48
|
-
return res.status(401).json({ message: 'Unauthorized' });
|
|
49
|
-
}
|
|
50
|
-
return next();
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
// Express middleware for requiring specific roles
|
|
54
|
-
requireRoles(roles) {
|
|
55
|
-
return (req, res, next) => {
|
|
56
|
-
if (!req.user) {
|
|
57
|
-
return res.status(401).json({ message: 'Unauthorized' });
|
|
58
|
-
}
|
|
59
|
-
const userRoles = req.user.roles || [];
|
|
60
|
-
const hasRequiredRole = roles.some(role => userRoles.includes(role));
|
|
61
|
-
if (!hasRequiredRole) {
|
|
62
|
-
return res.status(403).json({ message: 'Forbidden' });
|
|
63
|
-
}
|
|
64
|
-
return next();
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
extractToken(req) {
|
|
68
|
-
if (req.headers.authorization && req.headers.authorization.startsWith('Bearer ')) {
|
|
69
|
-
return req.headers.authorization.substring(7);
|
|
70
|
-
}
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=auth.js.map
|
package/dist/server/auth.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Db } from 'mongodb';
|
|
2
|
-
import mysql from 'mysql2/promise';
|
|
3
|
-
import pg from 'pg';
|
|
4
|
-
export interface DbConfig {
|
|
5
|
-
url: string;
|
|
6
|
-
type: 'mongodb' | 'mysql' | 'postgres';
|
|
7
|
-
}
|
|
8
|
-
export declare class Database {
|
|
9
|
-
private config;
|
|
10
|
-
private mongoClient;
|
|
11
|
-
private mongoDb;
|
|
12
|
-
private mysqlPool;
|
|
13
|
-
private pgPool;
|
|
14
|
-
constructor(config: DbConfig);
|
|
15
|
-
connect(): Promise<void>;
|
|
16
|
-
private connectMongo;
|
|
17
|
-
private connectMysql;
|
|
18
|
-
private connectPostgres;
|
|
19
|
-
disconnect(): Promise<void>;
|
|
20
|
-
getMongoDb(): Db | null;
|
|
21
|
-
getMysqlPool(): mysql.Pool | null;
|
|
22
|
-
getPgPool(): pg.Pool | null;
|
|
23
|
-
query(sql: string, values?: any[]): Promise<any>;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/server/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,EAAE,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;CACxC;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,MAAM,CAAwB;gBAE1B,MAAM,EAAE,QAAQ;IAItB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAgBhB,YAAY;YAYZ,YAAY;YAYZ,eAAe;IAavB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC,UAAU,IAAI,EAAE,GAAG,IAAI;IAIvB,YAAY,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI;IAIjC,SAAS,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI;IAKrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;CAgBvD"}
|
package/dist/server/database.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { MongoClient } from 'mongodb';
|
|
2
|
-
import mysql from 'mysql2/promise';
|
|
3
|
-
import pg from 'pg';
|
|
4
|
-
export class Database {
|
|
5
|
-
constructor(config) {
|
|
6
|
-
this.mongoClient = null;
|
|
7
|
-
this.mongoDb = null;
|
|
8
|
-
this.mysqlPool = null;
|
|
9
|
-
this.pgPool = null;
|
|
10
|
-
this.config = config;
|
|
11
|
-
}
|
|
12
|
-
async connect() {
|
|
13
|
-
switch (this.config.type) {
|
|
14
|
-
case 'mongodb':
|
|
15
|
-
await this.connectMongo();
|
|
16
|
-
break;
|
|
17
|
-
case 'mysql':
|
|
18
|
-
await this.connectMysql();
|
|
19
|
-
break;
|
|
20
|
-
case 'postgres':
|
|
21
|
-
await this.connectPostgres();
|
|
22
|
-
break;
|
|
23
|
-
default:
|
|
24
|
-
throw new Error(`Unsupported database type: ${this.config.type}`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
async connectMongo() {
|
|
28
|
-
try {
|
|
29
|
-
this.mongoClient = new MongoClient(this.config.url);
|
|
30
|
-
await this.mongoClient.connect();
|
|
31
|
-
this.mongoDb = this.mongoClient.db();
|
|
32
|
-
console.log('Connected to MongoDB');
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
console.error('MongoDB connection error:', error);
|
|
36
|
-
throw error;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
async connectMysql() {
|
|
40
|
-
try {
|
|
41
|
-
this.mysqlPool = mysql.createPool(this.config.url);
|
|
42
|
-
// Test connection
|
|
43
|
-
await this.mysqlPool.getConnection();
|
|
44
|
-
console.log('Connected to MySQL');
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
console.error('MySQL connection error:', error);
|
|
48
|
-
throw error;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
async connectPostgres() {
|
|
52
|
-
try {
|
|
53
|
-
this.pgPool = new pg.Pool({ connectionString: this.config.url });
|
|
54
|
-
// Test connection
|
|
55
|
-
const client = await this.pgPool.connect();
|
|
56
|
-
client.release();
|
|
57
|
-
console.log('Connected to PostgreSQL');
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
console.error('PostgreSQL connection error:', error);
|
|
61
|
-
throw error;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
async disconnect() {
|
|
65
|
-
if (this.mongoClient) {
|
|
66
|
-
await this.mongoClient.close();
|
|
67
|
-
this.mongoClient = null;
|
|
68
|
-
this.mongoDb = null;
|
|
69
|
-
}
|
|
70
|
-
if (this.mysqlPool) {
|
|
71
|
-
await this.mysqlPool.end();
|
|
72
|
-
this.mysqlPool = null;
|
|
73
|
-
}
|
|
74
|
-
if (this.pgPool) {
|
|
75
|
-
await this.pgPool.end();
|
|
76
|
-
this.pgPool = null;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// Database-specific methods
|
|
80
|
-
getMongoDb() {
|
|
81
|
-
return this.mongoDb;
|
|
82
|
-
}
|
|
83
|
-
getMysqlPool() {
|
|
84
|
-
return this.mysqlPool;
|
|
85
|
-
}
|
|
86
|
-
getPgPool() {
|
|
87
|
-
return this.pgPool;
|
|
88
|
-
}
|
|
89
|
-
// Generic query method
|
|
90
|
-
async query(sql, values) {
|
|
91
|
-
switch (this.config.type) {
|
|
92
|
-
case 'mongodb':
|
|
93
|
-
throw new Error('For MongoDB, use getMongoDb() instead of query()');
|
|
94
|
-
case 'mysql':
|
|
95
|
-
if (!this.mysqlPool)
|
|
96
|
-
throw new Error('MySQL not connected');
|
|
97
|
-
const [rows] = await this.mysqlPool.execute(sql, values || []);
|
|
98
|
-
return rows;
|
|
99
|
-
case 'postgres':
|
|
100
|
-
if (!this.pgPool)
|
|
101
|
-
throw new Error('PostgreSQL not connected');
|
|
102
|
-
const result = await this.pgPool.query(sql, values || []);
|
|
103
|
-
return result.rows;
|
|
104
|
-
default:
|
|
105
|
-
throw new Error(`Unsupported database type: ${this.config.type}`);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
//# sourceMappingURL=database.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/server/database.ts"],"names":[],"mappings":"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"}
|