frontend-hamroun 1.2.74 → 1.2.77

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 (194) hide show
  1. package/dist/Counter.d.ts +0 -0
  2. package/dist/batch/package.json +16 -0
  3. package/dist/client-router/package.json +16 -0
  4. package/dist/component/package.json +16 -0
  5. package/dist/context/package.json +16 -0
  6. package/dist/event-bus/package.json +16 -0
  7. package/dist/forms/package.json +16 -0
  8. package/dist/hooks/package.json +16 -0
  9. package/dist/hooks-0728361a.cjs +1 -0
  10. package/dist/hooks-b58f947c.js +133 -0
  11. package/dist/hooks.js +1 -0
  12. package/dist/hooks.mjs +13 -0
  13. package/dist/index.js +1 -384
  14. package/dist/index.mjs +130 -374
  15. package/dist/jsx-runtime/package.json +16 -0
  16. package/dist/jsx-runtime.js +1 -0
  17. package/dist/jsx-runtime.mjs +64 -0
  18. package/dist/lifecycle-events/package.json +16 -0
  19. package/dist/package.json +71 -0
  20. package/dist/render-component/package.json +16 -0
  21. package/dist/renderer/package.json +16 -0
  22. package/dist/renderer.js +1 -0
  23. package/dist/renderer.mjs +27 -0
  24. package/dist/router/package.json +16 -0
  25. package/dist/server/package.json +17 -0
  26. package/dist/server/src/batch.d.ts +3 -0
  27. package/dist/server/src/batch.js +23 -0
  28. package/dist/server/src/batch.js.map +1 -0
  29. package/dist/server/src/client-router.d.ts +60 -0
  30. package/dist/server/src/client-router.js +210 -0
  31. package/dist/server/src/client-router.js.map +1 -0
  32. package/dist/server/src/component.d.ts +14 -0
  33. package/dist/server/src/component.js +106 -0
  34. package/dist/server/src/component.js.map +1 -0
  35. package/dist/server/src/context.d.ts +13 -0
  36. package/dist/server/src/context.js +21 -0
  37. package/dist/server/src/context.js.map +1 -0
  38. package/dist/server/src/event-bus.d.ts +23 -0
  39. package/dist/server/src/event-bus.js +75 -0
  40. package/dist/server/src/event-bus.js.map +1 -0
  41. package/dist/server/src/forms.d.ts +40 -0
  42. package/dist/server/src/forms.js +148 -0
  43. package/dist/server/src/forms.js.map +1 -0
  44. package/dist/server/src/hooks.d.ts +12 -0
  45. package/dist/server/src/hooks.js +170 -0
  46. package/dist/server/src/hooks.js.map +1 -0
  47. package/dist/server/src/index.client.d.ts +12 -0
  48. package/dist/server/src/index.client.js +14 -0
  49. package/dist/server/src/index.client.js.map +1 -0
  50. package/dist/server/src/index.d.ts +88 -0
  51. package/dist/server/src/index.js +78 -0
  52. package/dist/server/src/index.js.map +1 -0
  53. package/dist/server/src/jsx-runtime/jsx-dev-runtime.d.ts +1 -0
  54. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js +2 -0
  55. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js.map +1 -0
  56. package/dist/server/src/jsx-runtime/jsx-runtime.d.ts +4 -0
  57. package/dist/server/src/jsx-runtime/jsx-runtime.js +41 -0
  58. package/dist/server/src/jsx-runtime/jsx-runtime.js.map +1 -0
  59. package/dist/server/src/jsx-runtime.d.ts +20 -0
  60. package/dist/server/src/jsx-runtime.js +105 -0
  61. package/dist/server/src/jsx-runtime.js.map +1 -0
  62. package/dist/server/src/lifecycle-events.d.ts +108 -0
  63. package/dist/server/src/lifecycle-events.js +177 -0
  64. package/dist/server/src/lifecycle-events.js.map +1 -0
  65. package/dist/server/src/renderComponent.d.ts +14 -0
  66. package/dist/server/src/renderComponent.js +25 -0
  67. package/dist/server/src/renderComponent.js.map +1 -0
  68. package/dist/server/src/renderer.d.ts +2 -0
  69. package/dist/server/src/renderer.js +31 -0
  70. package/dist/server/src/renderer.js.map +1 -0
  71. package/dist/server/src/router.d.ts +55 -0
  72. package/dist/server/src/router.js +166 -0
  73. package/dist/server/src/router.js.map +1 -0
  74. package/dist/server/src/server/api-router.d.ts +15 -0
  75. package/dist/server/src/server/api-router.js +111 -0
  76. package/dist/server/src/server/api-router.js.map +1 -0
  77. package/dist/server/src/server/auth.d.ts +32 -0
  78. package/dist/server/src/server/auth.js +80 -0
  79. package/dist/server/src/server/auth.js.map +1 -0
  80. package/dist/server/src/server/database.d.ts +24 -0
  81. package/dist/server/src/server/database.js +135 -0
  82. package/dist/server/src/server/database.js.map +1 -0
  83. package/dist/server/src/server/index.d.ts +127 -0
  84. package/dist/server/src/server/index.js +388 -0
  85. package/dist/server/src/server/index.js.map +1 -0
  86. package/dist/server/src/server/middleware.d.ts +11 -0
  87. package/dist/server/src/server/middleware.js +46 -0
  88. package/dist/server/src/server/middleware.js.map +1 -0
  89. package/dist/server/src/server/server.d.ts +9 -0
  90. package/dist/server/src/server/server.js +87 -0
  91. package/dist/server/src/server/server.js.map +1 -0
  92. package/dist/server/src/server/templates.d.ts +28 -0
  93. package/dist/server/src/server/templates.js +204 -0
  94. package/dist/server/src/server/templates.js.map +1 -0
  95. package/dist/server/src/server/types.d.ts +38 -0
  96. package/dist/server/src/server/types.js +4 -0
  97. package/dist/server/src/server/types.js.map +1 -0
  98. package/dist/server/src/server/utils.d.ts +70 -0
  99. package/dist/server/src/server/utils.js +156 -0
  100. package/dist/server/src/server/utils.js.map +1 -0
  101. package/dist/server/src/server/wasm.d.ts +9 -0
  102. package/dist/server/src/server/wasm.js +117 -0
  103. package/dist/server/src/server/wasm.js.map +1 -0
  104. package/dist/server/src/server-renderer.d.ts +5 -0
  105. package/dist/server/src/server-renderer.js +106 -0
  106. package/dist/server/src/server-renderer.js.map +1 -0
  107. package/dist/server/src/server-types.d.ts +42 -0
  108. package/dist/server/src/server-types.js +6 -0
  109. package/dist/server/src/server-types.js.map +1 -0
  110. package/dist/server/src/store.d.ts +41 -0
  111. package/dist/server/src/store.js +99 -0
  112. package/dist/server/src/store.js.map +1 -0
  113. package/dist/server/src/types.d.ts +19 -0
  114. package/dist/server/src/types.js +2 -0
  115. package/dist/server/src/types.js.map +1 -0
  116. package/dist/server/src/utils.d.ts +46 -0
  117. package/dist/server/src/utils.js +144 -0
  118. package/dist/server/src/utils.js.map +1 -0
  119. package/dist/server/src/vdom.d.ts +8 -0
  120. package/dist/server/src/vdom.js +22 -0
  121. package/dist/server/src/vdom.js.map +1 -0
  122. package/dist/server/src/wasm.d.ts +36 -0
  123. package/dist/server/src/wasm.js +159 -0
  124. package/dist/server/src/wasm.js.map +1 -0
  125. package/dist/server/tsconfig.server.tsbuildinfo +1 -0
  126. package/dist/server-renderer/package.json +16 -0
  127. package/dist/server-renderer.js +1 -0
  128. package/dist/server-renderer.mjs +64 -0
  129. package/dist/store/package.json +16 -0
  130. package/dist/types/package.json +16 -0
  131. package/dist/utils/package.json +16 -0
  132. package/dist/vdom/package.json +16 -0
  133. package/dist/wasm/package.json +16 -0
  134. package/dist/wasm.js +1 -0
  135. package/dist/wasm.mjs +103 -0
  136. package/package.json +14 -13
  137. package/templates/complete-app/build.js +284 -0
  138. package/templates/complete-app/package.json +40 -0
  139. package/templates/complete-app/public/styles.css +345 -0
  140. package/templates/complete-app/src/api/index.js +31 -0
  141. package/templates/complete-app/src/client.js +93 -0
  142. package/templates/complete-app/src/components/App.js +66 -0
  143. package/templates/complete-app/src/components/Footer.js +19 -0
  144. package/templates/complete-app/src/components/Header.js +38 -0
  145. package/templates/complete-app/src/pages/About.js +59 -0
  146. package/templates/complete-app/src/pages/Home.js +54 -0
  147. package/templates/complete-app/src/pages/WasmDemo.js +136 -0
  148. package/templates/complete-app/src/server.js +186 -0
  149. package/templates/complete-app/src/wasm/build.bat +16 -0
  150. package/templates/complete-app/src/wasm/build.sh +16 -0
  151. package/templates/complete-app/src/wasm/example.go +101 -0
  152. package/templates/fullstack-app/build/main.css +225 -15
  153. package/templates/fullstack-app/build/main.css.map +2 -2
  154. package/templates/fullstack-app/build/main.js +657 -372
  155. package/templates/fullstack-app/build/main.js.map +4 -4
  156. package/templates/fullstack-app/build.ts +3 -4
  157. package/templates/fullstack-app/public/styles.css +222 -15
  158. package/templates/fullstack-app/server.ts +46 -12
  159. package/templates/fullstack-app/src/components/ClientHome.tsx +0 -0
  160. package/templates/fullstack-app/src/components/ErrorBoundary.tsx +36 -0
  161. package/templates/fullstack-app/src/components/Layout.tsx +23 -26
  162. package/templates/fullstack-app/src/components/StateDemo.tsx +207 -0
  163. package/templates/fullstack-app/src/components/UserList.tsx +30 -13
  164. package/templates/fullstack-app/src/data/api.ts +173 -38
  165. package/templates/fullstack-app/src/main.tsx +88 -154
  166. package/templates/fullstack-app/src/middleware.ts +28 -0
  167. package/templates/fullstack-app/src/pages/404.tsx +28 -0
  168. package/templates/fullstack-app/src/pages/[id].tsx +0 -0
  169. package/templates/fullstack-app/src/pages/_app.tsx +11 -0
  170. package/templates/fullstack-app/src/pages/_document.tsx +25 -0
  171. package/templates/fullstack-app/src/pages/_error.tsx +45 -0
  172. package/templates/fullstack-app/src/pages/about.tsx +71 -0
  173. package/templates/fullstack-app/src/pages/api/users/[id].ts +73 -0
  174. package/templates/fullstack-app/src/pages/api/users/index.ts +43 -0
  175. package/templates/fullstack-app/src/pages/index.tsx +97 -20
  176. package/templates/fullstack-app/src/pages/users/[id].tsx +153 -0
  177. package/templates/fullstack-app/src/pages/wasm-demo.tsx +1 -0
  178. package/templates/go/build.sh +43 -43
  179. package/templates/go/example.go +99 -86
  180. package/templates/go-wasm-app/babel.config.js +8 -2
  181. package/templates/go-wasm-app/build-wasm.js +84 -84
  182. package/templates/go-wasm-app/build.config.js +62 -0
  183. package/templates/go-wasm-app/build.js +218 -0
  184. package/templates/go-wasm-app/package.json +21 -11
  185. package/templates/go-wasm-app/public/index.html +49 -53
  186. package/templates/go-wasm-app/server.js +56 -695
  187. package/templates/go-wasm-app/src/app.js +173 -0
  188. package/templates/go-wasm-app/vite.config.js +16 -5
  189. package/templates/ssr-template/client.js +54 -26
  190. package/templates/ssr-template/server.js +5 -28
  191. package/templates/ssr-template/vite.config.js +21 -5
  192. package/dist/index.d.ts +0 -1
  193. package/dist/index.js.map +0 -1
  194. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Server-side Go WASM integration for Node.js
