@bookbox/core
Version:
Bookbox — e-book format
102 lines (101 loc) • 3.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBookMeta = void 0;
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),
};
};
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'),
},
};
}
exports.getBookMeta = getBookMeta;