quicklify 1.0.2 → 1.0.4
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/README.md +58 -14
- package/README.tr.md +58 -14
- package/dist/commands/destroy.d.ts.map +1 -1
- package/dist/commands/destroy.js +5 -0
- package/dist/commands/destroy.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +70 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +37 -13
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/restore.d.ts +1 -0
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +15 -0
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/secure.d.ts.map +1 -1
- package/dist/commands/secure.js +9 -1
- package/dist/commands/secure.js.map +1 -1
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +5 -0
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/errorMapper.d.ts +3 -0
- package/dist/utils/errorMapper.d.ts.map +1 -0
- package/dist/utils/errorMapper.js +79 -0
- package/dist/utils/errorMapper.js.map +1 -0
- package/dist/utils/openBrowser.d.ts +4 -0
- package/dist/utils/openBrowser.d.ts.map +1 -0
- package/dist/utils/openBrowser.js +58 -0
- package/dist/utils/openBrowser.js.map +1 -0
- package/dist/utils/updateCheck.d.ts +12 -0
- package/dist/utils/updateCheck.d.ts.map +1 -0
- package/dist/utils/updateCheck.js +108 -0
- package/dist/utils/updateCheck.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import axios from "axios";
|
|
5
|
+
import { logger } from "./logger.js";
|
|
6
|
+
const CONFIG_DIR = join(homedir(), ".quicklify");
|
|
7
|
+
export const UPDATE_CHECK_FILE = join(CONFIG_DIR, ".update-check");
|
|
8
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
9
|
+
const REQUEST_TIMEOUT_MS = 3000; // 3 seconds
|
|
10
|
+
/**
|
|
11
|
+
* Compare two semver-like version strings.
|
|
12
|
+
* Returns true if latest > current.
|
|
13
|
+
*/
|
|
14
|
+
export function isNewerVersion(current, latest) {
|
|
15
|
+
// Strip leading 'v' if present
|
|
16
|
+
const cleanCurrent = current.replace(/^v/, "");
|
|
17
|
+
const cleanLatest = latest.replace(/^v/, "");
|
|
18
|
+
const currentParts = cleanCurrent.split(".").map(Number);
|
|
19
|
+
const latestParts = cleanLatest.split(".").map(Number);
|
|
20
|
+
// Compare major, minor, patch
|
|
21
|
+
for (let i = 0; i < Math.max(currentParts.length, latestParts.length); i++) {
|
|
22
|
+
const currentPart = currentParts[i] || 0;
|
|
23
|
+
const latestPart = latestParts[i] || 0;
|
|
24
|
+
if (latestPart > currentPart) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (latestPart < currentPart) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
function readCache() {
|
|
34
|
+
try {
|
|
35
|
+
if (!existsSync(UPDATE_CHECK_FILE)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const content = readFileSync(UPDATE_CHECK_FILE, "utf-8");
|
|
39
|
+
const cache = JSON.parse(content);
|
|
40
|
+
if (typeof cache.lastCheck !== "number" ||
|
|
41
|
+
typeof cache.latestVersion !== "string" ||
|
|
42
|
+
!/^\d+\.\d+\.\d+/.test(cache.latestVersion)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return cache;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function writeCache(cache) {
|
|
52
|
+
try {
|
|
53
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
54
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
55
|
+
}
|
|
56
|
+
writeFileSync(UPDATE_CHECK_FILE, JSON.stringify(cache), { mode: 0o600 });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Silently ignore write errors
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function fetchLatestVersion() {
|
|
63
|
+
try {
|
|
64
|
+
const response = await axios.get("https://registry.npmjs.org/quicklify/latest", {
|
|
65
|
+
timeout: REQUEST_TIMEOUT_MS,
|
|
66
|
+
});
|
|
67
|
+
const version = response.data?.version;
|
|
68
|
+
if (typeof version === "string" && /^\d+\.\d+\.\d+/.test(version)) {
|
|
69
|
+
return version;
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check for updates and display a message if a newer version is available.
|
|
79
|
+
* This function never throws - all errors are silently caught.
|
|
80
|
+
*/
|
|
81
|
+
export async function checkForUpdate(currentVersion) {
|
|
82
|
+
try {
|
|
83
|
+
const cache = readCache();
|
|
84
|
+
const now = Date.now();
|
|
85
|
+
// Use cached version if it's fresh (less than 24 hours old)
|
|
86
|
+
if (cache && now - cache.lastCheck < CHECK_INTERVAL_MS) {
|
|
87
|
+
if (isNewerVersion(currentVersion, cache.latestVersion)) {
|
|
88
|
+
logger.info(`Update available: ${currentVersion} → ${cache.latestVersion} — Run: npm i -g quicklify`);
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Fetch latest version from npm registry
|
|
93
|
+
const latestVersion = await fetchLatestVersion();
|
|
94
|
+
if (!latestVersion) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Save to cache
|
|
98
|
+
writeCache({ lastCheck: now, latestVersion });
|
|
99
|
+
// Display update message if newer version available
|
|
100
|
+
if (isNewerVersion(currentVersion, latestVersion)) {
|
|
101
|
+
logger.info(`Update available: ${currentVersion} → ${latestVersion} — Run: npm i -g quicklify`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Silently ignore all errors - update check is non-blocking
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=updateCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/utils/updateCheck.ts"],"names":[],"mappings":"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"}
|