47 lines
944 B
JavaScript
47 lines
944 B
JavaScript
import { frontMatterify, stringify } from './front_matterify';
|
|
|
|
const parseSourceFile = (raw) => {
|
|
let editable;
|
|
|
|
const syncContent = (newVal, isBody) => {
|
|
if (isBody) {
|
|
editable.content = newVal;
|
|
} else {
|
|
try {
|
|
editable = frontMatterify(newVal);
|
|
editable.isMatterValid = true;
|
|
} catch (e) {
|
|
editable.isMatterValid = false;
|
|
}
|
|
}
|
|
};
|
|
|
|
const content = (isBody = false) => (isBody ? editable.content : stringify(editable));
|
|
|
|
const matter = () => editable.matter;
|
|
|
|
const syncMatter = (settings) => {
|
|
editable.matter = settings;
|
|
};
|
|
|
|
const isModified = () => stringify(editable) !== raw;
|
|
|
|
const hasMatter = () => editable.hasMatter;
|
|
|
|
const isMatterValid = () => editable.isMatterValid;
|
|
|
|
syncContent(raw);
|
|
|
|
return {
|
|
matter,
|
|
isMatterValid,
|
|
syncMatter,
|
|
content,
|
|
syncContent,
|
|
isModified,
|
|
hasMatter,
|
|
};
|
|
};
|
|
|
|
export default parseSourceFile;
|