3
+ */
4
+ import fs from 'fs/promises';
5
+ import path from 'path';
6
+ import { fileURLToPath } from 'url';
7
+ // Global flag to ensure we only initialize WASM once
8
+ let initialized = false;
9
+ /**
10
+ * Initialize the Node.js environment for running Go WASM modules
11
+ */
12
+ export async function initNodeWasm() {
13
+ if (initialized)
14
+ return;
15
+ try {
16
+ // Check if node requires WASM flags
17
+ const nodeVersion = process.version;
18
+ const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0], 10);
19
+ // Node.js version check for WASM flags requirement
20
+ if (majorVersion < 16) {
21
+ console.warn('[WASM] Note: Node.js version < 16 detected. ' +
22
+ 'You may need --experimental-wasm-bigint flag for Go WASM modules.');
23
+ }
24
+ // Global WASM environment setup for Node.js
25
+ globalThis.TextEncoder = globalThis.TextEncoder || TextEncoder;
26
+ globalThis.TextDecoder = globalThis.TextDecoder || TextDecoder;
27
+ // Mark as initialized
28
+ initialized = true;
29
+ }
30
+ catch (error) {
31
+ console.error('[WASM] Failed to initialize Node.js WASM environment:', error);
32
+ throw error;
33
+ }
34
+ }
35
+ /**
36
+ * Load a Go WASM module from a file path for server-side usage
37
+ */
38
+ export async function loadGoWasmFromFile(wasmFilePath, options = {}) {
39
+ try {
40
+ // Initialize Node.js WASM environment
41
+ await initNodeWasm();
42
+ // Get __dirname equivalent in ESM
43
+ const __filename = fileURLToPath(import.meta.url);
44
+ const __dirname = path.dirname(__filename);
45
+ // Load Go runtime
46
+ const goRuntimePath = options.goWasmPath ||
47
+ path.join(__dirname, '..', '..', 'templates', 'go', 'wasm_exec_node.js');
48
+ // Import the Go runtime
49
+ const { Go } = await import(goRuntimePath);
50
+ const go = new Go();
51
+ // Load WASM binary
52
+ const wasmBuffer = await fs.readFile(wasmFilePath);
53
+ const wasmModule = await WebAssembly.compile(wasmBuffer);
54
+ // Create imports object
55
+ const finalImportObject = {
56
+ ...go.importObject,
57
+ ...options.importObject
58
+ };
59
+ // Instantiate the WASM module
60
+ const instance = await WebAssembly.instantiate(wasmModule, finalImportObject);
61
+ // Initialize Go runtime
62
+ go.run(instance);
63
+ // Extract exported functions
64
+ const exports = instance.exports;
65
+ const functions = {};
66
+ // Generate wrapper functions for all exports that are functions
67
+ for (const key in exports) {
68
+ if (typeof exports[key] === 'function') {
69
+ // Fix the type assertion
70
+ const exportedFunc = exports[key];
71
+ functions[key] = (...args) => exportedFunc(...args);
72
+ if (options.debug) {
73
+ const originalFn = functions[key];
74
+ functions[key] = (...args) => {
75
+ console.log(`[WASM] Calling ${key}(${args.join(', ')})`);
76
+ const result = originalFn(...args);
77
+ console.log(`[WASM] ${key} returned:`, result);
78
+ return result;
79
+ };
80
+ }
81
+ }
82
+ }
83
+ // Also capture global functions exported by Go
84
+ for (const key in global) {
85
+ if (key.startsWith('go') && typeof global[key] === 'function') {
86
+ // Fix the type assertion
87
+ const globalFunc = global[key];
88
+ functions[key] = (...args) => globalFunc(...args);
89
+ if (options.debug) {
90
+ const originalFn = functions[key];
91
+ functions[key] = (...args) => {
92
+ console.log(`[WASM] Calling global ${key}(${args.join(', ')})`);
93
+ const result = originalFn(...args);
94
+ console.log(`[WASM] ${key} returned:`, result);
95
+ return result;
96
+ };
97
+ }
98
+ }
99
+ }
100
+ const wasmInstance = {
101
+ instance,
102
+ module: wasmModule,
103
+ exports,
104
+ functions
105
+ };
106
+ // Run onLoad callback if provided
107
+ if (options.onLoad) {
108
+ options.onLoad(wasmInstance);
109
+ }
110
+ return wasmInstance;
111
+ }
112
+ catch (error) {
113
+ console.error('[WASM] Failed to load Go WASM module:', error);
114
+ throw error;
115
+ }
116
+ }
117
+ //# sourceMappingURL=wasm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../../../src/server/wasm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { VNode } from './types.js';
2
+ /**
3
+ * Renders a virtual DOM tree to an HTML string
4
+ */
5
+ export declare function renderToString(vnode: VNode): string;
@@ -0,0 +1,106 @@
1
+ import { prepareRender, finishRender } from './hooks';
2
+ /**
3
+ * Renders a virtual DOM tree to an HTML string
4
+ */
5
+ export function renderToString(vnode) {
6
+ // Reset hook state for this render
7
+ prepareRender();
8
+ // Render the tree to HTML
9
+ const html = renderNodeToString(vnode);
10
+ // Clean up after rendering
11
+ finishRender();
12
+ return html;
13
+ }
14
+ /**
15
+ * Internal function to convert a virtual node to an HTML string
16
+ */
17
+ function renderNodeToString(vnode) {
18
+ // Handle primitive values
19
+ if (vnode === null || vnode === undefined)
20
+ return '';
21
+ if (typeof vnode === 'boolean')
22
+ return '';
23
+ if (typeof vnode === 'number' || typeof vnode === 'string')
24
+ return escapeHtml(String(vnode));
25
+ // Handle function components
26
+ if (typeof vnode.type === 'function') {
27
+ const Component = vnode.type;
28
+ const renderedNode = Component(vnode.props || {});
29
+ return renderNodeToString(renderedNode);
30
+ }
31
+ // Handle intrinsic elements (regular HTML tags)
32
+ if (typeof vnode.type === 'string') {
33
+ const tag = vnode.type;
34
+ let attrs = '';
35
+ let children = '';
36
+ // Convert props to HTML attributes
37
+ if (vnode.props) {
38
+ for (const [key, value] of Object.entries(vnode.props)) {
39
+ // Skip children prop as we handle it separately
40
+ if (key === 'children')
41
+ continue;
42
+ // Skip event handlers (they start with 'on')
43
+ if (key.startsWith('on'))
44
+ continue;
45
+ // Handle the className prop specially
46
+ if (key === 'className') {
47
+ attrs += ` class="${escapeHtml(value)}"`;
48
+ continue;
49
+ }
50
+ // Handle other attributes
51
+ if (typeof value === 'string' || typeof value === 'number') {
52
+ attrs += ` ${key}="${escapeHtml(String(value))}"`;
53
+ }
54
+ else if (value === true) {
55
+ // Boolean attributes
56
+ attrs += ` ${key}`;
57
+ }
58
+ }
59
+ }
60
+ // Process children
61
+ const childrenArray = (vnode.props?.children)
62
+ ? Array.isArray(vnode.props.children)
63
+ ? vnode.props.children
64
+ : [vnode.props.children]
65
+ : [];
66
+ for (const child of childrenArray) {
67
+ children += renderNodeToString(child);
68
+ }
69
+ // Self-closing tags
70
+ const selfClosing = [
71
+ 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',
72
+ 'link', 'meta', 'param', 'source', 'track', 'wbr'
73
+ ];
74
+ if (selfClosing.includes(tag)) {
75
+ return `<${tag}${attrs}/>`;
76
+ }
77
+ // Regular tags with closing
78
+ return `<${tag}${attrs}>${children}</${tag}>`;
79
+ }
80
+ // Handle fragments
81
+ if (vnode.type === Symbol.for('react.fragment')) {
82
+ let fragmentOutput = '';
83
+ const children = Array.isArray(vnode.props?.children)
84
+ ? vnode.props.children
85
+ : vnode.props?.children ? [vnode.props.children] : [];
86
+ for (const child of children) {
87
+ fragmentOutput += renderNodeToString(child);
88
+ }
89
+ return fragmentOutput;
90
+ }
91
+ // Fallback for unknown node types
92
+ console.warn('Unknown vnode type:', vnode.type);
93
+ return '';
94
+ }
95
+ /**
96
+ * Escape HTML special characters to prevent XSS
97
+ */
98
+ function escapeHtml(text) {
99
+ return text
100
+ .replace(/&/g, '&amp;')
101
+ .replace(/</g, '&lt;')
102
+ .replace(/>/g, '&gt;')
103
+ .replace(/"/g, '&quot;')
104
+ .replace(/'/g, '&#039;');
105
+ }
106
+ //# sourceMappingURL=server-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-renderer.js","sourceRoot":"","sources":["../../../src/server-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Public type definitions for server functionality
3
+ * These types are safe to import in any environment
4
+ */
5
+ export interface ServerConfig {
6
+ port?: number;
7
+ apiDir?: string;
8
+ pagesDir?: string;
9
+ staticDir?: string;
10
+ enableCors?: boolean;
11
+ corsOptions?: any;
12
+ db?: {
13
+ url: string;
14
+ type: 'mongodb' | 'mysql' | 'postgres';
15
+ };
16
+ auth?: {
17
+ secret: string;
18
+ expiresIn?: string;
19
+ };
20
+ }
21
+ export interface Server {
22
+ start(): Promise<void>;
23
+ stop(): Promise<void>;
24
+ getExpressApp(): any;
25
+ getDatabase(): any;
26
+ getAuth(): any;
27
+ }
28
+ export interface User {
29
+ id: string | number;
30
+ username: string;
31
+ password?: string;
32
+ email?: string;
33
+ roles?: string[];
34
+ [key: string]: any;
35
+ }
36
+ export interface DbConfig {
37
+ url: string;
38
+ type: 'mongodb' | 'mysql' | 'postgres';
39
+ }
40
+ export interface MiddlewareFunction {
41
+ (req: any, res: any, next: any): void | Promise<void>;
42
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Public type definitions for server functionality
3
+ * These types are safe to import in any environment
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=server-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-types.js","sourceRoot":"","sources":["../../../src/server-types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,41 @@
1
+ export interface Action {
2
+ type: string;
3
+ payload?: any;
4
+ }
5
+ export type Reducer<S> = (state: S, action: Action) => S;
6
+ export type Selector<S, R> = (state: S) => R;
7
+ export type Dispatch = (action: Action) => void;
8
+ export type Middleware<S> = (store: Store<S>) => (next: Dispatch) => (action: Action) => void;
9
+ export interface Store<S> {
10
+ getState: () => S;
11
+ dispatch: Dispatch;
12
+ subscribe: (listener: () => void) => () => void;
13
+ }
14
+ export interface AsyncAction {
15
+ (dispatch: Dispatch, getState: () => any): Promise<void> | void;
16
+ }
17
+ export declare function createStore<S>(reducer: Reducer<S>, initialState: S, middlewares?: Middleware<S>[]): Store<S>;
18
+ export interface StoreContextType {
19
+ store: Store<any>;
20
+ state: any;
21
+ }
22
+ export declare const StoreContext: import("./context.js").Context<StoreContextType>;
23
+ export declare function StoreProvider<S>({ store, children }: {
24
+ store: Store<S>;
25
+ children: any;
26
+ }): any;
27
+ export declare function useSelector<S, R>(selector: Selector<S, R>): R;
28
+ export declare function useDispatch<S>(): Dispatch;
29
+ export declare function useStore<S>(): Store<S>;
30
+ export declare const logger: Middleware<any>;
31
+ export declare const thunk: Middleware<any>;
32
+ declare const _default: {
33
+ createStore: typeof createStore;
34
+ StoreProvider: typeof StoreProvider;
35
+ useSelector: typeof useSelector;
36
+ useDispatch: typeof useDispatch;
37
+ useStore: typeof useStore;
38
+ logger: Middleware<any>;
39
+ thunk: Middleware<any>;
40
+ };
41
+ export default _default;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Global state management solution similar to Redux
3
+ */
4
+ import { useState, useEffect } from './hooks';
5
+ import { createContext, useContext } from './context';
6
+ import { jsx } from './jsx-runtime';
7
+ export function createStore(reducer, initialState, middlewares = []) {
8
+ let state = initialState;
9
+ let listeners = [];
10
+ // Apply middlewares
11
+ let dispatch = (action) => {
12
+ state = reducer(state, action);
13
+ listeners.forEach(listener => listener());
14
+ return action;
15
+ };
16
+ // Chain middlewares
17
+ if (middlewares.length > 0) {
18
+ const middlewareAPI = {
19
+ getState: () => state,
20
+ dispatch: (action) => dispatch(action),
21
+ subscribe: (listener) => subscribe(listener)
22
+ };
23
+ const chain = middlewares.map(middleware => middleware(middlewareAPI));
24
+ dispatch = chain.reduce((a, b) => (next) => a(b(next)))(dispatch);
25
+ }
26
+ // Subscribe to store changes
27
+ function subscribe(listener) {
28
+ listeners.push(listener);
29
+ return function unsubscribe() {
30
+ listeners = listeners.filter(l => l !== listener);
31
+ };
32
+ }
33
+ // Initialize store with default state
34
+ dispatch({ type: '@@INIT' });
35
+ return {
36
+ getState: () => state,
37
+ dispatch,
38
+ subscribe
39
+ };
40
+ }
41
+ export const StoreContext = createContext({
42
+ store: {
43
+ getState: () => ({}),
44
+ dispatch: () => { },
45
+ subscribe: () => () => { }
46
+ },
47
+ state: {}
48
+ });
49
+ export function StoreProvider({ store, children }) {
50
+ const [state, setState] = useState(store.getState());
51
+ useEffect(() => {
52
+ const unsubscribe = store.subscribe(() => {
53
+ setState(store.getState());
54
+ });
55
+ return unsubscribe;
56
+ }, [store]);
57
+ return jsx(StoreContext.Provider, {
58
+ value: { store, state },
59
+ children
60
+ });
61
+ }
62
+ export function useSelector(selector) {
63
+ const context = useContext(StoreContext);
64
+ return selector(context.state);
65
+ }
66
+ export function useDispatch() {
67
+ const context = useContext(StoreContext);
68
+ return context.store.dispatch;
69
+ }
70
+ export function useStore() {
71
+ const context = useContext(StoreContext);
72
+ return context.store;
73
+ }
74
+ // Common middlewares
75
+ export const logger = (store) => (next) => (action) => {
76
+ console.group(action.type);
77
+ console.log('Previous state:', store.getState());
78
+ console.log('Action:', action);
79
+ const result = next(action);
80
+ console.log('Next state:', store.getState());
81
+ console.groupEnd();
82
+ return result;
83
+ };
84
+ export const thunk = (store) => (next) => (action) => {
85
+ if (typeof action === 'function') {
86
+ return action(store.dispatch, store.getState);
87
+ }
88
+ return next(action);
89
+ };
90
+ export default {
91
+ createStore,
92
+ StoreProvider,
93
+ useSelector,
94
+ useDispatch,
95
+ useStore,
96
+ logger,
97
+ thunk
98
+ };
99
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type { Context } from './context.js';
2
+ export interface VNode {
3
+ type: string | Function;
4
+ props: Record<string, any>;
5
+ key?: string | number;
6
+ }
7
+ export type Component = (props: any) => any;
8
+ declare global {
9
+ namespace JSX {
10
+ interface Element {
11
+ type: string | Function;
12
+ props: Record<string, any>;
13
+ key?: string | number;
14
+ }
15
+ interface IntrinsicElements {
16
+ [elemName: string]: any;
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Common utility functions for the framework
3
+ */
4
+ export interface DebouncedFunction<T extends (...args: any[]) => any> {
5
+ (...args: Parameters<T>): void;
6
+ cancel: () => void;
7
+ }
8
+ /**
9
+ * Creates a debounced function that delays invoking the provided function
10
+ * until after the specified wait time has elapsed since the last time it was invoked.
11
+ */
12
+ export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): DebouncedFunction<T>;
13
+ export interface ThrottledFunction<T extends (...args: any[]) => any> {
14
+ (...args: Parameters<T>): void;
15
+ cancel: () => void;
16
+ }
17
+ /**
18
+ * Creates a throttled function that only invokes the provided function
19
+ * at most once per every wait milliseconds.
20
+ */
21
+ export declare function throttle<T extends (...args: any[]) => any>(func: T, wait: number): ThrottledFunction<T>;
22
+ /**
23
+ * Deep clones an object by using JSON serialization
24
+ */
25
+ export declare function deepClone<T>(obj: T): T;
26
+ /**
27
+ * Creates a memoized version of a function that caches results based on arguments
28
+ */
29
+ export declare function memoize<T extends (...args: any[]) => any>(func: T): T;
30
+ /**
31
+ * Creates a UUID v4 string
32
+ */
33
+ export declare function uuid(): string;
34
+ /**
35
+ * Formats a date according to the specified format
36
+ */
37
+ export declare function formatDate(date: Date, format: string): string;
38
+ declare const _default: {
39
+ debounce: typeof debounce;
40
+ throttle: typeof throttle;
41
+ deepClone: typeof deepClone;
42
+ memoize: typeof memoize;
43
+ uuid: typeof uuid;
44
+ formatDate: typeof formatDate;
45
+ };
46
+ export default _default;
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Common utility functions for the framework
3
+ */
4
+ /**
5
+ * Creates a debounced function that delays invoking the provided function
6
+ * until after the specified wait time has elapsed since the last time it was invoked.
7
+ */
8
+ export function debounce(func, wait) {
9
+ let timeout = null;
10
+ const debounced = function (...args) {
11
+ const later = () => {
12
+ timeout = null;
13
+ func.apply(this, args);
14
+ };
15
+ if (timeout !== null) {
16
+ clearTimeout(timeout);
17
+ }
18
+ timeout = setTimeout(later, wait);
19
+ };
20
+ debounced.cancel = function () {
21
+ if (timeout !== null) {
22
+ clearTimeout(timeout);
23
+ timeout = null;
24
+ }
25
+ };
26
+ return debounced;
27
+ }
28
+ /**
29
+ * Creates a throttled function that only invokes the provided function
30
+ * at most once per every wait milliseconds.
31
+ */
32
+ export function throttle(func, wait) {
33
+ let timeout = null;
34
+ let previous = 0;
35
+ const throttled = function (...args) {
36
+ const now = Date.now();
37
+ const remaining = wait - (now - previous);
38
+ if (remaining <= 0 || remaining > wait) {
39
+ if (timeout !== null) {
40
+ clearTimeout(timeout);
41
+ timeout = null;
42
+ }
43
+ previous = now;
44
+ func.apply(this, args);
45
+ }
46
+ else if (timeout === null) {
47
+ timeout = setTimeout(() => {
48
+ previous = Date.now();
49
+ timeout = null;
50
+ func.apply(this, args);
51
+ }, remaining);
52
+ }
53
+ };
54
+ throttled.cancel = function () {
55
+ if (timeout !== null) {
56
+ clearTimeout(timeout);
57
+ timeout = null;
58
+ }
59
+ previous = 0;
60
+ };
61
+ return throttled;
62
+ }
63
+ /**
64
+ * Deep clones an object by using JSON serialization
65
+ */
66
+ export function deepClone(obj) {
67
+ if (obj === null || typeof obj !== 'object') {
68
+ return obj;
69
+ }
70
+ return JSON.parse(JSON.stringify(obj));
71
+ }
72
+ /**
73
+ * Creates a memoized version of a function that caches results based on arguments
74
+ */
75
+ export function memoize(func) {
76
+ const cache = new Map();
77
+ return ((...args) => {
78
+ const key = JSON.stringify(args);
79
+ if (cache.has(key)) {
80
+ return cache.get(key);
81
+ }
82
+ const result = func(...args);
83
+ cache.set(key, result);
84
+ return result;
85
+ });
86
+ }
87
+ /**
88
+ * Creates a UUID v4 string
89
+ */
90
+ export function uuid() {
91
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
92
+ const r = Math.random() * 16 | 0;
93
+ const v = c === 'x' ? r : (r & 0x3 | 0x8);
94
+ return v.toString(16);
95
+ });
96
+ }
97
+ /**
98
+ * Formats a date according to the specified format
99
+ */
100
+ export function formatDate(date, format) {
101
+ const months = [
102
+ 'January', 'February', 'March', 'April', 'May', 'June',
103
+ 'July', 'August', 'September', 'October', 'November', 'December'
104
+ ];
105
+ const shortMonths = months.map(m => m.slice(0, 3));
106
+ const days = [
107
+ 'Sunday', 'Monday', 'Tuesday', 'Wednesday',
108
+ 'Thursday', 'Friday', 'Saturday'
109
+ ];
110
+ const shortDays = days.map(d => d.slice(0, 3));
111
+ const tokens = {
112
+ 'YYYY': () => date.getFullYear().toString(),
113
+ 'YY': () => (date.getFullYear() % 100).toString().padStart(2, '0'),
114
+ 'MMMM': () => months[date.getMonth()],
115
+ 'MMM': () => shortMonths[date.getMonth()],
116
+ 'MM': () => (date.getMonth() + 1).toString().padStart(2, '0'),
117
+ 'M': () => (date.getMonth() + 1).toString(),
118
+ 'DDDD': () => days[date.getDay()],
119
+ 'DDD': () => shortDays[date.getDay()],
120
+ 'DD': () => date.getDate().toString().padStart(2, '0'),
121
+ 'D': () => date.getDate().toString(),
122
+ 'HH': () => date.getHours().toString().padStart(2, '0'),
123
+ 'H': () => date.getHours().toString(),
124
+ 'hh': () => (date.getHours() % 12 || 12).toString().padStart(2, '0'),
125
+ 'h': () => (date.getHours() % 12 || 12).toString(),
126
+ 'mm': () => date.getMinutes().toString().padStart(2, '0'),
127
+ 'm': () => date.getMinutes().toString(),
128
+ 'ss': () => date.getSeconds().toString().padStart(2, '0'),
129
+ 's': () => date.getSeconds().toString(),
130
+ 'a': () => date.getHours() < 12 ? 'am' : 'pm',
131
+ 'A': () => date.getHours() < 12 ? 'AM' : 'PM'
132
+ };
133
+ const tokenRegex = new RegExp(Object.keys(tokens).join('|'), 'g');
134
+ return format.replace(tokenRegex, (match) => tokens[match]());
135
+ }
136
+ export default {
137
+ debounce,
138
+ throttle,
139
+ deepClone,
140
+ memoize,
141
+ uuid,
142
+ formatDate
143
+ };
144
+ //# sourceMappingURL=utils.js.map