@coherent.js/core 1.0.0-beta.2 → 1.0.0-beta.5

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 (108) hide show
  1. package/dist/coherent.d.ts +10 -150
  2. package/dist/coherent.d.ts.map +1 -1
  3. package/dist/coherent.js +33 -166
  4. package/dist/coherent.js.map +1 -1
  5. package/dist/components/component-system.js +109 -109
  6. package/dist/core/html-utils.js +5 -5
  7. package/dist/core/object-factory.js +21 -21
  8. package/dist/core/object-utils.js +2 -2
  9. package/dist/database/adapters/mongodb.d.ts +15 -0
  10. package/dist/database/adapters/mongodb.d.ts.map +1 -0
  11. package/dist/database/adapters/mongodb.js +216 -0
  12. package/dist/database/adapters/mongodb.js.map +1 -0
  13. package/dist/database/adapters/mysql.d.ts +12 -0
  14. package/dist/database/adapters/mysql.d.ts.map +1 -0
  15. package/dist/database/adapters/mysql.js +171 -0
  16. package/dist/database/adapters/mysql.js.map +1 -0
  17. package/dist/database/adapters/postgresql.d.ts +12 -0
  18. package/dist/database/adapters/postgresql.d.ts.map +1 -0
  19. package/dist/database/adapters/postgresql.js +177 -0
  20. package/dist/database/adapters/postgresql.js.map +1 -0
  21. package/dist/database/adapters/sqlite.d.ts +15 -0
  22. package/dist/database/adapters/sqlite.d.ts.map +1 -0
  23. package/dist/database/adapters/sqlite.js +241 -0
  24. package/dist/database/adapters/sqlite.js.map +1 -0
  25. package/dist/database/connection-manager.d.ts +135 -0
  26. package/dist/database/connection-manager.d.ts.map +1 -0
  27. package/dist/database/connection-manager.js +362 -0
  28. package/dist/database/connection-manager.js.map +1 -0
  29. package/dist/database/index.d.ts +38 -0
  30. package/dist/database/index.d.ts.map +1 -0
  31. package/dist/database/index.js +60 -0
  32. package/dist/database/index.js.map +1 -0
  33. package/dist/database/middleware.d.ts +122 -0
  34. package/dist/database/middleware.d.ts.map +1 -0
  35. package/dist/database/middleware.js +390 -0
  36. package/dist/database/middleware.js.map +1 -0
  37. package/dist/database/migration.d.ts +62 -0
  38. package/dist/database/migration.d.ts.map +1 -0
  39. package/dist/database/migration.js +423 -0
  40. package/dist/database/migration.js.map +1 -0
  41. package/dist/database/model.d.ts +8 -0
  42. package/dist/database/model.d.ts.map +1 -0
  43. package/dist/database/model.js +167 -0
  44. package/dist/database/model.js.map +1 -0
  45. package/dist/database/query-builder.d.ts +111 -0
  46. package/dist/database/query-builder.d.ts.map +1 -0
  47. package/dist/database/query-builder.js +187 -0
  48. package/dist/database/query-builder.js.map +1 -0
  49. package/dist/database/utils.d.ts +196 -0
  50. package/dist/database/utils.d.ts.map +1 -0
  51. package/dist/database/utils.js +372 -0
  52. package/dist/database/utils.js.map +1 -0
  53. package/dist/dev/dev-tools.d.ts +1 -1
  54. package/dist/dev/dev-tools.js +28 -28
  55. package/dist/index.cjs +2 -1
  56. package/dist/index.cjs.map +2 -2
  57. package/dist/index.js +2 -1
  58. package/dist/index.js.map +2 -2
  59. package/dist/performance/bundle-optimizer.js +11 -11
  60. package/dist/performance/cache-manager.js +6 -6
  61. package/dist/performance/monitor.js +10 -10
  62. package/dist/performance/monitor.js.map +1 -1
  63. package/dist/rendering/base-renderer.js +13 -13
  64. package/dist/rendering/dom-renderer.d.ts +0 -23
  65. package/dist/rendering/dom-renderer.d.ts.map +1 -1
  66. package/dist/rendering/dom-renderer.js +9 -77
  67. package/dist/rendering/dom-renderer.js.map +1 -1
  68. package/dist/rendering/html-renderer.d.ts +0 -15
  69. package/dist/rendering/html-renderer.d.ts.map +1 -1
  70. package/dist/rendering/html-renderer.js +4 -85
  71. package/dist/rendering/html-renderer.js.map +1 -1
  72. package/dist/rendering/streaming-renderer.js +12 -12
  73. package/dist/utils/dependency-utils.js +2 -2
  74. package/dist/utils/normalization.js +1 -1
  75. package/dist/utils/validation.js +1 -1
  76. package/package.json +22 -1
  77. package/dist/components/lifecycle.d.ts +0 -212
  78. package/dist/components/lifecycle.d.ts.map +0 -1
  79. package/dist/components/lifecycle.js +0 -525
  80. package/dist/components/lifecycle.js.map +0 -1
  81. package/dist/forms/validation.d.ts +0 -271
  82. package/dist/forms/validation.d.ts.map +0 -1
  83. package/dist/forms/validation.js +0 -573
  84. package/dist/forms/validation.js.map +0 -1
  85. package/dist/performance/component-cache.d.ts +0 -120
  86. package/dist/performance/component-cache.d.ts.map +0 -1
  87. package/dist/performance/component-cache.js +0 -364
  88. package/dist/performance/component-cache.js.map +0 -1
  89. package/dist/rendering/css-manager.d.ts +0 -73
  90. package/dist/rendering/css-manager.d.ts.map +0 -1
  91. package/dist/rendering/css-manager.js +0 -176
  92. package/dist/rendering/css-manager.js.map +0 -1
  93. package/dist/rendering/vdom-diff.d.ts +0 -47
  94. package/dist/rendering/vdom-diff.d.ts.map +0 -1
  95. package/dist/rendering/vdom-diff.js +0 -416
  96. package/dist/rendering/vdom-diff.js.map +0 -1
  97. package/dist/routing/router.d.ts +0 -241
  98. package/dist/routing/router.d.ts.map +0 -1
  99. package/dist/routing/router.js +0 -648
  100. package/dist/routing/router.js.map +0 -1
  101. package/dist/state/reactive-state.d.ts +0 -166
  102. package/dist/state/reactive-state.d.ts.map +0 -1
  103. package/dist/state/reactive-state.js +0 -546
  104. package/dist/state/reactive-state.js.map +0 -1
  105. package/dist/utils/error-handler.d.ts +0 -148
  106. package/dist/utils/error-handler.d.ts.map +0 -1
  107. package/dist/utils/error-handler.js +0 -468
  108. package/dist/utils/error-handler.js.map +0 -1
