UNPKG

2.36 kBJavaScriptView Raw
1const _castArray = require("lodash.castarray");
2const _get = require("lodash.get");
3
4function updateDeps(pDependencyObject, pOutdatedPackagesObject, pOptions = {}) {
5 const lSavePrefix = pOptions.saveExact ? "" : pOptions.savePrefix || "^";
6
7 return {
8 ...pDependencyObject,
9 ...Object.keys(pDependencyObject)
10 .filter((pDep) =>
11 Object.keys(pOutdatedPackagesObject).some(
12 (pPackage) => pPackage === pDep
13 )
14 )
15 .reduce((pAll, pThis) => {
16 pAll[pThis] = `${lSavePrefix}${pOutdatedPackagesObject[pThis].latest}`;
17 return pAll;
18 }, {}),
19 };
20}
21
22function getDoNotUpArray(pPackageObject) {
23 return _castArray(_get(pPackageObject, "upem.donotup", []))
24 .map((pPackage) =>
25 typeof pPackage === "string" ? pPackage : _get(pPackage, "package")
26 )
27 .filter((pPackage) => Boolean(pPackage));
28}
29
30function filterOutdatedPackages(pOutdatedObject, pPackageObject) {
31 const lReturnValue = { ...pOutdatedObject };
32
33 Object.keys(lReturnValue)
34 .filter((pKey) => getDoNotUpArray(pPackageObject).includes(pKey))
35 .forEach((pKey) => Reflect.deleteProperty(lReturnValue, pKey));
36 return lReturnValue;
37}
38
39/**
40 * Updates all dependencies in the passed package.json that match a key in the
41 * passed outdated object to the _latest_ in that object, ignoring the
42 * packages mentioned in the upem.donotup key.
43 *
44 * @param {any} pPackageObject - the contents of a package.json in object format
45 * @param {any} pOutdatedObject - the output of npm outdated --json, in object format
46 * @param {any} pOptions -
47 * saveExact - how updated packages get prefixed if true:'', if false or left out
48 * (the default): savePrefix
49 * savePrefix - how updated packages get prefixed; either '~', '^' or '' (the default)
50 *
51 * @return {any} - the transformed pPackageObject
52 */
53
54function updateAllDeps(pPackageObject, pOutdatedPackages = {}, pOptions = {}) {
55 return {
56 ...pPackageObject,
57 ...Object.keys(pPackageObject)
58 .filter((pPackageKey) => pPackageKey.includes("ependencies"))
59 .reduce((pAll, pDepKey) => {
60 pAll[pDepKey] = updateDeps(
61 pPackageObject[pDepKey],
62 pOutdatedPackages,
63 pOptions
64 );
65 return pAll;
66 }, {}),
67 };
68}
69
70module.exports = {
71 filterOutdatedPackages,
72 updateDeps,
73 updateAllDeps,
74};