@bookbox/core
Version:
Bookbox — e-book format
29 lines (28 loc) • 961 B
JavaScript
export function getStore({ builder, schema, externalBuilder, getBuild, }) {
const result = {
dataByKeys: {},
elementsByKeys: getElementsByKeys(schema),
};
for (const [key, elem] of Object.entries(result.elementsByKeys)) {
// FIXME: поздние ключи могут использовать более ранние, но не наоборот
result.dataByKeys[key] = builder({
schema: [elem],
store: result,
externalBuilder,
build: getBuild(result),
});
}
return result;
}
export function getElementsByKeys(schema) {
let result = {};
for (const item of schema) {
if (typeof item === 'string') {
continue;
}
result[item.props.key] = item;
const childrenRecord = getElementsByKeys(item.children);
result = Object.assign(Object.assign({}, result), childrenRecord);
}
return result;
}