materialuiupgraded
Version:
Material-UI's workspace package
61 lines (46 loc) • 1.51 kB
JavaScript
const headerRegExp = /---[\r\n]([\s\S]*)[\r\n]---/;
const titleRegExp = /# (.*)[\r\n]/;
const descriptionRegExp = /<p class="description">(.*)<\/p>[\r\n]/;
const headerKeyValueRegExp = /(.*): (.*)/g;
const emptyRegExp = /^\s*$/;
export function getHeaders(markdown) {
let header = markdown.match(headerRegExp);
if (!header) {
return {
components: [],
};
}
header = header[1];
let regexMatchs;
const headers = {};
// eslint-disable-next-line no-cond-assign
while ((regexMatchs = headerKeyValueRegExp.exec(header)) !== null) {
headers[regexMatchs[1]] = regexMatchs[2];
}
if (headers.components) {
headers.components = headers.components.split(', ').sort();
} else {
headers.components = [];
}
return headers;
}
export function getContents(markdown) {
return markdown
.replace(headerRegExp, '') // Remove header information
.split(/^{{|}}$/gm) // Split markdown into an array, separating demos
.filter(content => !emptyRegExp.test(content)); // Remove empty lines
}
export function getTitle(markdown) {
const matches = markdown.match(titleRegExp);
if (!matches || !matches[1]) {
throw new Error('Missing title in the page');
}
return matches[1];
}
export function getDescription(markdown) {
const matches = markdown.match(descriptionRegExp);
if (!matches || !matches[1]) {
throw new Error('Missing description in the page');
}
return matches[1];
}