UNPKG

@enkidevs/curriculum-compiler-string

Version:

Compiles Enki Curriculum AST into a markdown string

42 lines (36 loc) 1.03 kB
const unified = require('unified'); const { contentTypes } = require('@enkidevs/curriculum-helpers'); const plugins = require('./plugins'); function getPlugins(type) { switch (type) { case contentTypes.MARKDOWN: return [...plugins.markdown]; case contentTypes.EXERCISE: case contentTypes.INSIGHT: return [...plugins.markdown, ...plugins.insight, ...plugins.question]; case contentTypes.QUESTION: return [...plugins.markdown, ...plugins.question]; default: throw new Error(`Invalid content type type: ${type}`); } } function getCompiler(type) { function compile(ast) { return new Promise((resolve, reject) => { const processor = unified().use(getPlugins(type)); processor.run(ast, (err, res) => err ? reject(err) : resolve(processor.stringify(res)) ); }); } function compileSync(ast) { return unified().use(getPlugins(type)).stringify(ast); } return { compile, compileSync, }; } module.exports = { getCompiler, };