UNPKG

@trailstash/ultra

Version:

A web based tool for making MapLibre GL maps with data from sources such as Overpass, GeoJSON, GPX, KML, TCX, etc

73 lines (68 loc) 1.86 kB
import YAML from "yaml"; const extractFrontMatter = (content) => { if (!content) { return { query: "", frontmatter: "" }; } const result = /(^---\n((?<frontmatter>.*)\n)?---(\n|$))?(?<query>.*)?/s.exec( content, ); if (result) { return { query: result.groups.query?.trim() || "", frontmatter: result.groups.frontmatter || "", }; } return { query: content?.trim() }; }; export const parseSettings = (query) => { let frontmatter; ({ frontmatter, query } = extractFrontMatter(query)); let settings = {}; if (frontmatter) { settings = YAML.parse(frontmatter, { merge: true }) || {}; const doc = YAML.parseDocument(frontmatter, undefined, { merge: true, }); if (doc.warnings.length > 0) { alert( "Warnings when parsing frontmatter:\n\n" + doc.warnings.map(({ message }) => message).join("\n"), ); } } if (query.trim()) { settings.query = query.trim(); } settings.mapStyle = settings.style; delete settings.style; return settings; }; export const setSetting = (query, { style, server }) => { let frontmatter; ({ frontmatter, query } = extractFrontMatter(query)); let settingsStr = ""; if (style) { settingsStr += `style: ${style}\n`; } if (server) { settingsStr += `server: ${server}\n`; } if (frontmatter && frontmatter.trim()) { const settings = YAML.parseDocument(frontmatter, undefined, { merge: true, }); if (style) { const queryStyle = settings.get("style"); if (!queryStyle || typeof queryStyle === "string") { settings.set("style", style); } else { queryStyle.set("extends", style); } } if (server) { settings.set("server", server); } settingsStr = YAML.stringify(settings); } return `---\n${settingsStr}---\n${query}`; };