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.
Files changed (78) hide show
  1. package/dist/browser.js +635 -0
  2. package/dist/browser.js.map +7 -0
  3. package/dist/browser.package.json +4 -0
  4. package/dist/index.js +2024 -33
  5. package/dist/index.js.map +7 -1
  6. package/dist/server/index.js +1357 -432
  7. package/dist/server/index.js.map +7 -1
  8. package/dist/server/package.json +4 -0
  9. package/dist/wasm.js +86 -104
  10. package/dist/wasm.js.map +7 -1
  11. package/package.json +102 -86
  12. package/templates/ssr-template/esbuild.config.js +28 -3
  13. package/templates/ssr-template/package-lock.json +74 -1035
  14. package/templates/ssr-template/package.json +1 -0
  15. package/templates/ssr-template/src/App.tsx +11 -11
  16. package/templates/ssr-template/src/client.tsx +3 -2
  17. package/dist/frontend/components/WasmLoader.d.ts +0 -1
  18. package/dist/frontend/components/WasmLoader.d.ts.map +0 -1
  19. package/dist/frontend/components/WasmLoader.js +0 -2
  20. package/dist/frontend/components/WasmLoader.js.map +0 -1
  21. package/dist/frontend/hooks/useWasm.d.ts +0 -1
  22. package/dist/frontend/hooks/useWasm.d.ts.map +0 -1
  23. package/dist/frontend/hooks/useWasm.js +0 -2
  24. package/dist/frontend/hooks/useWasm.js.map +0 -1
  25. package/dist/frontend/index.d.ts +0 -1
  26. package/dist/frontend/index.d.ts.map +0 -1
  27. package/dist/frontend/index.js +0 -2
  28. package/dist/frontend/index.js.map +0 -1
  29. package/dist/index.d.ts +0 -12
  30. package/dist/index.d.ts.map +0 -1
  31. package/dist/renderComponent.d.ts +0 -9
  32. package/dist/renderComponent.d.ts.map +0 -1
  33. package/dist/renderComponent.js +0 -39
  34. package/dist/renderComponent.js.map +0 -1
  35. package/dist/server/api-router.d.ts +0 -16
  36. package/dist/server/api-router.d.ts.map +0 -1
  37. package/dist/server/api-router.js +0 -121
  38. package/dist/server/api-router.js.map +0 -1
  39. package/dist/server/auth.d.ts +0 -33
  40. package/dist/server/auth.d.ts.map +0 -1
  41. package/dist/server/auth.js +0 -74
  42. package/dist/server/auth.js.map +0 -1
  43. package/dist/server/database.d.ts +0 -25
  44. package/dist/server/database.d.ts.map +0 -1
  45. package/dist/server/database.js +0 -109
  46. package/dist/server/database.js.map +0 -1
  47. package/dist/server/index.d.ts +0 -117
  48. package/dist/server/index.d.ts.map +0 -1
  49. package/dist/server/middleware.d.ts +0 -12
  50. package/dist/server/middleware.d.ts.map +0 -1
  51. package/dist/server/middleware.js +0 -46
  52. package/dist/server/middleware.js.map +0 -1
  53. package/dist/server/server.d.ts +0 -10
  54. package/dist/server/server.d.ts.map +0 -1
  55. package/dist/server/server.js +0 -81
  56. package/dist/server/server.js.map +0 -1
  57. package/dist/server/templates.d.ts +0 -31
  58. package/dist/server/templates.d.ts.map +0 -1
  59. package/dist/server/templates.js +0 -208
  60. package/dist/server/templates.js.map +0 -1
  61. package/dist/server/types.d.ts +0 -67
  62. package/dist/server/types.d.ts.map +0 -1
  63. package/dist/server/types.js +0 -2
  64. package/dist/server/types.js.map +0 -1
  65. package/dist/server/utils.d.ts +0 -71
  66. package/dist/server/utils.d.ts.map +0 -1
  67. package/dist/server/utils.js +0 -165
  68. package/dist/server/utils.js.map +0 -1
  69. package/dist/server/wasm.d.ts +0 -29
  70. package/dist/server/wasm.d.ts.map +0 -1
  71. package/dist/server/wasm.js +0 -208
  72. package/dist/server/wasm.js.map +0 -1
  73. package/dist/server-renderer.d.ts +0 -5
  74. package/dist/server-renderer.d.ts.map +0 -1
  75. package/dist/server-renderer.js +0 -27
  76. package/dist/server-renderer.js.map +0 -1
  77. package/dist/wasm.d.ts +0 -51
  78. package/dist/wasm.d.ts.map +0 -1
@@ -10,6 +10,7 @@
10
10
  "start": "node dist/server.js"
11
11
  },
12
12
  "dependencies": {
13
+ "baraqex": "^1.0.36",
13
14
  "express": "^4.18.2",
14
15
  "frontend-hamroun": "latest"
15
16
  },
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, useRef, useMemo } from 'frontend-hamroun';
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,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=WasmLoader.js.map
@@ -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,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=useWasm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useWasm.js","sourceRoot":"","sources":["../../../src/frontend/hooks/useWasm.ts"],"names":[],"mappings":""}
@@ -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":""}
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=index.js.map
@@ -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
@@ -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,9 +0,0 @@
1
- /**
2
- * Component rendering utilities
3
- */
4
- export declare function renderComponent(Component: any, props?: any): Promise<{
5
- html: string;
6
- success: boolean;
7
- error?: Error;
8
- }>;
9
- //# sourceMappingURL=renderComponent.d.ts.map
@@ -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"}
@@ -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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"}
@@ -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"}
@@ -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
@@ -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"}
@@ -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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"}