constatic
Version:
Constatic cli
7 lines (6 loc) • 1.13 kB
JavaScript
import p from"node:path";import{fileExists as l}from"./helper.files.js";import*as f from"node:fs/promises";async function v(o){const r=(await f.readFile(o,"utf8")).split(/\r?\n/),n={};for(const t of r){const s=t.trim();if(!s||s.startsWith("#"))continue;const[c,...e]=s.split("="),a=e.join("=").trim().replace(/^['"]|['"]$/g,"");n[c.trim()]=a}return n}async function g(o){const i={},r=[];if(await l(o).catch(()=>!1)){const n=await f.readFile(o,"utf-8").catch(()=>"");for(const t of n.split(`
`)){const s=t.trim();if(!s||s.startsWith("#")){r.push(t);continue}const[c,...e]=s.split("=");i[c]=e.join("=").trim(),r.push(t)}}return{set(n,t){i[n]=t},remove(n){delete i[n]},async save(){const n=new Set(Object.keys(i)),t=[];for(const e of r){const a=e.trim();if(!a||a.startsWith("#")){t.push(e);continue}const[m]=a.split("=");i[m]!==void 0&&(t.push(`${m}=${i[m]}`),n.delete(m))}for(const e of n)t.push(`${e}=${i[e]}`);await f.writeFile(o,t.join(`
`)+`
`,"utf-8");const s=p.join(p.dirname(o),".env.example"),c=Object.keys(i).map(e=>`${e}=`);await f.writeFile(s,c.join(`
`)+`
`,"utf-8")}}}export{g as createEnvEditor,v as parseEnvFile};