@directus/update-check
Advanced tools
Comparing version 11.0.3 to 11.0.4
@@ -1,1 +0,3 @@ | ||
export declare function updateCheck(currentVersion: string): Promise<void>; | ||
declare function updateCheck(currentVersion: string): Promise<void>; | ||
export { updateCheck }; |
@@ -1,66 +0,98 @@ | ||
import boxen, {} from 'boxen'; | ||
import chalk from 'chalk'; | ||
import got from 'got'; | ||
import { gte, prerelease } from 'semver'; | ||
import { getCache } from './cache.js'; | ||
const cache = await getCache(); | ||
export async function updateCheck(currentVersion) { | ||
let packageManifest; | ||
try { | ||
packageManifest = await got('https://registry.npmjs.org/directus', { | ||
headers: { accept: 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*' }, | ||
cache, | ||
retry: { | ||
limit: 0, | ||
}, | ||
timeout: { | ||
request: 8000, | ||
}, | ||
}).json(); | ||
// src/index.ts | ||
import Axios from "axios"; | ||
import { setupCache } from "axios-cache-interceptor"; | ||
import boxen from "boxen"; | ||
import chalk from "chalk"; | ||
import { gte, prerelease } from "semver"; | ||
// src/cache.ts | ||
import { buildStorage } from "axios-cache-interceptor"; | ||
import findCacheDirectory from "find-cache-dir"; | ||
import fs from "fs/promises"; | ||
import path from "path"; | ||
async function getCache() { | ||
const dir = findCacheDirectory({ name: "directus" }); | ||
if (!dir) | ||
return; | ||
try { | ||
await fs.mkdir(dir, { recursive: true }); | ||
} catch { | ||
return; | ||
} | ||
return buildStorage({ | ||
async set(key, value) { | ||
const file = path.join(dir, key); | ||
const content = JSON.stringify(value); | ||
return fs.writeFile(file, content).catch(() => { | ||
}); | ||
}, | ||
async remove(key) { | ||
const file = path.join(dir, key); | ||
return fs.unlink(file).catch(() => { | ||
}); | ||
}, | ||
async find(key) { | ||
try { | ||
const file = path.join(dir, key); | ||
const content = await fs.readFile(file, { encoding: "utf8" }); | ||
const value = JSON.parse(content); | ||
return value; | ||
} catch { | ||
return void 0; | ||
} | ||
} | ||
catch (error) { | ||
// Any errors are intentionally ignored & update message simply not printed | ||
return; | ||
} | ||
if (!packageManifest) { | ||
return; | ||
} | ||
const latestVersion = packageManifest['dist-tags']['latest']; | ||
if (!latestVersion || gte(currentVersion, latestVersion)) { | ||
return; | ||
} | ||
const allVersions = Object.keys(packageManifest.versions).filter((version) => !prerelease(version)); | ||
const indexOfCurrent = allVersions.indexOf(currentVersion); | ||
const indexOfLatest = allVersions.indexOf(latestVersion); | ||
const versionDifference = indexOfCurrent !== -1 && indexOfLatest !== -1 ? Math.abs(indexOfLatest - indexOfCurrent) : null; | ||
const message = [ | ||
chalk.bold(`Update available!`), | ||
'', | ||
chalk.bold(`${chalk.red(currentVersion)} → ${chalk.green(latestVersion)}`), | ||
...(versionDifference | ||
? [chalk.dim(`${versionDifference} ${versionDifference > 1 ? 'versions' : 'version'} behind`)] | ||
: []), | ||
'', | ||
'More information:', | ||
chalk.blue(`https://github.com/directus/directus/releases`), | ||
]; | ||
let borderColor; | ||
if (versionDifference && versionDifference > 5) { | ||
borderColor = 'red'; | ||
} | ||
else if (versionDifference && versionDifference > 2) { | ||
borderColor = 'yellow'; | ||
} | ||
else { | ||
borderColor = 'magenta'; | ||
} | ||
const boxenOptions = { | ||
padding: 1, | ||
margin: 1, | ||
align: 'center', | ||
borderColor, | ||
borderStyle: 'round', | ||
}; | ||
// eslint-disable-next-line no-console | ||
console.warn(boxen(message.join('\n'), boxenOptions)); | ||
}); | ||
} | ||
// src/index.ts | ||
var cache = await getCache(); | ||
var instance = Axios.create(); | ||
var axios = setupCache(instance, { storage: cache }); | ||
async function updateCheck(currentVersion) { | ||
let response; | ||
try { | ||
response = await axios.get("https://registry.npmjs.org/directus", { | ||
headers: { accept: "application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*" }, | ||
timeout: 8e3 | ||
}); | ||
} catch { | ||
return; | ||
} | ||
const packageManifest = response.data; | ||
const latestVersion = packageManifest["dist-tags"]["latest"]; | ||
if (!latestVersion || gte(currentVersion, latestVersion)) { | ||
return; | ||
} | ||
const allVersions = Object.keys(packageManifest.versions).filter((version) => !prerelease(version)); | ||
const indexOfCurrent = allVersions.indexOf(currentVersion); | ||
const indexOfLatest = allVersions.indexOf(latestVersion); | ||
const versionDifference = indexOfCurrent !== -1 && indexOfLatest !== -1 ? Math.abs(indexOfLatest - indexOfCurrent) : null; | ||
const message = [ | ||
chalk.bold(`Update available!`), | ||
"", | ||
chalk.bold(`${chalk.red(currentVersion)} \u2192 ${chalk.green(latestVersion)}`), | ||
...versionDifference ? [chalk.dim(`${versionDifference} ${versionDifference > 1 ? "versions" : "version"} behind`)] : [], | ||
"", | ||
"More information:", | ||
chalk.blue(`https://github.com/directus/directus/releases`) | ||
]; | ||
let borderColor; | ||
if (versionDifference && versionDifference > 5) { | ||
borderColor = "red"; | ||
} else if (versionDifference && versionDifference > 2) { | ||
borderColor = "yellow"; | ||
} else { | ||
borderColor = "magenta"; | ||
} | ||
const boxenOptions = { | ||
padding: 1, | ||
margin: 1, | ||
align: "center", | ||
borderColor, | ||
borderStyle: "round" | ||
}; | ||
console.warn(boxen(message.join("\n"), boxenOptions)); | ||
} | ||
export { | ||
updateCheck | ||
}; |
{ | ||
"name": "@directus/update-check", | ||
"version": "11.0.3", | ||
"version": "11.0.4", | ||
"description": "Check if an update for Directus is available", | ||
@@ -24,7 +24,7 @@ "homepage": "https://directus.io", | ||
"dependencies": { | ||
"axios": "1.6.2", | ||
"axios-cache-interceptor": "1.3.3", | ||
"boxen": "7.1.1", | ||
"chalk": "5.3.0", | ||
"filenamify": "6.0.0", | ||
"find-cache-dir": "5.0.0", | ||
"got": "13.0.0", | ||
"semver": "7.5.4" | ||
@@ -34,16 +34,16 @@ }, | ||
"@npm/types": "1.0.2", | ||
"@types/node": "18.16.12", | ||
"@types/semver": "7.5.1", | ||
"@vitest/coverage-c8": "0.31.1", | ||
"keyv": "4.5.2", | ||
"@types/node": "18.19.3", | ||
"@types/semver": "7.5.6", | ||
"@vitest/coverage-v8": "1.1.0", | ||
"strip-ansi": "7.1.0", | ||
"typescript": "5.0.4", | ||
"vitest": "0.31.1", | ||
"@directus/tsconfig": "1.0.0" | ||
"tsup": "8.0.1", | ||
"typescript": "5.3.3", | ||
"vitest": "1.1.0", | ||
"@directus/tsconfig": "1.0.1" | ||
}, | ||
"scripts": { | ||
"build": "tsc --project tsconfig.prod.json", | ||
"dev": "tsc --watch", | ||
"build": "tsup src/index.ts --format=esm --dts", | ||
"dev": "tsup src/index.ts --format=esm --dts --watch", | ||
"test": "vitest --watch=false" | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
6000
5
98
1
+ Addedaxios@1.6.2
+ Addedasynckit@0.4.0(transitive)
+ Addedaxios@1.6.2(transitive)
+ Addedaxios-cache-interceptor@1.3.3(transitive)
+ Addedcache-parser@1.2.4(transitive)
+ Addedcombined-stream@1.0.8(transitive)
+ Addeddelayed-stream@1.0.0(transitive)
+ Addedfast-defer@1.1.8(transitive)
+ Addedfollow-redirects@1.15.9(transitive)
+ Addedform-data@4.0.1(transitive)
+ Addedmime-db@1.52.0(transitive)
+ Addedmime-types@2.1.35(transitive)
+ Addedobject-code@1.3.2(transitive)
+ Addedproxy-from-env@1.1.0(transitive)
- Removedfilenamify@6.0.0
- Removedgot@13.0.0
- Removed@sindresorhus/is@5.6.0(transitive)
- Removed@szmarczak/http-timer@5.0.1(transitive)
- Removed@types/http-cache-semantics@4.0.4(transitive)
- Removedcacheable-lookup@7.0.0(transitive)
- Removedcacheable-request@10.2.14(transitive)
- Removeddecompress-response@6.0.0(transitive)
- Removeddefer-to-connect@2.0.1(transitive)
- Removedfilename-reserved-regex@3.0.0(transitive)
- Removedfilenamify@6.0.0(transitive)
- Removedform-data-encoder@2.1.4(transitive)
- Removedget-stream@6.0.1(transitive)
- Removedgot@13.0.0(transitive)
- Removedhttp-cache-semantics@4.1.1(transitive)
- Removedhttp2-wrapper@2.2.1(transitive)
- Removedjson-buffer@3.0.1(transitive)
- Removedkeyv@4.5.4(transitive)
- Removedlowercase-keys@3.0.0(transitive)
- Removedmimic-response@3.1.04.0.0(transitive)
- Removednormalize-url@8.0.1(transitive)
- Removedp-cancelable@3.0.0(transitive)
- Removedquick-lru@5.1.1(transitive)
- Removedresolve-alpn@1.2.1(transitive)
- Removedresponselike@3.0.0(transitive)