squeezr-ai 1.16.2 → 1.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/squeezr.js +51 -0
- package/package.json +1 -1
package/bin/squeezr.js
CHANGED
|
@@ -16,6 +16,55 @@ const pkg = require(path.join(ROOT, 'package.json'))
|
|
|
16
16
|
const args = process.argv.slice(2)
|
|
17
17
|
const command = args[0]
|
|
18
18
|
|
|
19
|
+
// ── update check (non-blocking) ───────────────────────────────────────────────
|
|
20
|
+
|
|
21
|
+
const UPDATE_CHECK_FILE = path.join(os.homedir(), '.squeezr', 'update-check.json')
|
|
22
|
+
const UPDATE_CHECK_INTERVAL = 4 * 60 * 60 * 1000 // 4 hours
|
|
23
|
+
|
|
24
|
+
// Fire and forget — runs in background, never blocks CLI
|
|
25
|
+
const updateCheckPromise = (async () => {
|
|
26
|
+
try {
|
|
27
|
+
// Read cached check
|
|
28
|
+
let cached = null
|
|
29
|
+
try { cached = JSON.parse(fs.readFileSync(UPDATE_CHECK_FILE, 'utf-8')) } catch {}
|
|
30
|
+
if (cached && Date.now() - cached.checkedAt < UPDATE_CHECK_INTERVAL) {
|
|
31
|
+
return cached.latest !== pkg.version ? cached.latest : null
|
|
32
|
+
}
|
|
33
|
+
// Fetch latest from npm (with timeout)
|
|
34
|
+
const { get } = await import('https')
|
|
35
|
+
const latest = await new Promise((resolve, reject) => {
|
|
36
|
+
const req = get('https://registry.npmjs.org/squeezr-ai/latest', { timeout: 3000 }, res => {
|
|
37
|
+
let data = ''
|
|
38
|
+
res.on('data', chunk => { data += chunk })
|
|
39
|
+
res.on('end', () => {
|
|
40
|
+
try { resolve(JSON.parse(data).version) } catch { resolve(null) }
|
|
41
|
+
})
|
|
42
|
+
})
|
|
43
|
+
req.on('error', () => resolve(null))
|
|
44
|
+
req.setTimeout(3000, () => { req.destroy(); resolve(null) })
|
|
45
|
+
})
|
|
46
|
+
if (!latest) return null
|
|
47
|
+
// Cache result
|
|
48
|
+
const dir = path.dirname(UPDATE_CHECK_FILE)
|
|
49
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true })
|
|
50
|
+
fs.writeFileSync(UPDATE_CHECK_FILE, JSON.stringify({ latest, checkedAt: Date.now() }))
|
|
51
|
+
return latest !== pkg.version ? latest : null
|
|
52
|
+
} catch { return null }
|
|
53
|
+
})()
|
|
54
|
+
|
|
55
|
+
async function showUpdateBanner() {
|
|
56
|
+
try {
|
|
57
|
+
const latest = await Promise.race([updateCheckPromise, new Promise(r => setTimeout(() => r(null), 500))])
|
|
58
|
+
if (latest) {
|
|
59
|
+
console.log('')
|
|
60
|
+
console.log(` ╭─────────────────────────────────────────────────────────╮`)
|
|
61
|
+
console.log(` │ Update available: v${pkg.version} → v${latest}${' '.repeat(Math.max(0, 30 - pkg.version.length - latest.length))}│`)
|
|
62
|
+
console.log(` │ Run: npm install -g squeezr-ai │`)
|
|
63
|
+
console.log(` ╰─────────────────────────────────────────────────────────╯`)
|
|
64
|
+
}
|
|
65
|
+
} catch {}
|
|
66
|
+
}
|
|
67
|
+
|
|
19
68
|
function getPortFromToml() {
|
|
20
69
|
try {
|
|
21
70
|
const toml = fs.readFileSync(path.join(ROOT, 'squeezr.toml'), 'utf-8')
|
|
@@ -947,3 +996,5 @@ switch (command) {
|
|
|
947
996
|
console.log(HELP)
|
|
948
997
|
process.exit(1)
|
|
949
998
|
}
|
|
999
|
+
|
|
1000
|
+
await showUpdateBanner()
|
package/package.json
CHANGED