Fix async lifecycle ordering, add _spa_init boot phase, update to jqhtml _load_only/_load_render_only flags

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2026-03-06 22:33:38 +00:00
parent 11c95a2886
commit d1ac456279
2718 changed files with 70593 additions and 6320 deletions

View File

@@ -8,23 +8,31 @@ function appendOrSet(a, b) {
return b || null;
}
function sliceProps(obj, props) {
function extractProps(obj, props) {
const result = Object.create(null);
for (const [key, value] of Object.entries(obj)) {
if (value) {
result[key] = {};
for (const prop of Object.keys(value)) {
if (props.includes(prop)) {
result[key][prop] = value[prop];
}
}
for (const prop of Object.keys(obj)) {
if (props.includes(prop)) {
result[prop] = obj[prop];
}
}
return result;
}
function mergeDicts(base, ext, fields) {
const result = { ...base };
for (const [key, props] of Object.entries(ext)) {
result[key] = {
...result[key],
...fields ? extractProps(props, fields) : props
};
}
return result;
}
export default function mix(dest, src) {
const result = { ...dest };
@@ -87,14 +95,6 @@ export default function mix(dest, src) {
}
break;
case 'scope':
case 'features':
result[prop] = { ...dest[prop] };
for (const [name, props] of Object.entries(value)) {
result[prop][name] = { ...result[prop][name], ...props };
}
break;
case 'parseContext':
result[prop] = {
...dest[prop],
@@ -102,19 +102,18 @@ export default function mix(dest, src) {
};
break;
case 'scope':
case 'features':
result[prop] = mergeDicts(dest[prop], value);
break;
case 'atrule':
case 'pseudo':
result[prop] = {
...dest[prop],
...sliceProps(value, ['parse'])
};
result[prop] = mergeDicts(dest[prop], value, ['parse']);
break;
case 'node':
result[prop] = {
...dest[prop],
...sliceProps(value, ['name', 'structure', 'parse', 'generate', 'walkContext'])
};
result[prop] = mergeDicts(dest[prop], value, ['name', 'structure', 'parse', 'generate', 'walkContext']);
break;
}
}