const Exp = {}; Exp.Fs = require('fs'); Exp.ConfigParser = require('./config-ini-parser').ConfigIniParser; // https://stackoverflow.com/a/69049676 Exp.importAll = function importAll(){ delete this.importAll; Object.assign(global, this); }; Exp.ParseMeta = (Raw) => { let Mid = { Meta: "", Macros: "" }; let Data = { Meta: {}, Macros: {}, IsToml: false }; const Lines = Raw.trim().split('\n'); if (Lines[0].trim() === '+++' && Lines.slice(-1)[0].trim() === '+++') { Data.IsToml = true; Lines = Lines.slice(1, -1); } for (let i=0; i<Lines.length; i++) { let Type; let Line = Lines[i].trim(); if (Line.startsWith('//')) { Line = Line.slice('2').trim(); } if (['%', '$'].includes(Line[0])) { if (Line.startsWith('%')) { Type = 'Meta'; } else if (Line.startsWith('$')) { Type = 'Macros'; } } else { if (!Data.IsToml) { continue; } Mid.Meta += Line.trim() + '\n'; } Mid[Type] += Line.substring(1).trim() + '\n'; } Object.keys(Mid).forEach((Type) => { const Items = new ConfigParser().parse(Mid[Type]).items(); Items.forEach((Item) => { Data[Type][Item[0]] = Item[1]; }); }); return Data; }; module.exports = Exp;