@coherent.js/core 1.0.0-beta.6 → 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 +157 -4
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +153 -4
- 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 +5 -1
- 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
package/dist/index.js
CHANGED
|
@@ -1193,7 +1193,13 @@ function formatAttributes(props) {
|
|
|
1193
1193
|
}
|
|
1194
1194
|
}
|
|
1195
1195
|
}
|
|
1196
|
-
if (value ===
|
|
1196
|
+
if (attributeName === "style" && typeof value === "object" && value !== null) {
|
|
1197
|
+
const cssString = Object.entries(value).map(([prop, val]) => {
|
|
1198
|
+
const kebabProp = prop.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
|
|
1199
|
+
return `${kebabProp}: ${val}`;
|
|
1200
|
+
}).join("; ");
|
|
1201
|
+
formatted += ` ${attributeName}="${escapeHtml(cssString)}"`;
|
|
1202
|
+
} else if (value === true) {
|
|
1197
1203
|
formatted += ` ${attributeName}`;
|
|
1198
1204
|
} else if (value !== false && value !== null && value !== void 0) {
|
|
1199
1205
|
formatted += ` ${attributeName}="${escapeHtml(String(value))}"`;
|
|
@@ -1414,6 +1420,9 @@ function createCacheManager(options = {}) {
|
|
|
1414
1420
|
}
|
|
1415
1421
|
clear();
|
|
1416
1422
|
}
|
|
1423
|
+
function hashObject(obj) {
|
|
1424
|
+
return simpleHash(JSON.stringify(obj));
|
|
1425
|
+
}
|
|
1417
1426
|
return {
|
|
1418
1427
|
get,
|
|
1419
1428
|
set,
|
|
@@ -1423,6 +1432,7 @@ function createCacheManager(options = {}) {
|
|
|
1423
1432
|
cleanup,
|
|
1424
1433
|
destroy,
|
|
1425
1434
|
generateCacheKey,
|
|
1435
|
+
hashObject,
|
|
1426
1436
|
get memoryUsage() {
|
|
1427
1437
|
return memoryUsage;
|
|
1428
1438
|
},
|
|
@@ -6137,6 +6147,97 @@ var eventSystem2 = {
|
|
|
6137
6147
|
};
|
|
6138
6148
|
var events_default = eventSystem2;
|
|
6139
6149
|
|
|
6150
|
+
// src/components/enhanced-composition.js
|
|
6151
|
+
var hoc = {
|
|
6152
|
+
/**
|
|
6153
|
+
* Wrap component with additional props
|
|
6154
|
+
*/
|
|
6155
|
+
withProps(additionalProps) {
|
|
6156
|
+
return (Component2) => (props) => {
|
|
6157
|
+
return Component2({ ...props, ...additionalProps });
|
|
6158
|
+
};
|
|
6159
|
+
},
|
|
6160
|
+
/**
|
|
6161
|
+
* Conditional rendering HOC
|
|
6162
|
+
*/
|
|
6163
|
+
withCondition(condition) {
|
|
6164
|
+
return (Component2) => (props) => {
|
|
6165
|
+
return condition(props) ? Component2(props) : null;
|
|
6166
|
+
};
|
|
6167
|
+
},
|
|
6168
|
+
/**
|
|
6169
|
+
* Loading state HOC
|
|
6170
|
+
*/
|
|
6171
|
+
withLoading(loadingComponent) {
|
|
6172
|
+
return (Component2) => (props) => {
|
|
6173
|
+
return props.loading ? loadingComponent(props) : Component2(props);
|
|
6174
|
+
};
|
|
6175
|
+
},
|
|
6176
|
+
/**
|
|
6177
|
+
* Error boundary HOC
|
|
6178
|
+
*/
|
|
6179
|
+
withError(errorComponent) {
|
|
6180
|
+
return (Component2) => (props) => {
|
|
6181
|
+
try {
|
|
6182
|
+
return Component2(props);
|
|
6183
|
+
} catch (error) {
|
|
6184
|
+
return errorComponent({ error, ...props });
|
|
6185
|
+
}
|
|
6186
|
+
};
|
|
6187
|
+
},
|
|
6188
|
+
/**
|
|
6189
|
+
* Memoization HOC
|
|
6190
|
+
*/
|
|
6191
|
+
withMemo(getMemoKey) {
|
|
6192
|
+
const cache = /* @__PURE__ */ new Map();
|
|
6193
|
+
return (Component2) => (props) => {
|
|
6194
|
+
const key = getMemoKey ? getMemoKey(props) : JSON.stringify(props);
|
|
6195
|
+
if (cache.has(key)) {
|
|
6196
|
+
return cache.get(key);
|
|
6197
|
+
}
|
|
6198
|
+
const result = Component2(props);
|
|
6199
|
+
cache.set(key, result);
|
|
6200
|
+
return result;
|
|
6201
|
+
};
|
|
6202
|
+
}
|
|
6203
|
+
};
|
|
6204
|
+
var compose = {
|
|
6205
|
+
/**
|
|
6206
|
+
* Combine multiple components into one
|
|
6207
|
+
*/
|
|
6208
|
+
combine(...components) {
|
|
6209
|
+
return (props) => ({
|
|
6210
|
+
fragment: {
|
|
6211
|
+
children: components.map((Component2) => Component2(props))
|
|
6212
|
+
}
|
|
6213
|
+
});
|
|
6214
|
+
},
|
|
6215
|
+
/**
|
|
6216
|
+
* Pipe components through transformations
|
|
6217
|
+
*/
|
|
6218
|
+
pipe(...transformers) {
|
|
6219
|
+
return (Component2) => {
|
|
6220
|
+
return transformers.reduce((acc, transformer) => transformer(acc), Component2);
|
|
6221
|
+
};
|
|
6222
|
+
},
|
|
6223
|
+
/**
|
|
6224
|
+
* Branch based on conditions
|
|
6225
|
+
*/
|
|
6226
|
+
branch(condition, leftComponent, rightComponent) {
|
|
6227
|
+
return (props) => {
|
|
6228
|
+
return condition(props) ? leftComponent(props) : rightComponent(props);
|
|
6229
|
+
};
|
|
6230
|
+
},
|
|
6231
|
+
/**
|
|
6232
|
+
* Render component or fallback
|
|
6233
|
+
*/
|
|
6234
|
+
maybe(Component2, fallback = null) {
|
|
6235
|
+
return (props) => {
|
|
6236
|
+
return Component2 ? Component2(props) : fallback;
|
|
6237
|
+
};
|
|
6238
|
+
}
|
|
6239
|
+
};
|
|
6240
|
+
|
|
6140
6241
|
// src/index.js
|
|
6141
6242
|
var scopeCounter = { value: 0 };
|
|
6142
6243
|
function generateScopeId() {
|
|
@@ -6191,10 +6292,46 @@ function dangerouslySetInnerContent(content) {
|
|
|
6191
6292
|
__trusted: true
|
|
6192
6293
|
};
|
|
6193
6294
|
}
|
|
6295
|
+
function injectHydrationAttributes(component, options) {
|
|
6296
|
+
if (!component || typeof component !== "object" || Array.isArray(component)) {
|
|
6297
|
+
return component;
|
|
6298
|
+
}
|
|
6299
|
+
const tagName = Object.keys(component)[0];
|
|
6300
|
+
if (!tagName) return component;
|
|
6301
|
+
const props = component[tagName];
|
|
6302
|
+
if (typeof props !== "object" || props === null) return component;
|
|
6303
|
+
const injected = { ...props };
|
|
6304
|
+
if (options.hydratable) {
|
|
6305
|
+
injected["data-hydratable"] = "true";
|
|
6306
|
+
}
|
|
6307
|
+
if (options.island) {
|
|
6308
|
+
injected["data-coherent-island"] = "true";
|
|
6309
|
+
}
|
|
6310
|
+
if (options._islandComponentName) {
|
|
6311
|
+
injected["data-coherent-island-component"] = options._islandComponentName;
|
|
6312
|
+
}
|
|
6313
|
+
return { [tagName]: injected };
|
|
6314
|
+
}
|
|
6315
|
+
function Island(componentFn) {
|
|
6316
|
+
const componentName = componentFn.name || "Anonymous";
|
|
6317
|
+
return function IslandComponent(props) {
|
|
6318
|
+
const result = componentFn(props);
|
|
6319
|
+
return injectHydrationAttributes(result, {
|
|
6320
|
+
island: true,
|
|
6321
|
+
_islandComponentName: componentName
|
|
6322
|
+
});
|
|
6323
|
+
};
|
|
6324
|
+
}
|
|
6194
6325
|
function render2(obj, options = {}) {
|
|
6195
6326
|
const scoped = options.scoped ?? options.encapsulate ?? false;
|
|
6196
|
-
const { scoped: _scoped, encapsulate: _encapsulate, ...rendererOptions } = options;
|
|
6197
|
-
|
|
6327
|
+
const { scoped: _scoped, encapsulate: _encapsulate, hydratable: _hydratable, island: _island, ...rendererOptions } = options;
|
|
6328
|
+
let component = scoped ? renderScopedComponent(obj) : obj;
|
|
6329
|
+
if (typeof component === "function") {
|
|
6330
|
+
component = component(options);
|
|
6331
|
+
}
|
|
6332
|
+
if (_hydratable || _island) {
|
|
6333
|
+
component = injectHydrationAttributes(component, { hydratable: _hydratable, island: _island });
|
|
6334
|
+
}
|
|
6198
6335
|
return render(component, rendererOptions);
|
|
6199
6336
|
}
|
|
6200
6337
|
function renderScopedComponent(component) {
|
|
@@ -6268,6 +6405,14 @@ var _corePackageJson = JSON.parse(
|
|
|
6268
6405
|
readFileSync(new URL("../package.json", import.meta.url), "utf-8")
|
|
6269
6406
|
);
|
|
6270
6407
|
var VERSION = _corePackageJson.version;
|
|
6408
|
+
var fp = {
|
|
6409
|
+
/**
|
|
6410
|
+
* Curried map: fp.map(fn)(array)
|
|
6411
|
+
*/
|
|
6412
|
+
map(fn) {
|
|
6413
|
+
return (array) => array.map(fn);
|
|
6414
|
+
}
|
|
6415
|
+
};
|
|
6271
6416
|
var coherent = {
|
|
6272
6417
|
// Core rendering
|
|
6273
6418
|
render: render2,
|
|
@@ -6337,9 +6482,11 @@ export {
|
|
|
6337
6482
|
FORBIDDEN_CHILDREN,
|
|
6338
6483
|
GlobalErrorHandler,
|
|
6339
6484
|
HTMLNestingError,
|
|
6485
|
+
Island,
|
|
6340
6486
|
LIFECYCLE_PHASES,
|
|
6341
6487
|
VERSION,
|
|
6342
6488
|
checkPeerDependencies,
|
|
6489
|
+
compose,
|
|
6343
6490
|
createActionHandlers,
|
|
6344
6491
|
createAsyncErrorBoundary,
|
|
6345
6492
|
createComponent,
|
|
@@ -6364,6 +6511,7 @@ export {
|
|
|
6364
6511
|
emitSync,
|
|
6365
6512
|
evaluateLazy,
|
|
6366
6513
|
events_default as eventSystem,
|
|
6514
|
+
fp,
|
|
6367
6515
|
getComponent,
|
|
6368
6516
|
getRegisteredComponents,
|
|
6369
6517
|
globalDOMIntegration,
|
|
@@ -6371,6 +6519,7 @@ export {
|
|
|
6371
6519
|
h,
|
|
6372
6520
|
handleAction,
|
|
6373
6521
|
hasChildren,
|
|
6522
|
+
hoc,
|
|
6374
6523
|
importPeerDependency,
|
|
6375
6524
|
initializeDOMIntegration,
|
|
6376
6525
|
isCoherentComponent,
|
|
@@ -6413,7 +6562,7 @@ export {
|
|
|
6413
6562
|
* Coherent.js - Object-Based Rendering Framework
|
|
6414
6563
|
* A pure JavaScript framework for server-side rendering using natural object syntax
|
|
6415
6564
|
*
|
|
6416
|
-
* @version 1.0.0-beta.
|
|
6565
|
+
* @version 1.0.0-beta.7
|
|
6417
6566
|
* @author Coherent Framework Team
|
|
6418
6567
|
* @license MIT
|
|
6419
6568
|
*/
|