bkper 4.3.0 → 4.4.0

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/lib/cli.js CHANGED
@@ -18,6 +18,10 @@ import { registerGroupCommands } from './commands/groups/register.js';
18
18
  import { registerTransactionCommands } from './commands/transactions/register.js';
19
19
  import { registerBalanceCommands } from './commands/balances/register.js';
20
20
  import { registerCollectionCommands } from './commands/collections/register.js';
21
+ import { registerUpgradeCommand } from './commands/upgrade.js';
22
+ import { VERSION, autoUpgrade } from './upgrade/index.js';
23
+ // Version
24
+ program.version(VERSION, '-v, --version');
21
25
  // Global output format options
22
26
  program.option('--format <format>', 'Output format: table, json, or csv', 'table');
23
27
  program.option('--json', 'Output as JSON (alias for --format json)');
@@ -42,5 +46,11 @@ registerGroupCommands(program);
42
46
  registerTransactionCommands(program);
43
47
  registerBalanceCommands(program);
44
48
  registerCollectionCommands(program);
49
+ // Upgrade command
50
+ registerUpgradeCommand(program);
51
+ // Trigger silent auto-upgrade in the background (non-blocking, never fails)
52
+ if (!process.env.BKPER_DISABLE_AUTOUPDATE) {
53
+ autoUpgrade().catch(() => { });
54
+ }
45
55
  program.parse(process.argv);
46
56
  //# sourceMappingURL=cli.js.map