@@ -1,573 +0,0 @@
1
- /**
2
- * Form Validation and Data Binding System for Coherent.js
3
- * Provides comprehensive form handling with reactive validation
4
- */
5
- import { ReactiveState, observable, computed } from '../state/reactive-state.js';
6
- import { globalErrorHandler } from '../utils/error-handler.js';
7
- /**
8
- * Built-in validation rules
9
- */
10
- export const validationRules = {
11
- required: (value, params = true) => {
12
- if (!params)
13
- return true;
14
- const isEmpty = value === null || value === undefined || value === '' ||
15
- (Array.isArray(value) && value.length === 0);
16
- return !isEmpty || 'This field is required';
17
- },
18
- min: (value, minValue) => {
19
- if (value === null || value === undefined || value === '')
20
- return true;
21
- const num = Number(value);
22
- return isNaN(num) || num >= minValue || `Value must be at least ${minValue}`;
23
- },
24
- max: (value, maxValue) => {
25
- if (value === null || value === undefined || value === '')
26
- return true;
27
- const num = Number(value);
28
- return isNaN(num) || num <= maxValue || `Value must be no more than ${maxValue}`;
29
- },
30
- minLength: (value, minLen) => {
31
- if (value === null || value === undefined)
32
- return true;
33
- const str = String(value);
34
- return str.length >= minLen || `Must be at least ${minLen} characters`;
35
- },
36
- maxLength: (value, maxLen) => {
37
- if (value === null || value === undefined)
38
- return true;
39
- const str = String(value);
40
- return str.length <= maxLen || `Must be no more than ${maxLen} characters`;
41
- },
42
- pattern: (value, regex, message = 'Invalid format') => {
43
- if (value === null || value === undefined || value === '')
44
- return true;
45
- const pattern = typeof regex === 'string' ? new RegExp(regex) : regex;
46
- return pattern.test(String(value)) || message;
47
- },
48
- email: (value) => {
49
- if (value === null || value === undefined || value === '')
50
- return true;
51
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
52
- return emailRegex.test(String(value)) || 'Please enter a valid email address';
53
- },
54
- url: (value) => {
55
- if (value === null || value === undefined || value === '')
56
- return true;
57
- try {
58
- new URL(String(value));
59
- return true;
60
- }
61
- catch {
62
- return 'Please enter a valid URL';
63
- }
64
- },
65
- numeric: (value) => {
66
- if (value === null || value === undefined || value === '')
67
- return true;
68
- return !isNaN(Number(value)) || 'Must be a valid number';
69
- },
70
- integer: (value) => {
71
- if (value === null || value === undefined || value === '')
72
- return true;
73
- const num = Number(value);
74
- return Number.isInteger(num) || 'Must be a whole number';
75
- },
76
- alpha: (value) => {
77
- if (value === null || value === undefined || value === '')
78
- return true;
79
- return /^[a-zA-Z]+$/.test(String(value)) || 'Must contain only letters';
80
- },
81
- alphanumeric: (value) => {
82
- if (value === null || value === undefined || value === '')
83
- return true;
84
- return /^[a-zA-Z0-9]+$/.test(String(value)) || 'Must contain only letters and numbers';
85
- },
86
- equals: (value, otherValue, fieldName = 'other field') => {
87
- return value === otherValue || `Must match ${fieldName}`;
88
- },
89
- oneOf: (value, options, message = 'Invalid selection') => {
90
- if (value === null || value === undefined || value === '')
91
- return true;
92
- return options.includes(value) || message;
93
- },
94
- custom: (value, validator, ...args) => {
95
- if (typeof validator !== 'function') {
96
- throw new Error('Custom validator must be a function');
97
- }
98
- return validator(value, ...args);
99
- }
100
- };
101
- /**
102
- * Field validation class
103
- */
104
- class FieldValidator {
105
- constructor(name, rules = {}, options = {}) {
106
- this.name = name;
107
- this.rules = rules;
108
- this.options = {
109
- validateOnChange: options.validateOnChange !== false,
110
- validateOnBlur: options.validateOnBlur !== false,
111
- debounce: options.debounce || 0,
112
- ...options
113
- };
114
- this.errors = observable([]);
115
- this.isValid = computed(() => this.errors.value.length === 0);
116
- this.isPending = observable(false);
117
- this.isTouched = observable(false);
118
- this.isDirty = observable(false);
119
- this._debounceTimer = null;
120
- }
121
- /**
122
- * Validate field value
123
- */
124
- async validate(value, formData = {}) {
125
- this.isPending.value = true;
126
- const errors = [];
127
- try {
128
- for (const [ruleName, ruleParams] of Object.entries(this.rules)) {
129
- const validator = validationRules[ruleName];
130
- if (!validator) {
131
- console.warn(`Unknown validation rule: ${ruleName}`);
132
- continue;
133
- }
134
- let result;
135
- // Handle async validators
136
- if (validator.constructor.name === 'AsyncFunction') {
137
- result = await validator(value, ruleParams, formData);
138
- }
139
- else {
140
- result = validator(value, ruleParams, formData);
141
- }
142
- if (result !== true) {
143
- errors.push(typeof result === 'string' ? result : `Invalid ${this.name}`);
144
- // Stop on first error unless configured otherwise
145
- if (!this.options.validateAll) {
146
- break;
147
- }
148
- }
149
- }
150
- }
151
- catch (error) {
152
- globalErrorHandler.handle(error, {
153
- type: 'validation-error',
154
- context: { field: this.name, value, rules: this.rules }
155
- });
156
- errors.push('Validation error occurred');
157
- }
158
- finally {
159
- this.isPending.value = false;
160
- }
161
- this.errors.value = errors;
162
- return this.isValid.value;
163
- }
164
- /**
165
- * Validate with debouncing
166
- */
167
- validateDebounced(value, formData = {}) {
168
- if (this.options.debounce <= 0) {
169
- return this.validate(value, formData);
170
- }
171
- return new Promise((resolve) => {
172
- if (this._debounceTimer) {
173
- clearTimeout(this._debounceTimer);
174
- }
175
- this._debounceTimer = setTimeout(async () => {
176
- const result = await this.validate(value, formData);
177
- resolve(result);
178
- }, this.options.debounce);
179
- });
180
- }
181
- /**
182
- * Mark field as touched
183
- */
184
- touch() {
185
- this.isTouched.value = true;
186
- }
187
- /**
188
- * Mark field as dirty
189
- */
190
- dirty() {
191
- this.isDirty.value = true;
192
- }
193
- /**
194
- * Reset field state
195
- */
196
- reset() {
197
- this.errors.value = [];
198
- this.isTouched.value = false;
199
- this.isDirty.value = false;
200
- this.isPending.value = false;
201
- }
202
- /**
203
- * Get field state
204
- */
205
- getState() {
206
- return {
207
- errors: this.errors.value,
208
- isValid: this.isValid.value,
209
- isPending: this.isPending.value,
210
- isTouched: this.isTouched.value,
211
- isDirty: this.isDirty.value,
212
- hasError: this.errors.value.length > 0
213
- };
214
- }
215
- }
216
- /**
217
- * Form validation and binding system
218
- */
219
- export class FormValidator {
220
- constructor(schema = {}, options = {}) {
221
- this.schema = schema;
222
- this.options = {
223
- validateOnSubmit: options.validateOnSubmit !== false,
224
- validateOnChange: options.validateOnChange !== false,
225
- stopOnFirstError: options.stopOnFirstError !== false,
226
- ...options
227
- };
228
- this.data = new ReactiveState();
229
- this.validators = new Map();
230
- this.isSubmitting = observable(false);
231
- this.submitCount = observable(0);
232
- // Initialize validators
233
- this.initializeValidators();
234
- // Computed properties for form state
235
- this.isValid = computed(() => {
236
- return Array.from(this.validators.values()).every(validator => validator.isValid.value);
237
- });
238
- this.isPending = computed(() => {
239
- return Array.from(this.validators.values()).some(validator => validator.isPending.value);
240
- });
241
- this.isTouched = computed(() => {
242
- return Array.from(this.validators.values()).some(validator => validator.isTouched.value);
243
- });
244
- this.isDirty = computed(() => {
245
- return Array.from(this.validators.values()).some(validator => validator.isDirty.value);
246
- });
247
- this.errors = computed(() => {
248
- const allErrors = {};
249
- for (const [name, validator] of this.validators.entries()) {
250
- if (validator.errors.value.length > 0) {
251
- allErrors[name] = validator.errors.value;
252
- }
253
- }
254
- return allErrors;
255
- });
256
- }
257
- /**
258
- * Initialize field validators from schema
259
- */
260
- initializeValidators() {
261
- for (const [fieldName, fieldSchema] of Object.entries(this.schema)) {
262
- const rules = fieldSchema.rules || fieldSchema;
263
- const _options = fieldSchema.options || {};
264
- this.validators.set(fieldName, new FieldValidator(fieldName, rules, options));
265
- // Initialize data
266
- this.data.set(fieldName, fieldSchema.default || '');
267
- // Watch for changes if validation on change is enabled
268
- if (this.options.validateOnChange) {
269
- this.data.watch(fieldName, (newValue) => {
270
- const validator = this.validators.get(fieldName);
271
- validator.dirty();
272
- if (validator.options.validateOnChange) {
273
- validator.validateDebounced(newValue, this.data.toObject());
274
- }
275
- });
276
- }
277
- }
278
- }
279
- /**
280
- * Set field value
281
- */
282
- setField(name, value) {
283
- this.data.set(name, value);
284
- const validator = this.validators.get(name);
285
- if (validator) {
286
- validator.dirty();
287
- }
288
- }
289
- /**
290
- * Get field value
291
- */
292
- getField(name) {
293
- return this.data.get(name);
294
- }
295
- /**
296
- * Set multiple fields
297
- */
298
- setFields(fields) {
299
- this.data.batch(fields);
300
- }
301
- /**
302
- * Get all form data
303
- */
304
- getData() {
305
- return this.data.toObject();
306
- }
307
- /**
308
- * Validate specific field
309
- */
310
- async validateField(name) {
311
- const validator = this.validators.get(name);
312
- if (!validator) {
313
- console.warn(`No validator found for field: ${name}`);
314
- return true;
315
- }
316
- const value = this.data.get(name);
317
- return validator.validate(value, this.data.toObject());
318
- }
319
- /**
320
- * Validate all fields
321
- */
322
- async validateAll() {
323
- const validationPromises = [];
324
- for (const [name, validator] of this.validators.entries()) {
325
- const value = this.data.get(name);
326
- validationPromises.push(validator.validate(value, this.data.toObject()));
327
- }
328
- const results = await Promise.all(validationPromises);
329
- return results.every(result => result === true);
330
- }
331
- /**
332
- * Handle field blur event
333
- */
334
- handleBlur(name) {
335
- const validator = this.validators.get(name);
336
- if (validator) {
337
- validator.touch();
338
- if (validator.options.validateOnBlur) {
339
- const value = this.data.get(name);
340
- validator.validate(value, this.data.toObject());
341
- }
342
- }
343
- }
344
- /**
345
- * Handle form submission
346
- */
347
- async handleSubmit(submitHandler) {
348
- if (this.isSubmitting.value) {
349
- return false;
350
- }
351
- this.isSubmitting.value = true;
352
- this.submitCount.value += 1;
353
- try {
354
- // Mark all fields as touched
355
- for (const validator of this.validators.values()) {
356
- validator.touch();
357
- }
358
- // Validate all fields if required
359
- let isValid = true;
360
- if (this.options.validateOnSubmit) {
361
- isValid = await this.validateAll();
362
- }
363
- if (!isValid) {
364
- return false;
365
- }
366
- // Execute submit handler
367
- if (typeof submitHandler === 'function') {
368
- const result = await submitHandler(this.getData(), this);
369
- return result !== false;
370
- }
371
- return true;
372
- }
373
- catch (error) {
374
- globalErrorHandler.handle(error, {
375
- type: 'form-submit-error',
376
- context: { formData: this.getData() }
377
- });
378
- return false;
379
- }
380
- finally {
381
- this.isSubmitting.value = false;
382
- }
383
- }
384
- /**
385
- * Reset form to initial state
386
- */
387
- reset() {
388
- // Reset data to defaults
389
- for (const [fieldName, fieldSchema] of Object.entries(this.schema)) {
390
- this.data.set(fieldName, fieldSchema.default || '');
391
- }
392
- // Reset validators
393
- for (const validator of this.validators.values()) {
394
- validator.reset();
395
- }
396
- this.submitCount.value = 0;
397
- }
398
- /**
399
- * Add custom validator
400
- */
401
- addValidator(name, rules, options = {}) {
402
- this.validators.set(name, new FieldValidator(name, rules, options));
403
- if (!this.data.has(name)) {
404
- this.data.set(name, '');
405
- }
406
- }
407
- /**
408
- * Remove validator
409
- */
410
- removeValidator(name) {
411
- this.validators.delete(name);
412
- }
413
- /**
414
- * Get field validator
415
- */
416
- getValidator(name) {
417
- return this.validators.get(name);
418
- }
419
- /**
420
- * Get form state summary
421
- */
422
- getState() {
423
- return {
424
- isValid: this.isValid.value,
425
- isPending: this.isPending.value,
426
- isTouched: this.isTouched.value,
427
- isDirty: this.isDirty.value,
428
- isSubmitting: this.isSubmitting.value,
429
- submitCount: this.submitCount.value,
430
- errors: this.errors.value,
431
- data: this.getData()
432
- };
433
- }
434
- /**
435
- * Watch form state changes
436
- */
437
- watch(callback, options = {}) {
438
- const unsubscribers = [];
439
- // Watch form-level computed properties
440
- if (options.watchValid !== false) {
441
- unsubscribers.push(this.isValid.watch(callback));
442
- }
443
- if (options.watchPending !== false) {
444
- unsubscribers.push(this.isPending.watch(callback));
445
- }
446
- if (options.watchErrors !== false) {
447
- unsubscribers.push(this.errors.watch(callback));
448
- }
449
- // Return unsubscribe function
450
- return () => {
451
- unsubscribers.forEach(unsub => unsub());
452
- };
453
- }
454
- /**
455
- * Cleanup form
456
- */
457
- destroy() {
458
- this.data.destroy();
459
- this.validators.clear();
460
- }
461
- }
462
- /**
463
- * Create form validator
464
- */
465
- export function createForm(schema, options = {}) {
466
- return new FormValidator(schema, options);
467
- }
468
- /**
469
- * Data binding utilities
470
- */
471
- export const binding = {
472
- /**
473
- * Two-way data binding for input elements
474
- */
475
- model(form, fieldName, options = {}) {
476
- return {
477
- value: form.getField(fieldName),
478
- oninput: (event) => {
479
- const value = options.number ? Number(event.target.value) : event.target.value;
480
- form.setField(fieldName, value);
481
- },
482
- onblur: () => {
483
- form.handleBlur(fieldName);
484
- }
485
- };
486
- },
487
- /**
488
- * Checkbox binding
489
- */
490
- checkbox(form, fieldName) {
491
- return {
492
- checked: Boolean(form.getField(fieldName)),
493
- onchange: (event) => {
494
- form.setField(fieldName, event.target.checked);
495
- },
496
- onblur: () => {
497
- form.handleBlur(fieldName);
498
- }
499
- };
500
- },
501
- /**
502
- * Select dropdown binding
503
- */
504
- select(form, fieldName, options = {}) {
505
- return {
506
- value: form.getField(fieldName),
507
- onchange: (event) => {
508
- const value = options.multiple
509
- ? Array.from(event.target.selectedOptions, opt => opt.value)
510
- : event.target.value;
511
- form.setField(fieldName, value);
512
- },
513
- onblur: () => {
514
- form.handleBlur(fieldName);
515
- }
516
- };
517
- },
518
- /**
519
- * Radio button binding
520
- */
521
- radio(form, fieldName, value) {
522
- return {
523
- checked: form.getField(fieldName) === value,
524
- value: value,
525
- onchange: (event) => {
526
- if (event.target.checked) {
527
- form.setField(fieldName, value);
528
- }
529
- }
530
- };
531
- }
532
- };
533
- /**
534
- * Form component helpers
535
- */
536
- export const formComponents = {
537
- /**
538
- * Validation error display
539
- */
540
- ValidationError({ form, field, className = 'validation-error' }) {
541
- const validator = form.getValidator(field);
542
- if (!validator || validator.errors.value.length === 0) {
543
- return null;
544
- }
545
- return {
546
- div: {
547
- className,
548
- children: validator.errors.value.map(error => ({
549
- span: { text: error, className: 'error-message' }
550
- }))
551
- }
552
- };
553
- },
554
- /**
555
- * Form field wrapper with validation
556
- */
557
- FormField({ form, field, label, children, showErrors = true }) {
558
- const validator = form.getValidator(field);
559
- const state = validator ? validator.getState() : {};
560
- return {
561
- div: {
562
- className: `form-field ${state.hasError ? 'has-error' : ''} ${state.isTouched ? 'touched' : ''}`,
563
- children: [
564
- label ? { label: { text: label, htmlFor: field } } : null,
565
- children,
566
- showErrors && state.hasError ?
567
- formComponents.ValidationError({ form, field }) : null
568
- ].filter(Boolean)
569
- }
570
- };
571
- }
572
- };
573
- //# sourceMappingURL=validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/forms/validation.js"],"names":[],"mappings":"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"}