UNPKG

@neodx/pkg-misc

Version:

Collection of utilities for common cases in package development - smart dependencies updates, simple formatting with auto-detection of prettier config, etc.

90 lines (89 loc) 2.81 kB
import { hasOwn as e, entries as n, keys as t, filterObject as r, isTruthy as i, sortObjectByKeys as l } from '@neodx/std'; import { gt as o, coerce as s } from 'semver'; import { isFile as a } from '@neodx/fs'; import { resolve as c } from 'pathe'; let d = { '*': 2, next: 1, latest: 0, previous: -1, legacy: -2 }; function p(n, t) { let r = e(d, n), i = e(d, t); return r && i ? d[n] > d[t] : !!r || !!i || o(s(n), s(t)); } function u(t, r) { let i = n(t).filter(([n, t]) => e(r, n) && p(t, r[n])); return i.length > 0 ? Object.fromEntries(i) : null; } function f(l, o) { let s = n(o) .map(([n, i]) => { var o; let s = (function (n, t, r) { let i = h[n]; return t.filter(n => i.every(t => !e(r[t] ?? {}, n))); })(n, t(i), l), a = (o = l[n] ?? null) ? u(i, o) : null; return s.length > 0 || a ? [n, r(i, (e, n) => s.includes(n) || !!a?.[n])] : null; }) .filter(i); return s.length > 0 ? g({ ...l, ...Object.fromEntries(s.map(([e, n]) => [e, { ...l[e], ...n }])) }) : null; } function m(t, l) { let o = n(l) .map(([n, r]) => { let i = r.filter(r => e(t[n] ?? {}, r)); return i.length > 0 ? [n, i] : null; }) .filter(i); return o.length > 0 ? g({ ...t, ...Object.fromEntries(o.map(([e, n]) => [e, r(t[e], (e, t) => !n.includes(t))])) }) : null; } function g(n) { let r = { ...n }; for (let n of v) e(r, n) && (0 === t(r[n]).length ? delete r[n] : (r[n] = l(r[n]))); return l(r); } let h = { dependencies: ['dependencies', 'devDependencies'], devDependencies: ['devDependencies', 'dependencies'], peerDependencies: ['peerDependencies', 'dependencies'], optionalDependencies: ['optionalDependencies', 'dependencies', 'peerDependencies'] }, v = t(h); async function D(e, n, t = P) { let r = await w(); if (!r) return null; let i = await r.resolveConfigFile(e), l = i && c(i, '../.prettierignore'), o = await r.resolveConfig(e, { editorconfig: !0 }); if (!o) return null; let s = { filepath: e, ...o }; Object.assign(s, t(e, s)); let d = await r.getFileInfo(e, { ignorePath: l && (await a(l)) ? l : void 0 }); if (d.ignored || !d.inferredParser) return null; try { return r.format(n, s); } catch (n) { if (!(n instanceof Error)) throw n; return console.warn(`Could not format ${e} with prettier. Error: "${n.message}"`), null; } } let w = () => import('prettier').then(e => e.default ?? e).catch(() => null), P = e => (e.endsWith('.swcrc') ? { parser: 'json' } : {}); export { f as addPackageJsonDependencies, u as getUpgradedDependenciesVersions, p as isGreaterVersion, m as removePackageJsonDependencies, g as sortPackageJson, D as tryFormatPrettier }; //# sourceMappingURL=index.mjs.map