@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
JavaScript
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