the reminder not showing content on the card at dashboard view and the quizes are hardcoded must move to the db make api's for it
61 lines
1.5 KiB
JavaScript
61 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const fill = require('fill-range');
|
|
const utils = require('./utils');
|
|
|
|
const compile = (ast, options = {}) => {
|
|
const walk = (node, parent = {}) => {
|
|
const invalidBlock = utils.isInvalidBrace(parent);
|
|
const invalidNode = node.invalid === true && options.escapeInvalid === true;
|
|
const invalid = invalidBlock === true || invalidNode === true;
|
|
const prefix = options.escapeInvalid === true ? '\\' : '';
|
|
let output = '';
|
|
|
|
if (node.isOpen === true) {
|
|
return prefix + node.value;
|
|
}
|
|
|
|
if (node.isClose === true) {
|
|
console.log('node.isClose', prefix, node.value);
|
|
return prefix + node.value;
|
|
}
|
|
|
|
if (node.type === 'open') {
|
|
return invalid ? prefix + node.value : '(';
|
|
}
|
|
|
|
if (node.type === 'close') {
|
|
return invalid ? prefix + node.value : ')';
|
|
}
|
|
|
|
if (node.type === 'comma') {
|
|
return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';
|
|
}
|
|
|
|
if (node.value) {
|
|
return node.value;
|
|
}
|
|
|
|
if (node.nodes && node.ranges > 0) {
|
|
const args = utils.reduce(node.nodes);
|
|
const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });
|
|
|
|
if (range.length !== 0) {
|
|
return args.length > 1 && range.length > 1 ? `(${range})` : range;
|
|
}
|
|
}
|
|
|
|
if (node.nodes) {
|
|
for (const child of node.nodes) {
|
|
output += walk(child, node);
|
|
}
|
|
}
|
|
|
|
return output;
|
|
};
|
|
|
|
return walk(ast);
|
|
};
|
|
|
|
module.exports = compile;
|