UNPKG

@bookbox/core

Version:

Bookbox — e-book format

29 lines (28 loc) 961 B
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; }