package/lib/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;AAEA,OAAO,eAAe,CAAC,CAAC,sDAAsD;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,+BAA+B;AAC/B,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,OAAO,CAAC,CAAC;AACnF,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;AAErE,gBAAgB;AAChB,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,aAAa,CAAC;KAC1B,MAAM,CAAC,GAAS,EAAE;IACf,MAAM,KAAK,EAAE,CAAC;AAClB,CAAC,CAAA,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,cAAc,CAAC;KAC3B,MAAM,CAAC,GAAG,EAAE;IACT,MAAM,EAAE,CAAC;AACb,CAAC,CAAC,CAAC;AAEP,oBAAoB;AACpB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,2BAA2B,CAAC,OAAO,CAAC,CAAC;AACrC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AAEpC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;AAEA,OAAO,eAAe,CAAC,CAAC,sDAAsD;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE1D,UAAU;AACV,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAE1C,+BAA+B;AAC/B,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,EAAE,OAAO,CAAC,CAAC;AACnF,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;AAErE,gBAAgB;AAChB,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,aAAa,CAAC;KAC1B,MAAM,CAAC,GAAS,EAAE;IACf,MAAM,KAAK,EAAE,CAAC;AAClB,CAAC,CAAA,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,cAAc,CAAC;KAC3B,MAAM,CAAC,GAAG,EAAE;IACT,MAAM,EAAE,CAAC;AACb,CAAC,CAAC,CAAC;AAEP,oBAAoB;AACpB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,2BAA2B,CAAC,OAAO,CAAC,CAAC;AACrC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,0BAA0B,CAAC,OAAO,CAAC,CAAC;AAEpC,kBAAkB;AAClB,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,4EAA4E;AAC5E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;IACxC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerUpgradeCommand(program: Command): void;
3
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ7D"}
@@ -0,0 +1,20 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { foregroundUpgrade } from '../upgrade/index.js';
11
+ export function registerUpgradeCommand(program) {
12
+ program
13
+ .command('upgrade [version]')
14
+ .description('Upgrade bkper CLI to the latest version')
15
+ .option('--method <method>', 'Override install method detection (npm, bun, yarn)')
16
+ .action((version, options) => __awaiter(this, void 0, void 0, function* () {
17
+ yield foregroundUpgrade(version, options.method);
18
+ }));
19
+ }
20
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,OAAO;SACF,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,mBAAmB,EAAE,oDAAoD,CAAC;SACjF,MAAM,CAAC,CAAO,OAA2B,EAAE,OAA4B,EAAE,EAAE;QACxE,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC,CAAA,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { VERSION } from './installation.js';
2
+ export { autoUpgrade, foregroundUpgrade, isNewerVersion } from './upgrade.js';
3
+ export { detectMethod, fetchLatestVersion, getUpgradeCommand } from './installation.js';
4
+ export type { InstallMethod } from './installation.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upgrade/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { VERSION } from './installation.js';
2
+ export { autoUpgrade, foregroundUpgrade, isNewerVersion } from './upgrade.js';
3
+ export { detectMethod, fetchLatestVersion, getUpgradeCommand } from './installation.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/upgrade/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /** Current installed version of the CLI. */
2
+ export declare const VERSION: string;
3
+ /** Supported installation methods. */
4
+ export type InstallMethod = 'npm' | 'bun' | 'yarn' | 'unknown';
5
+ /**
6
+ * Detects how the CLI was installed by checking global package lists
7
+ * for each supported package manager.
8
+ */
9
+ export declare function detectMethod(): InstallMethod;
10
+ /**
11
+ * Fetches the latest published version from the npm registry.
12
+ * Returns null if the fetch fails.
13
+ */
14
+ export declare function fetchLatestVersion(): Promise<string | null>;
15
+ /**
16
+ * Returns the shell command to upgrade the CLI for a given install method and version.
17
+ */
18
+ export declare function getUpgradeCommand(method: InstallMethod, version: string): string | null;
19
+ /**
20
+ * Executes the upgrade to the specified version using the given install method.
21
+ * Throws if the upgrade command fails.
22
+ */
23
+ export declare function executeUpgrade(method: InstallMethod, version: string): void;
24
+ //# sourceMappingURL=installation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.d.ts","sourceRoot":"","sources":["../../src/upgrade/installation.ts"],"names":[],"mappings":"AAMA,4CAA4C;AAC5C,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAK3C,sCAAsC;AACtC,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAmB5C;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWvF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAS3E"}
@@ -0,0 +1,90 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { execSync } from 'child_process';
11
+ import { createRequire } from 'module';
12
+ const require = createRequire(import.meta.url);
13
+ const pkg = require('../../package.json');
14
+ /** Current installed version of the CLI. */
15
+ export const VERSION = pkg.version;
16
+ /** Package name on npm. */
17
+ const PACKAGE_NAME = 'bkper';
18
+ /**
19
+ * Detects how the CLI was installed by checking global package lists
20
+ * for each supported package manager.
21
+ */
22
+ export function detectMethod() {
23
+ const checks = [
24
+ { method: 'bun', command: `bun pm ls -g 2>/dev/null` },
25
+ { method: 'npm', command: `npm list -g ${PACKAGE_NAME} --depth=0 2>/dev/null` },
26
+ { method: 'yarn', command: `yarn global list --depth=0 2>/dev/null` },
27
+ ];
28
+ for (const { method, command } of checks) {
29
+ try {
30
+ const output = execSync(command, { encoding: 'utf-8', timeout: 10000 });
31
+ if (output.includes(PACKAGE_NAME)) {
32
+ return method;
33
+ }
34
+ }
35
+ catch (_a) {
36
+ // Package manager not available or command failed — try next
37
+ }
38
+ }
39
+ return 'unknown';
40
+ }
41
+ /**
42
+ * Fetches the latest published version from the npm registry.
43
+ * Returns null if the fetch fails.
44
+ */
45
+ export function fetchLatestVersion() {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ var _a;
48
+ try {
49
+ const response = yield fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {
50
+ headers: { Accept: 'application/json' },
51
+ signal: AbortSignal.timeout(5000),
52
+ });
53
+ if (!response.ok)
54
+ return null;
55
+ const data = (yield response.json());
56
+ return (_a = data.version) !== null && _a !== void 0 ? _a : null;
57
+ }
58
+ catch (_b) {
59
+ return null;
60
+ }
61
+ });
62
+ }
63
+ /**
64
+ * Returns the shell command to upgrade the CLI for a given install method and version.
65
+ */
66
+ export function getUpgradeCommand(method, version) {
67
+ switch (method) {
68
+ case 'npm':
69
+ return `npm install -g ${PACKAGE_NAME}@${version}`;
70
+ case 'bun':
71
+ return `bun add -g ${PACKAGE_NAME}@${version}`;
72
+ case 'yarn':
73
+ return `yarn global add ${PACKAGE_NAME}@${version}`;
74
+ default:
75
+ return null;
76
+ }
77
+ }
78
+ /**
79
+ * Executes the upgrade to the specified version using the given install method.
80
+ * Throws if the upgrade command fails.
81
+ */
82
+ export function executeUpgrade(method, version) {
83
+ const command = getUpgradeCommand(method, version);
84
+ if (!command) {
85
+ throw new Error(`Unable to auto-upgrade: unknown installation method. ` +
86
+ `Please upgrade manually: npm install -g ${PACKAGE_NAME}@${version}`);
87
+ }
88
+ execSync(command, { stdio: 'pipe', timeout: 60000 });
89
+ }
90
+ //# sourceMappingURL=installation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installation.js","sourceRoot":"","sources":["../../src/upgrade/installation.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE1C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAE3C,2BAA2B;AAC3B,MAAM,YAAY,GAAG,OAAO,CAAC;AAK7B;;;GAGG;AACH,MAAM,UAAU,YAAY;IACxB,MAAM,MAAM,GAAsD;QAC9D,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE;QACtD,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,YAAY,wBAAwB,EAAE;QAC/E,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,wCAAwC,EAAE;KACxE,CAAC;IAEF,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,MAAM,EAAE,CAAC;QACvC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC;YAClB,CAAC;QACL,CAAC;QAAC,WAAM,CAAC;YACL,6DAA6D;QACjE,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAgB,kBAAkB;;;QACpC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,8BAA8B,YAAY,SAAS,EAAE;gBAC9E,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;gBACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aACpC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;YAC7D,OAAO,MAAA,IAAI,CAAC,OAAO,mCAAI,IAAI,CAAC;QAChC,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;CAAA;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAqB,EAAE,OAAe;IACpE,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,KAAK;YACN,OAAO,kBAAkB,YAAY,IAAI,OAAO,EAAE,CAAC;QACvD,KAAK,KAAK;YACN,OAAO,cAAc,YAAY,IAAI,OAAO,EAAE,CAAC;QACnD,KAAK,MAAM;YACP,OAAO,mBAAmB,YAAY,IAAI,OAAO,EAAE,CAAC;QACxD;YACI,OAAO,IAAI,CAAC;IACpB,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,OAAe;IACjE,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACX,uDAAuD;YACnD,2CAA2C,YAAY,IAAI,OAAO,EAAE,CAC3E,CAAC;IACN,CAAC;IACD,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Compares two semver version strings.
3
+ * Returns true if `latest` is newer than `current`.
4
+ */
5
+ export declare function isNewerVersion(current: string, latest: string): boolean;
6
+ /**
7
+ * Runs the silent auto-upgrade check in the background.
8
+ *
9
+ * Called on every CLI invocation. This function:
10
+ * 1. Fetches the latest version from npm
11
+ * 2. Compares with the current installed version
12
+ * 3. If newer, silently upgrades using the detected install method
13
+ * 4. Prints a brief message to stderr on success
14
+ *
15
+ * All errors are swallowed silently to never disrupt the user's command.
16
+ */
17
+ export declare function autoUpgrade(): Promise<void>;
18
+ /**
19
+ * Runs an explicit foreground upgrade with user-facing output.
20
+ * Used by the `bkper upgrade` command.
21
+ */
22
+ export declare function foregroundUpgrade(targetVersion?: string, methodOverride?: string): Promise<void>;
23
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQvE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBjD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACnC,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAsCf"}
@@ -0,0 +1,99 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { VERSION, fetchLatestVersion, detectMethod, executeUpgrade, getUpgradeCommand, } from './installation.js';
11
+ /**
12
+ * Compares two semver version strings.
13
+ * Returns true if `latest` is newer than `current`.
14
+ */
15
+ export function isNewerVersion(current, latest) {
16
+ const parse = (v) => v.split('.').map(Number);
17
+ const [cMajor, cMinor, cPatch] = parse(current);
18
+ const [lMajor, lMinor, lPatch] = parse(latest);
19
+ if (lMajor !== cMajor)
20
+ return lMajor > cMajor;
21
+ if (lMinor !== cMinor)
22
+ return lMinor > cMinor;
23
+ return lPatch > cPatch;
24
+ }
25
+ /**
26
+ * Runs the silent auto-upgrade check in the background.
27
+ *
28
+ * Called on every CLI invocation. This function:
29
+ * 1. Fetches the latest version from npm
30
+ * 2. Compares with the current installed version
31
+ * 3. If newer, silently upgrades using the detected install method
32
+ * 4. Prints a brief message to stderr on success
33
+ *
34
+ * All errors are swallowed silently to never disrupt the user's command.
35
+ */
36
+ export function autoUpgrade() {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ try {
39
+ const latest = yield fetchLatestVersion();
40
+ if (!latest)
41
+ return;
42
+ if (!isNewerVersion(VERSION, latest))
43
+ return;
44
+ const method = detectMethod();
45
+ if (method === 'unknown') {
46
+ // Can't auto-upgrade if we don't know how it was installed.
47
+ // Print a hint to stderr so it doesn't pollute stdout.
48
+ process.stderr.write(`\nbkper ${latest} available (current: ${VERSION}). ` +
49
+ `Upgrade manually: npm install -g bkper@${latest}\n`);
50
+ return;
51
+ }
52
+ executeUpgrade(method, latest);
53
+ process.stderr.write(`\nbkper upgraded: ${VERSION} \u2192 ${latest} (restart to use)\n`);
54
+ }
55
+ catch (_a) {
56
+ // Silent failure — never break the user's command
57
+ }
58
+ });
59
+ }
60
+ /**
61
+ * Runs an explicit foreground upgrade with user-facing output.
62
+ * Used by the `bkper upgrade` command.
63
+ */
64
+ export function foregroundUpgrade(targetVersion, methodOverride) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ const latest = targetVersion !== null && targetVersion !== void 0 ? targetVersion : (yield fetchLatestVersion());
67
+ if (!latest) {
68
+ console.error('Could not determine the latest version. Check your network connection.');
69
+ process.exit(1);
70
+ }
71
+ if (!isNewerVersion(VERSION, latest) && !targetVersion) {
72
+ console.log(`Already on the latest version (${VERSION}).`);
73
+ return;
74
+ }
75
+ const method = methodOverride && isValidMethod(methodOverride) ? methodOverride : detectMethod();
76
+ if (method === 'unknown') {
77
+ console.error(`Could not detect how bkper was installed.\n` +
78
+ `Please upgrade manually: npm install -g bkper@${latest}\n` +
79
+ `Or specify the method: bkper upgrade --method npm`);
80
+ process.exit(1);
81
+ }
82
+ const command = getUpgradeCommand(method, latest);
83
+ console.log(`Upgrading bkper: ${VERSION} \u2192 ${latest}`);
84
+ console.log(`Running: ${command}`);
85
+ try {
86
+ executeUpgrade(method, latest);
87
+ console.log(`Successfully upgraded to bkper@${latest}. Restart your terminal to use the new version.`);
88
+ }
89
+ catch (err) {
90
+ console.error(`Upgrade failed:`, err);
91
+ console.error(`\nTry upgrading manually: ${command}`);
92
+ process.exit(1);
93
+ }
94
+ });
95
+ }
96
+ function isValidMethod(method) {
97
+ return ['npm', 'bun', 'yarn'].includes(method);
98
+ }
99
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bkper",
3
- "version": "4.3.0",
3
+ "version": "4.4.0",
4
4
  "description": "Command line client for Bkper",
5
5
  "bin": {
6
6
  "bkper": "./lib/cli.js"