import marked from 'marked'; import renderer from './renderer'; import { getArray, normalizeObject } from './utilities'; import { loadFront } from 'yaml-front-matter'; import { safeLoad } from 'js-yaml'; import './style.styl'; import doc from './components/doc'; import styles from './components/styles'; import body from './components/body'; if (global) const fetch = require('node-fetch'); const storeDefaults = { externalStyle: [], style: {}, printStyle: {}, bodyClass: '' }; const transform = data => { global.headings = []; global.page = 1; return Promise.resolve(data) .then(data => loadFront(data)) .then(store => { store.__content = marked(store.__content, { xhtml: true, renderer, highlight: function(code) { return require('highlight.js').highlightAuto(code).value; } }); return normalizeObject(store); }) .then(store => store.preset ? fetch(store.preset) .then(response => response.text()) .then(text => safeLoad(text)) .then(preset => { store.preset = normalizeObject(preset); return store; }) : store ) .then(store => { store = { ...storeDefaults, preset: { ...storeDefaults, ...(store.preset || {}) }, ...store }; return store; }) .then(store => { console.log(store.externalStyle); const r = getArray(store.externalStyle).map(style => fetch(style).then(response => response.text()) ); r.unshift(store); return r; }) .then(p => Promise.all(p)) .then(([store, ...styles]) => { store.externalStyle = styles; return store; }) .then(store => { store.page = page; return doc( store.head, styles(store), body(store), getArray(store.additions || '').join('\n') ); }); }; export default transform;