@dx-box/common
Version:
(DX) by providing common configurations for TypeScript, ESLint, Prettier, and automated Git hooks for formatting and linting.
3 lines (2 loc) • 1.02 kB
JavaScript
import t from"fs";import e from"path";import{pathToFileURL as u}from"url";import{deepMerge as f}from"./index.js";const c=async o=>{if(!t.existsSync(o))return{};const n=e.extname(o),s=e.basename(o);try{if(s==="package.json"){const r=JSON.parse(t.readFileSync(o,"utf-8"));return r.prettier||r.eslintConfig||{}}if(n===".js"||n===".cjs"||n===".mjs"){const r=await import(u(o).toString());return r.default||r}if(n===".json"||n===""||s==="tsconfig.json")return JSON.parse(t.readFileSync(o,"utf-8"));throw new Error(`Unsupported format: ${o}`)}catch(r){return console.warn(`\u26A0\uFE0F Failed to load config \u2192 ${o}: ${r.message}`),{}}},p=(o,n)=>Array.from(new Set([...o,...n])),S=async(o,n,s=!0)=>{const r=await c(o),a=await c(n),i=f(r,a,{arrayMerge:p}),m=e.extname(n),g=s||m===".json"||e.basename(n)==="tsconfig.json"?JSON.stringify(i,null,2):`module.exports = ${JSON.stringify(i,null,2)};
`;t.writeFileSync(n,g,"utf-8"),console.log(`\u2705 Configuration merged \u2192 ${e.basename(n)}`)};export{S as mergeConfig};