gitlab-org--gitlab-foss/app/assets/javascripts/static_site_editor/services/parse_source_file.js

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;