UNPKG

@bookbox/core

Version:

Bookbox — e-book format

98 lines (97 loc) 3.12 kB
function getGroup({ condition, map, }) { return (schema) => { const result = []; const addContents = (schema) => { for (const item of schema) { if (typeof item === 'string') { continue; } if (condition(item)) { result.push(map(item)); continue; } addContents(item.children); } }; addContents(schema); return result; }; } function getObjectsByHeader({ condition }) { return (schema) => { const result = {}; let currentHeader = 'root'; const addContents = (schema) => { for (const item of schema) { if (typeof item === 'string') { continue; } if (item.name === 'header') { currentHeader = item.props.key; } if (condition(item)) { if (!result[currentHeader]) { result[currentHeader] = []; } result[currentHeader].push(item.props.key); continue; } addContents(item.children); } }; addContents(schema); return result; }; } const getContents = (builder, store, build) => { return getGroup({ condition: item => item.name === 'header' || item.name === 'title', map: item => { var _a; const headerProps = item.props; const header = { value: builder({ schema: [item], store, build }), text: item.children.map(value => (typeof value === 'string' ? value : JSON.stringify(value))).join(''), key: headerProps.key, level: (_a = headerProps.level) !== null && _a !== void 0 ? _a : 1, }; return header; }, }); }; const getImageList = getGroup({ condition: e => e.name === 'image', map: e => e, }); const getImages = (schema) => { const imageList = getImageList(schema); return { keysList: imageList.map(e => e.props.key), keysByHeader: getObjectsByHeader({ condition: e => e.name === 'image', })(schema), }; }; const getItemList = (name) => getGroup({ condition: e => e.name === name, map: e => e, }); const getItemMeta = (schema, name) => { const imageList = getItemList(name)(schema); return { keysList: imageList.map(e => { var _a; return ((_a = e.props.key) !== null && _a !== void 0 ? _a : ''); }), keysByHeader: getObjectsByHeader({ condition: e => e.name === name, })(schema), }; }; export function getBookMeta({ schema, store, builder, build, }) { return { contents: getContents(builder, store, build)(schema), media: { image: getItemMeta(schema, 'image'), video: getItemMeta(schema, 'video'), audio: getItemMeta(schema, 'audio'), }, }; }