@coherent.js/core 1.0.0-beta.5 → 1.0.0-beta.7
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/coherent.d.ts +150 -10
- package/dist/coherent.d.ts.map +1 -1
- package/dist/coherent.js +166 -33
- package/dist/coherent.js.map +1 -1
- package/dist/components/component-system.js +109 -109
- package/dist/components/lifecycle.d.ts +212 -0
- package/dist/components/lifecycle.d.ts.map +1 -0
- package/dist/components/lifecycle.js +525 -0
- package/dist/components/lifecycle.js.map +1 -0
- package/dist/core/html-utils.js +5 -5
- package/dist/core/object-factory.js +21 -21
- package/dist/core/object-utils.js +2 -2
- package/dist/dev/dev-tools.d.ts +1 -1
- package/dist/dev/dev-tools.js +28 -28
- package/dist/forms/validation.d.ts +271 -0
- package/dist/forms/validation.d.ts.map +1 -0
- package/dist/forms/validation.js +573 -0
- package/dist/forms/validation.js.map +1 -0
- package/dist/index.cjs +2839 -1464
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +2837 -1473
- package/dist/index.js.map +4 -4
- package/dist/performance/bundle-optimizer.js +11 -11
- package/dist/performance/cache-manager.js +6 -6
- package/dist/performance/component-cache.d.ts +120 -0
- package/dist/performance/component-cache.d.ts.map +1 -0
- package/dist/performance/component-cache.js +364 -0
- package/dist/performance/component-cache.js.map +1 -0
- package/dist/performance/monitor.js +10 -10
- package/dist/performance/monitor.js.map +1 -1
- package/dist/rendering/base-renderer.js +13 -13
- package/dist/rendering/css-manager.d.ts +73 -0
- package/dist/rendering/css-manager.d.ts.map +1 -0
- package/dist/rendering/css-manager.js +176 -0
- package/dist/rendering/css-manager.js.map +1 -0
- package/dist/rendering/dom-renderer.d.ts +23 -0
- package/dist/rendering/dom-renderer.d.ts.map +1 -1
- package/dist/rendering/dom-renderer.js +77 -9
- package/dist/rendering/dom-renderer.js.map +1 -1
- package/dist/rendering/html-renderer.d.ts +15 -0
- package/dist/rendering/html-renderer.d.ts.map +1 -1
- package/dist/rendering/html-renderer.js +85 -4
- package/dist/rendering/html-renderer.js.map +1 -1
- package/dist/rendering/streaming-renderer.js +12 -12
- package/dist/rendering/vdom-diff.d.ts +47 -0
- package/dist/rendering/vdom-diff.d.ts.map +1 -0
- package/dist/rendering/vdom-diff.js +416 -0
- package/dist/rendering/vdom-diff.js.map +1 -0
- package/dist/routing/router.d.ts +241 -0
- package/dist/routing/router.d.ts.map +1 -0
- package/dist/routing/router.js +648 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/state/reactive-state.d.ts +166 -0
- package/dist/state/reactive-state.d.ts.map +1 -0
- package/dist/state/reactive-state.js +546 -0
- package/dist/state/reactive-state.js.map +1 -0
- package/dist/utils/dependency-utils.js +2 -2
- package/dist/utils/error-handler.d.ts +148 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +468 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/normalization.js +1 -1
- package/dist/utils/validation.js +1 -1
- package/package.json +7 -22
- package/types/elements.d.ts +1080 -0
- package/types/index.d.ts +199 -65
- package/dist/database/adapters/mongodb.d.ts +0 -15
- package/dist/database/adapters/mongodb.d.ts.map +0 -1
- package/dist/database/adapters/mongodb.js +0 -216
- package/dist/database/adapters/mongodb.js.map +0 -1
- package/dist/database/adapters/mysql.d.ts +0 -12
- package/dist/database/adapters/mysql.d.ts.map +0 -1
- package/dist/database/adapters/mysql.js +0 -171
- package/dist/database/adapters/mysql.js.map +0 -1
- package/dist/database/adapters/postgresql.d.ts +0 -12
- package/dist/database/adapters/postgresql.d.ts.map +0 -1
- package/dist/database/adapters/postgresql.js +0 -177
- package/dist/database/adapters/postgresql.js.map +0 -1
- package/dist/database/adapters/sqlite.d.ts +0 -15
- package/dist/database/adapters/sqlite.d.ts.map +0 -1
- package/dist/database/adapters/sqlite.js +0 -241
- package/dist/database/adapters/sqlite.js.map +0 -1
- package/dist/database/connection-manager.d.ts +0 -135
- package/dist/database/connection-manager.d.ts.map +0 -1
- package/dist/database/connection-manager.js +0 -362
- package/dist/database/connection-manager.js.map +0 -1
- package/dist/database/index.d.ts +0 -38
- package/dist/database/index.d.ts.map +0 -1
- package/dist/database/index.js +0 -60
- package/dist/database/index.js.map +0 -1
- package/dist/database/middleware.d.ts +0 -122
- package/dist/database/middleware.d.ts.map +0 -1
- package/dist/database/middleware.js +0 -390
- package/dist/database/middleware.js.map +0 -1
- package/dist/database/migration.d.ts +0 -62
- package/dist/database/migration.d.ts.map +0 -1
- package/dist/database/migration.js +0 -423
- package/dist/database/migration.js.map +0 -1
- package/dist/database/model.d.ts +0 -8
- package/dist/database/model.d.ts.map +0 -1
- package/dist/database/model.js +0 -167
- package/dist/database/model.js.map +0 -1
- package/dist/database/query-builder.d.ts +0 -111
- package/dist/database/query-builder.d.ts.map +0 -1
- package/dist/database/query-builder.js +0 -187
- package/dist/database/query-builder.js.map +0 -1
- package/dist/database/utils.d.ts +0 -196
- package/dist/database/utils.d.ts.map +0 -1
- package/dist/database/utils.js +0 -372
- package/dist/database/utils.js.map +0 -1
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Component Lifecycle System for Coherent.js
|
|
3
|
+
* Provides hooks and events for component lifecycle management
|
|
4
|
+
*/
|
|
5
|
+
import { globalErrorHandler } from '../utils/error-handler.js';
|
|
6
|
+
import { ReactiveState } from '../state/reactive-state.js';
|
|
7
|
+
/**
|
|
8
|
+
* Lifecycle phases
|
|
9
|
+
*/
|
|
10
|
+
export const LIFECYCLE_PHASES = {
|
|
11
|
+
BEFORE_CREATE: 'beforeCreate',
|
|
12
|
+
CREATED: 'created',
|
|
13
|
+
BEFORE_MOUNT: 'beforeMount',
|
|
14
|
+
MOUNTED: 'mounted',
|
|
15
|
+
BEFORE_UPDATE: 'beforeUpdate',
|
|
16
|
+
UPDATED: 'updated',
|
|
17
|
+
BEFORE_UNMOUNT: 'beforeUnmount',
|
|
18
|
+
UNMOUNTED: 'unmounted',
|
|
19
|
+
ERROR: 'error'
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Component instance tracker
|
|
23
|
+
*/
|
|
24
|
+
const componentInstances = new WeakMap();
|
|
25
|
+
const componentRegistry = new Map();
|
|
26
|
+
/**
|
|
27
|
+
* Component lifecycle manager
|
|
28
|
+
*/
|
|
29
|
+
export class ComponentLifecycle {
|
|
30
|
+
constructor(component, options = {}) {
|
|
31
|
+
this.component = component;
|
|
32
|
+
this.id = this.generateId();
|
|
33
|
+
this.options = options;
|
|
34
|
+
this.phase = null;
|
|
35
|
+
this.hooks = new Map();
|
|
36
|
+
this.state = new ReactiveState();
|
|
37
|
+
this.props = {};
|
|
38
|
+
this.context = {};
|
|
39
|
+
this.isMounted = false;
|
|
40
|
+
this.isDestroyed = false;
|
|
41
|
+
this.children = new Set();
|
|
42
|
+
this.parent = null;
|
|
43
|
+
this.eventHandlers = new Map();
|
|
44
|
+
this.timers = new Set();
|
|
45
|
+
this.subscriptions = new Set();
|
|
46
|
+
// Register instance
|
|
47
|
+
componentInstances.set(component, this);
|
|
48
|
+
componentRegistry.set(this.id, this);
|
|
49
|
+
// Initialize lifecycle
|
|
50
|
+
this.executeHook(LIFECYCLE_PHASES.BEFORE_CREATE);
|
|
51
|
+
this.executeHook(LIFECYCLE_PHASES.CREATED);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Generate unique component ID
|
|
55
|
+
*/
|
|
56
|
+
generateId() {
|
|
57
|
+
return `comp_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Add lifecycle hook
|
|
61
|
+
*/
|
|
62
|
+
hook(phase, callback) {
|
|
63
|
+
if (typeof callback !== 'function') {
|
|
64
|
+
throw new Error(`Hook callback must be a function for phase: ${phase}`);
|
|
65
|
+
}
|
|
66
|
+
if (!this.hooks.has(phase)) {
|
|
67
|
+
this.hooks.set(phase, []);
|
|
68
|
+
}
|
|
69
|
+
this.hooks.get(phase).push(callback);
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execute hooks for a specific phase
|
|
74
|
+
*/
|
|
75
|
+
async executeHook(phase, ...args) {
|
|
76
|
+
if (this.isDestroyed) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.phase = phase;
|
|
80
|
+
const hooks = this.hooks.get(phase) || [];
|
|
81
|
+
for (const hook of hooks) {
|
|
82
|
+
try {
|
|
83
|
+
await hook.call(this, ...args);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
this.handleError(error, phase);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Handle component errors
|
|
92
|
+
*/
|
|
93
|
+
handleError(error, phase) {
|
|
94
|
+
const enhancedError = globalErrorHandler.handle(error, {
|
|
95
|
+
component: this.component,
|
|
96
|
+
context: {
|
|
97
|
+
phase,
|
|
98
|
+
componentId: this.id,
|
|
99
|
+
props: this.props,
|
|
100
|
+
state: this.state.toObject()
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
this.executeHook(LIFECYCLE_PHASES.ERROR, enhancedError);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Mount component
|
|
107
|
+
*/
|
|
108
|
+
async mount(container, props = {}) {
|
|
109
|
+
if (this.isMounted) {
|
|
110
|
+
console.warn(`Component ${this.id} is already mounted`);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
this.props = props;
|
|
114
|
+
this.container = container;
|
|
115
|
+
await this.executeHook(LIFECYCLE_PHASES.BEFORE_MOUNT, container, _props);
|
|
116
|
+
try {
|
|
117
|
+
// Actual mounting logic would be handled by the renderer
|
|
118
|
+
this.isMounted = true;
|
|
119
|
+
await this.executeHook(LIFECYCLE_PHASES.MOUNTED, container);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
this.handleError(error, 'mount');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Update component
|
|
127
|
+
*/
|
|
128
|
+
async update(newProps = {}) {
|
|
129
|
+
if (!this.isMounted || this.isDestroyed) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const oldProps = this.props;
|
|
133
|
+
this.props = { ...this.props, ...newProps };
|
|
134
|
+
await this.executeHook(LIFECYCLE_PHASES.BEFORE_UPDATE, newProps, oldProps);
|
|
135
|
+
try {
|
|
136
|
+
// Update logic would be handled by the renderer
|
|
137
|
+
await this.executeHook(LIFECYCLE_PHASES.UPDATED, this.props, oldProps);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
this.handleError(error, 'update');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Unmount component
|
|
145
|
+
*/
|
|
146
|
+
async unmount() {
|
|
147
|
+
if (!this.isMounted || this.isDestroyed) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
await this.executeHook(LIFECYCLE_PHASES.BEFORE_UNMOUNT);
|
|
151
|
+
try {
|
|
152
|
+
// Cleanup children
|
|
153
|
+
for (const child of this.children) {
|
|
154
|
+
await child.unmount();
|
|
155
|
+
}
|
|
156
|
+
// Cleanup subscriptions
|
|
157
|
+
this.subscriptions.forEach(unsub => {
|
|
158
|
+
try {
|
|
159
|
+
unsub();
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.warn('Error cleaning up subscription:', error);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
// Clear timers
|
|
166
|
+
this.timers.forEach(timer => {
|
|
167
|
+
clearTimeout(timer);
|
|
168
|
+
clearInterval(timer);
|
|
169
|
+
});
|
|
170
|
+
// Remove event handlers
|
|
171
|
+
this.eventHandlers.forEach((handler, element) => {
|
|
172
|
+
handler.events.forEach((listeners, event) => {
|
|
173
|
+
listeners.forEach(listener => {
|
|
174
|
+
element.removeEventListener(event, listener);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
// Cleanup state
|
|
179
|
+
this.state.destroy();
|
|
180
|
+
this.isMounted = false;
|
|
181
|
+
this.isDestroyed = true;
|
|
182
|
+
await this.executeHook(LIFECYCLE_PHASES.UNMOUNTED);
|
|
183
|
+
// Unregister
|
|
184
|
+
componentRegistry.delete(this.id);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
this.handleError(error, 'unmount');
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Add child component
|
|
192
|
+
*/
|
|
193
|
+
addChild(child) {
|
|
194
|
+
child.parent = this;
|
|
195
|
+
this.children.add(child);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Remove child component
|
|
199
|
+
*/
|
|
200
|
+
removeChild(child) {
|
|
201
|
+
child.parent = null;
|
|
202
|
+
this.children.delete(child);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Add event listener with automatic cleanup
|
|
206
|
+
*/
|
|
207
|
+
addEventListener(element, event, listener, options = {}) {
|
|
208
|
+
if (!this.eventHandlers.has(element)) {
|
|
209
|
+
this.eventHandlers.set(element, {
|
|
210
|
+
events: new Map()
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
const handler = this.eventHandlers.get(element);
|
|
214
|
+
if (!handler.events.has(event)) {
|
|
215
|
+
handler.events.set(event, new Set());
|
|
216
|
+
}
|
|
217
|
+
handler.events.get(event).add(listener);
|
|
218
|
+
element.addEventListener(event, listener, options);
|
|
219
|
+
// Return cleanup function
|
|
220
|
+
return () => {
|
|
221
|
+
handler.events.get(event).delete(listener);
|
|
222
|
+
element.removeEventListener(event, listener);
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Add subscription with automatic cleanup
|
|
227
|
+
*/
|
|
228
|
+
addSubscription(unsubscribe) {
|
|
229
|
+
this.subscriptions.add(unsubscribe);
|
|
230
|
+
return unsubscribe;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Set timer with automatic cleanup
|
|
234
|
+
*/
|
|
235
|
+
setTimeout(callback, delay) {
|
|
236
|
+
const timer = setTimeout(() => {
|
|
237
|
+
this.timers.delete(timer);
|
|
238
|
+
callback();
|
|
239
|
+
}, delay);
|
|
240
|
+
this.timers.add(timer);
|
|
241
|
+
return timer;
|
|
242
|
+
}
|
|
243
|
+
setInterval(callback, interval) {
|
|
244
|
+
const timer = setInterval(callback, interval);
|
|
245
|
+
this.timers.add(timer);
|
|
246
|
+
return timer;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get component statistics
|
|
250
|
+
*/
|
|
251
|
+
getStats() {
|
|
252
|
+
return {
|
|
253
|
+
id: this.id,
|
|
254
|
+
phase: this.phase,
|
|
255
|
+
isMounted: this.isMounted,
|
|
256
|
+
isDestroyed: this.isDestroyed,
|
|
257
|
+
childCount: this.children.size,
|
|
258
|
+
eventHandlers: this.eventHandlers.size,
|
|
259
|
+
subscriptions: this.subscriptions.size,
|
|
260
|
+
timers: this.timers.size,
|
|
261
|
+
state: this.state.getStats()
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Event system for components
|
|
267
|
+
*/
|
|
268
|
+
export class ComponentEventSystem {
|
|
269
|
+
constructor() {
|
|
270
|
+
this.events = new Map();
|
|
271
|
+
this.globalHandlers = new Map();
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Emit event to component or globally
|
|
275
|
+
*/
|
|
276
|
+
emit(eventName, data = {}, target = null) {
|
|
277
|
+
const event = {
|
|
278
|
+
name: eventName,
|
|
279
|
+
data,
|
|
280
|
+
target,
|
|
281
|
+
timestamp: Date.now(),
|
|
282
|
+
stopped: false,
|
|
283
|
+
preventDefault: false
|
|
284
|
+
};
|
|
285
|
+
// Target specific component
|
|
286
|
+
if (target) {
|
|
287
|
+
const instance = componentInstances.get(target);
|
|
288
|
+
if (instance) {
|
|
289
|
+
this._notifyHandlers(instance.id, event);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
// Global event
|
|
294
|
+
this._notifyGlobalHandlers(event);
|
|
295
|
+
}
|
|
296
|
+
return event;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Listen for events on component or globally
|
|
300
|
+
*/
|
|
301
|
+
on(eventName, handler, componentId = null) {
|
|
302
|
+
if (componentId) {
|
|
303
|
+
// Component-specific event
|
|
304
|
+
if (!this.events.has(componentId)) {
|
|
305
|
+
this.events.set(componentId, new Map());
|
|
306
|
+
}
|
|
307
|
+
const componentEvents = this.events.get(componentId);
|
|
308
|
+
if (!componentEvents.has(eventName)) {
|
|
309
|
+
componentEvents.set(eventName, new Set());
|
|
310
|
+
}
|
|
311
|
+
componentEvents.get(eventName).add(handler);
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
// Global event
|
|
315
|
+
if (!this.globalHandlers.has(eventName)) {
|
|
316
|
+
this.globalHandlers.set(eventName, new Set());
|
|
317
|
+
}
|
|
318
|
+
this.globalHandlers.get(eventName).add(handler);
|
|
319
|
+
}
|
|
320
|
+
// Return unsubscribe function
|
|
321
|
+
return () => this.off(eventName, handler, componentId);
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Remove event handler
|
|
325
|
+
*/
|
|
326
|
+
off(eventName, handler, componentId = null) {
|
|
327
|
+
if (componentId) {
|
|
328
|
+
const componentEvents = this.events.get(componentId);
|
|
329
|
+
if (componentEvents && componentEvents.has(eventName)) {
|
|
330
|
+
componentEvents.get(eventName).delete(handler);
|
|
331
|
+
// Cleanup empty sets
|
|
332
|
+
if (componentEvents.get(eventName).size === 0) {
|
|
333
|
+
componentEvents.delete(eventName);
|
|
334
|
+
if (componentEvents.size === 0) {
|
|
335
|
+
this.events.delete(componentId);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
const handlers = this.globalHandlers.get(eventName);
|
|
342
|
+
if (handlers) {
|
|
343
|
+
handlers.delete(handler);
|
|
344
|
+
if (handlers.size === 0) {
|
|
345
|
+
this.globalHandlers.delete(eventName);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Listen once
|
|
352
|
+
*/
|
|
353
|
+
once(eventName, handler, componentId = null) {
|
|
354
|
+
const onceHandler = (event) => {
|
|
355
|
+
handler(event);
|
|
356
|
+
this.off(eventName, onceHandler, componentId);
|
|
357
|
+
};
|
|
358
|
+
return this.on(eventName, onceHandler, componentId);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Notify component handlers
|
|
362
|
+
*/
|
|
363
|
+
_notifyHandlers(componentId, event) {
|
|
364
|
+
const componentEvents = this.events.get(componentId);
|
|
365
|
+
if (componentEvents && componentEvents.has(event.name)) {
|
|
366
|
+
const handlers = componentEvents.get(event.name);
|
|
367
|
+
for (const handler of handlers) {
|
|
368
|
+
if (event.stopped)
|
|
369
|
+
break;
|
|
370
|
+
try {
|
|
371
|
+
handler(event);
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
globalErrorHandler.handle(error, {
|
|
375
|
+
type: 'event-handler-error',
|
|
376
|
+
context: { event, handler: handler.toString() }
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Notify global handlers
|
|
384
|
+
*/
|
|
385
|
+
_notifyGlobalHandlers(event) {
|
|
386
|
+
const handlers = this.globalHandlers.get(event.name);
|
|
387
|
+
if (handlers) {
|
|
388
|
+
for (const handler of handlers) {
|
|
389
|
+
if (event.stopped)
|
|
390
|
+
break;
|
|
391
|
+
try {
|
|
392
|
+
handler(event);
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
globalErrorHandler.handle(error, {
|
|
396
|
+
type: 'global-event-handler-error',
|
|
397
|
+
context: { event, handler: handler.toString() }
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Clean up events for a component
|
|
405
|
+
*/
|
|
406
|
+
cleanup(componentId) {
|
|
407
|
+
this.events.delete(componentId);
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Get event statistics
|
|
411
|
+
*/
|
|
412
|
+
getStats() {
|
|
413
|
+
return {
|
|
414
|
+
componentEvents: this.events.size,
|
|
415
|
+
globalEvents: this.globalHandlers.size,
|
|
416
|
+
totalHandlers: Array.from(this.events.values()).reduce((sum, events) => {
|
|
417
|
+
return sum + Array.from(events.values()).reduce((eventSum, handlers) => {
|
|
418
|
+
return eventSum + handlers.size;
|
|
419
|
+
}, 0);
|
|
420
|
+
}, 0) + Array.from(this.globalHandlers.values()).reduce((sum, handlers) => {
|
|
421
|
+
return sum + handlers.size;
|
|
422
|
+
}, 0)
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Global event system instance
|
|
428
|
+
*/
|
|
429
|
+
export const eventSystem = new ComponentEventSystem();
|
|
430
|
+
/**
|
|
431
|
+
* Lifecycle hooks factory
|
|
432
|
+
*/
|
|
433
|
+
export function createLifecycleHooks() {
|
|
434
|
+
const hooks = {};
|
|
435
|
+
Object.values(LIFECYCLE_PHASES).forEach(phase => {
|
|
436
|
+
hooks[phase] = (callback) => {
|
|
437
|
+
// This would be called during component creation
|
|
438
|
+
const instance = getCurrentInstance();
|
|
439
|
+
if (instance) {
|
|
440
|
+
instance.hook(phase, callback);
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
});
|
|
444
|
+
return hooks;
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Get current component instance (context-based)
|
|
448
|
+
*/
|
|
449
|
+
let currentInstance = null;
|
|
450
|
+
export function getCurrentInstance() {
|
|
451
|
+
return currentInstance;
|
|
452
|
+
}
|
|
453
|
+
export function setCurrentInstance(instance) {
|
|
454
|
+
currentInstance = instance;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Lifecycle hooks for direct use
|
|
458
|
+
*/
|
|
459
|
+
export const useHooks = createLifecycleHooks();
|
|
460
|
+
/**
|
|
461
|
+
* Utility functions for component management
|
|
462
|
+
*/
|
|
463
|
+
export const componentUtils = {
|
|
464
|
+
/**
|
|
465
|
+
* Get component lifecycle instance
|
|
466
|
+
*/
|
|
467
|
+
getLifecycle(component) {
|
|
468
|
+
return componentInstances.get(component);
|
|
469
|
+
},
|
|
470
|
+
/**
|
|
471
|
+
* Create component with lifecycle
|
|
472
|
+
*/
|
|
473
|
+
createWithLifecycle(component, options = {}) {
|
|
474
|
+
const lifecycle = new ComponentLifecycle(component, options);
|
|
475
|
+
return {
|
|
476
|
+
component,
|
|
477
|
+
lifecycle,
|
|
478
|
+
mount: lifecycle.mount.bind(lifecycle),
|
|
479
|
+
unmount: lifecycle.unmount.bind(lifecycle),
|
|
480
|
+
update: lifecycle.update.bind(lifecycle)
|
|
481
|
+
};
|
|
482
|
+
},
|
|
483
|
+
/**
|
|
484
|
+
* Get all component instances
|
|
485
|
+
*/
|
|
486
|
+
getAllInstances() {
|
|
487
|
+
return Array.from(componentRegistry.values());
|
|
488
|
+
},
|
|
489
|
+
/**
|
|
490
|
+
* Find component by ID
|
|
491
|
+
*/
|
|
492
|
+
findById(id) {
|
|
493
|
+
return componentRegistry.get(id);
|
|
494
|
+
},
|
|
495
|
+
/**
|
|
496
|
+
* Emit event to component
|
|
497
|
+
*/
|
|
498
|
+
emit(component, eventName, data) {
|
|
499
|
+
return eventSystem.emit(eventName, data, component);
|
|
500
|
+
},
|
|
501
|
+
/**
|
|
502
|
+
* Listen to component events
|
|
503
|
+
*/
|
|
504
|
+
listen(component, eventName, handler) {
|
|
505
|
+
const lifecycle = componentInstances.get(component);
|
|
506
|
+
return eventSystem.on(eventName, handler, lifecycle?.id);
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
/**
|
|
510
|
+
* Component decorator for automatic lifecycle management
|
|
511
|
+
*/
|
|
512
|
+
export function withLifecycle(component, options = {}) {
|
|
513
|
+
return function LifecycleComponent(props = {}) {
|
|
514
|
+
const instance = componentUtils.getLifecycle(component);
|
|
515
|
+
if (!instance) {
|
|
516
|
+
const lifecycle = new ComponentLifecycle(component, options);
|
|
517
|
+
setCurrentInstance(lifecycle);
|
|
518
|
+
}
|
|
519
|
+
const result = typeof component === 'function' ? component(_props) : component;
|
|
520
|
+
setCurrentInstance(null);
|
|
521
|
+
return result;
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
export default ComponentLifecycle;
|
|
525
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/components/lifecycle.js"],"names":[],"mappings":"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"}
|
package/dist/core/html-utils.js
CHANGED
|
@@ -44,9 +44,9 @@ export function isVoidElement(tagName) {
|
|
|
44
44
|
]);
|
|
45
45
|
return voidElements.has(tagName.toLowerCase());
|
|
46
46
|
}
|
|
47
|
-
export function formatAttributes(
|
|
47
|
+
export function formatAttributes(_props) {
|
|
48
48
|
let formatted = '';
|
|
49
|
-
for (const key in
|
|
49
|
+
for (const key in _props) {
|
|
50
50
|
if (props.hasOwnProperty(key)) {
|
|
51
51
|
let value = props[key];
|
|
52
52
|
// Convert className to class for HTML output
|
|
@@ -109,10 +109,10 @@ export function formatAttributes(props) {
|
|
|
109
109
|
try {
|
|
110
110
|
value = value();
|
|
111
111
|
}
|
|
112
|
-
catch (
|
|
112
|
+
catch (error) {
|
|
113
113
|
console.warn(`Error executing function for attribute '${key}':`, {
|
|
114
|
-
|
|
115
|
-
stack:
|
|
114
|
+
error: error.message,
|
|
115
|
+
stack: error.stack,
|
|
116
116
|
attributeKey: key,
|
|
117
117
|
});
|
|
118
118
|
// Consider different fallback strategies based on attribute type
|
|
@@ -38,26 +38,26 @@ export function createTextNode(text) {
|
|
|
38
38
|
* Helper function to create common elements
|
|
39
39
|
*/
|
|
40
40
|
export const h = {
|
|
41
|
-
div: (
|
|
42
|
-
span: (
|
|
43
|
-
p: (
|
|
44
|
-
h1: (
|
|
45
|
-
h2: (
|
|
46
|
-
h3: (
|
|
47
|
-
h4: (
|
|
48
|
-
h5: (
|
|
49
|
-
h6: (
|
|
50
|
-
a: (
|
|
51
|
-
img: (
|
|
52
|
-
button: (
|
|
53
|
-
input: (
|
|
54
|
-
form: (
|
|
55
|
-
ul: (
|
|
56
|
-
ol: (
|
|
57
|
-
li: (
|
|
58
|
-
table: (
|
|
59
|
-
tr: (
|
|
60
|
-
td: (
|
|
61
|
-
th: (
|
|
41
|
+
div: (_props) => createElement('div', _props),
|
|
42
|
+
span: (_props) => createElement('span', _props),
|
|
43
|
+
p: (_props) => createElement('p', _props),
|
|
44
|
+
h1: (_props) => createElement('h1', _props),
|
|
45
|
+
h2: (_props) => createElement('h2', _props),
|
|
46
|
+
h3: (_props) => createElement('h3', _props),
|
|
47
|
+
h4: (_props) => createElement('h4', _props),
|
|
48
|
+
h5: (_props) => createElement('h5', _props),
|
|
49
|
+
h6: (_props) => createElement('h6', _props),
|
|
50
|
+
a: (_props) => createElement('a', _props),
|
|
51
|
+
img: (_props) => createElement('img', _props),
|
|
52
|
+
button: (_props) => createElement('button', _props),
|
|
53
|
+
input: (_props) => createElement('input', _props),
|
|
54
|
+
form: (_props) => createElement('form', _props),
|
|
55
|
+
ul: (_props) => createElement('ul', _props),
|
|
56
|
+
ol: (_props) => createElement('ol', _props),
|
|
57
|
+
li: (_props) => createElement('li', _props),
|
|
58
|
+
table: (_props) => createElement('table', _props),
|
|
59
|
+
tr: (_props) => createElement('tr', _props),
|
|
60
|
+
td: (_props) => createElement('td', _props),
|
|
61
|
+
th: (_props) => createElement('th', _props)
|
|
62
62
|
};
|
|
63
63
|
//# sourceMappingURL=object-factory.js.map
|
|
@@ -156,7 +156,7 @@ export function smartClone(obj, maxDepth = 10, currentDepth = 0) {
|
|
|
156
156
|
};
|
|
157
157
|
}
|
|
158
158
|
else {
|
|
159
|
-
cloned[tag] = shallowClone(
|
|
159
|
+
cloned[tag] = shallowClone(_props);
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
else {
|
|
@@ -333,7 +333,7 @@ export function normalizeChildren(children) {
|
|
|
333
333
|
/**
|
|
334
334
|
* Get children from a component's props
|
|
335
335
|
*/
|
|
336
|
-
export function getChildren(
|
|
336
|
+
export function getChildren(_props) {
|
|
337
337
|
if (!props || typeof props !== 'object') {
|
|
338
338
|
return [];
|
|
339
339
|
}
|
package/dist/dev/dev-tools.d.ts
CHANGED
|
@@ -77,7 +77,7 @@ export class DevTools {
|
|
|
77
77
|
/**
|
|
78
78
|
* Get component type
|
|
79
79
|
*/
|
|
80
|
-
getComponentType(component: any): "
|
|
80
|
+
getComponentType(component: any): "text" | "function" | "array" | "element" | "unknown";
|
|
81
81
|
/**
|
|
82
82
|
* Visualize component structure
|
|
83
83
|
*/
|