bkper 4.31.3 → 5.1.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/README.md +12 -5
- package/lib/agent/startup-maintenance.d.ts +7 -4
- package/lib/agent/startup-maintenance.d.ts.map +1 -1
- package/lib/agent/startup-maintenance.js +13 -29
- package/lib/agent/startup-maintenance.js.map +1 -1
- package/lib/cli.js +8 -4
- package/lib/cli.js.map +1 -1
- package/lib/commands/accounts/batch-create.d.ts +1 -1
- package/lib/commands/accounts/batch-create.d.ts.map +1 -1
- package/lib/commands/accounts/batch-create.js +3 -3
- package/lib/commands/accounts/batch-create.js.map +1 -1
- package/lib/commands/accounts/list.d.ts +2 -3
- package/lib/commands/accounts/list.d.ts.map +1 -1
- package/lib/commands/accounts/list.js +2 -12
- package/lib/commands/accounts/list.js.map +1 -1
- package/lib/commands/accounts/register.js +13 -13
- package/lib/commands/accounts/register.js.map +1 -1
- package/lib/commands/action.d.ts +2 -3
- package/lib/commands/action.d.ts.map +1 -1
- package/lib/commands/action.js +2 -3
- package/lib/commands/action.js.map +1 -1
- package/lib/commands/apps/list.d.ts +2 -3
- package/lib/commands/apps/list.d.ts.map +1 -1
- package/lib/commands/apps/list.js +2 -14
- package/lib/commands/apps/list.js.map +1 -1
- package/lib/commands/apps/register.js +10 -10
- package/lib/commands/apps/register.js.map +1 -1
- package/lib/commands/balances/list.d.ts +0 -2
- package/lib/commands/balances/list.d.ts.map +1 -1
- package/lib/commands/balances/list.js +9 -17
- package/lib/commands/balances/list.js.map +1 -1
- package/lib/commands/balances/register.d.ts.map +1 -1
- package/lib/commands/balances/register.js +3 -4
- package/lib/commands/balances/register.js.map +1 -1
- package/lib/commands/books/list.d.ts +2 -4
- package/lib/commands/books/list.d.ts.map +1 -1
- package/lib/commands/books/list.js +2 -30
- package/lib/commands/books/list.js.map +1 -1
- package/lib/commands/books/register.js +12 -12
- package/lib/commands/books/register.js.map +1 -1
- package/lib/commands/cli-helpers.d.ts +9 -4
- package/lib/commands/cli-helpers.d.ts.map +1 -1
- package/lib/commands/cli-helpers.js +18 -12
- package/lib/commands/cli-helpers.js.map +1 -1
- package/lib/commands/collections/list.d.ts +2 -3
- package/lib/commands/collections/list.d.ts.map +1 -1
- package/lib/commands/collections/list.js +2 -14
- package/lib/commands/collections/list.js.map +1 -1
- package/lib/commands/collections/register.d.ts.map +1 -1
- package/lib/commands/collections/register.js +15 -25
- package/lib/commands/collections/register.js.map +1 -1
- package/lib/commands/events/event-json.d.ts +13 -0
- package/lib/commands/events/event-json.d.ts.map +1 -0
- package/lib/commands/events/event-json.js +33 -0
- package/lib/commands/events/event-json.js.map +1 -0
- package/lib/commands/events/list.d.ts +4 -3
- package/lib/commands/events/list.d.ts.map +1 -1
- package/lib/commands/events/list.js +15 -66
- package/lib/commands/events/list.js.map +1 -1
- package/lib/commands/events/register.d.ts.map +1 -1
- package/lib/commands/events/register.js +7 -6
- package/lib/commands/events/register.js.map +1 -1
- package/lib/commands/files/list.d.ts +3 -2
- package/lib/commands/files/list.d.ts.map +1 -1
- package/lib/commands/files/list.js +13 -42
- package/lib/commands/files/list.js.map +1 -1
- package/lib/commands/files/register.d.ts.map +1 -1
- package/lib/commands/files/register.js +13 -10
- package/lib/commands/files/register.js.map +1 -1
- package/lib/commands/groups/list.d.ts +2 -3
- package/lib/commands/groups/list.d.ts.map +1 -1
- package/lib/commands/groups/list.js +2 -12
- package/lib/commands/groups/list.js.map +1 -1
- package/lib/commands/groups/register.js +12 -12
- package/lib/commands/groups/register.js.map +1 -1
- package/lib/commands/transactions/batch-create.d.ts +1 -1
- package/lib/commands/transactions/batch-create.d.ts.map +1 -1
- package/lib/commands/transactions/batch-create.js +4 -3
- package/lib/commands/transactions/batch-create.js.map +1 -1
- package/lib/commands/transactions/batch-update.d.ts +1 -1
- package/lib/commands/transactions/batch-update.d.ts.map +1 -1
- package/lib/commands/transactions/batch-update.js +4 -3
- package/lib/commands/transactions/batch-update.js.map +1 -1
- package/lib/commands/transactions/list.d.ts +4 -7
- package/lib/commands/transactions/list.d.ts.map +1 -1
- package/lib/commands/transactions/list.js +15 -32
- package/lib/commands/transactions/list.js.map +1 -1
- package/lib/commands/transactions/register.d.ts +1 -1
- package/lib/commands/transactions/register.d.ts.map +1 -1
- package/lib/commands/transactions/register.js +27 -26
- package/lib/commands/transactions/register.js.map +1 -1
- package/lib/commands/transactions/transaction-json.d.ts +23 -0
- package/lib/commands/transactions/transaction-json.d.ts.map +1 -0
- package/lib/commands/transactions/transaction-json.js +56 -0
- package/lib/commands/transactions/transaction-json.js.map +1 -0
- package/lib/commands/upgrade.d.ts.map +1 -1
- package/lib/commands/upgrade.js +2 -3
- package/lib/commands/upgrade.js.map +1 -1
- package/lib/docs/apps/ai.md +2 -2
- package/lib/docs/apps/event-handlers.md +12 -0
- package/lib/docs/cli/app-management.md +1 -1
- package/lib/docs/cli/data-management.md +56 -54
- package/lib/docs/index.md +1 -1
- package/lib/docs/sdk/bkper-api-types.md +4 -2
- package/lib/docs/sdk/bkper-js.md +1 -0
- package/lib/docs-compliance/live-readme.d.ts.map +1 -1
- package/lib/docs-compliance/live-readme.js +0 -3
- package/lib/docs-compliance/live-readme.js.map +1 -1
- package/lib/docs-compliance/rules.d.ts.map +1 -1
- package/lib/docs-compliance/rules.js +9 -0
- package/lib/docs-compliance/rules.js.map +1 -1
- package/lib/render/index.d.ts +2 -4
- package/lib/render/index.d.ts.map +1 -1
- package/lib/render/index.js +1 -3
- package/lib/render/index.js.map +1 -1
- package/lib/render/output.d.ts +42 -22
- package/lib/render/output.d.ts.map +1 -1
- package/lib/render/output.js +62 -42
- package/lib/render/output.js.map +1 -1
- package/lib/upgrade/index.d.ts +5 -4
- package/lib/upgrade/index.d.ts.map +1 -1
- package/lib/upgrade/index.js +3 -2
- package/lib/upgrade/index.js.map +1 -1
- package/lib/upgrade/installation.d.ts +54 -20
- package/lib/upgrade/installation.d.ts.map +1 -1
- package/lib/upgrade/installation.js +222 -122
- package/lib/upgrade/installation.js.map +1 -1
- package/lib/upgrade/update-check.d.ts +69 -0
- package/lib/upgrade/update-check.d.ts.map +1 -0
- package/lib/upgrade/update-check.js +253 -0
- package/lib/upgrade/update-check.js.map +1 -0
- package/lib/upgrade/update-worker.d.ts +2 -0
- package/lib/upgrade/update-worker.d.ts.map +1 -0
- package/lib/upgrade/update-worker.js +6 -0
- package/lib/upgrade/update-worker.js.map +1 -0
- package/lib/upgrade/upgrade.d.ts +11 -28
- package/lib/upgrade/upgrade.d.ts.map +1 -1
- package/lib/upgrade/upgrade.js +49 -96
- package/lib/upgrade/upgrade.js.map +1 -1
- package/package.json +1 -1
- package/lib/render/csv-formatter.d.ts +0 -15
- package/lib/render/csv-formatter.d.ts.map +0 -1
- package/lib/render/csv-formatter.js +0 -37
- package/lib/render/csv-formatter.js.map +0 -1
- package/lib/render/table-formatter.d.ts +0 -34
- package/lib/render/table-formatter.d.ts.map +0 -1
- package/lib/render/table-formatter.js +0 -239
- package/lib/render/table-formatter.js.map +0 -1
|
@@ -0,0 +1,253 @@
|
|
|
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 { spawn } from 'child_process';
|
|
11
|
+
import { createHash } from 'crypto';
|
|
12
|
+
import { closeSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from 'fs';
|
|
13
|
+
import path from 'path';
|
|
14
|
+
import { fileURLToPath } from 'url';
|
|
15
|
+
import { BKPER_CONFIG_DIR } from '../dev/cloudflared/constants.js';
|
|
16
|
+
import { PACKAGE_DIR, VERSION, fetchLatestVersion, getSelfUpdatePlan, readInstalledVersion, runInstallCommand, } from './installation.js';
|
|
17
|
+
import { isNewerVersion } from './upgrade.js';
|
|
18
|
+
/** At most one npm check (and install attempt) per installed copy per day. */
|
|
19
|
+
export const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
20
|
+
const REGISTRY_TIMEOUT_MS = 3000;
|
|
21
|
+
const STALE_LOCK_MS = 5000;
|
|
22
|
+
/**
|
|
23
|
+
* Cache file for one installed copy. Copies (e.g. npm and bun) keep separate
|
|
24
|
+
* state so each one only ever updates itself.
|
|
25
|
+
*/
|
|
26
|
+
export function getUpdateCachePath(packageDir = PACKAGE_DIR, configDir = BKPER_CONFIG_DIR) {
|
|
27
|
+
const key = createHash('sha256').update(packageDir).digest('hex').slice(0, 16);
|
|
28
|
+
return path.join(configDir, 'update-check', `${key}.json`);
|
|
29
|
+
}
|
|
30
|
+
export function isUpdateCheckDisabled(env = process.env) {
|
|
31
|
+
var _a;
|
|
32
|
+
if (env.BKPER_DISABLE_AUTOUPDATE) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
const ci = (_a = env.CI) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase();
|
|
36
|
+
return !!ci && ci !== '0' && ci !== 'false';
|
|
37
|
+
}
|
|
38
|
+
export function readUpdateState(cachePath = getUpdateCachePath()) {
|
|
39
|
+
try {
|
|
40
|
+
const data = JSON.parse(readFileSync(cachePath, 'utf8'));
|
|
41
|
+
if (typeof data !== 'object' || data === null || Array.isArray(data)) {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
const record = data;
|
|
45
|
+
const state = {};
|
|
46
|
+
if (typeof record.lastAttemptedAt === 'number') {
|
|
47
|
+
state.lastAttemptedAt = record.lastAttemptedAt;
|
|
48
|
+
}
|
|
49
|
+
if (typeof record.latestVersion === 'string') {
|
|
50
|
+
state.latestVersion = record.latestVersion;
|
|
51
|
+
}
|
|
52
|
+
const install = record.install;
|
|
53
|
+
if (install &&
|
|
54
|
+
typeof install.version === 'string' &&
|
|
55
|
+
(install.status === 'installed' ||
|
|
56
|
+
install.status === 'manual' ||
|
|
57
|
+
install.status === 'failed')) {
|
|
58
|
+
state.install = { version: install.version, status: install.status };
|
|
59
|
+
if (typeof install.instruction === 'string') {
|
|
60
|
+
state.install.instruction = install.instruction;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return state;
|
|
64
|
+
}
|
|
65
|
+
catch (_a) {
|
|
66
|
+
return {};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Writes the state atomically (temp file + rename). */
|
|
70
|
+
export function writeUpdateState(state, cachePath = getUpdateCachePath()) {
|
|
71
|
+
const tempPath = `${cachePath}.${process.pid}.tmp`;
|
|
72
|
+
try {
|
|
73
|
+
mkdirSync(path.dirname(cachePath), { recursive: true });
|
|
74
|
+
writeFileSync(tempPath, `${JSON.stringify(state)}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
75
|
+
renameSync(tempPath, cachePath);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
catch (_a) {
|
|
79
|
+
try {
|
|
80
|
+
unlinkSync(tempPath);
|
|
81
|
+
}
|
|
82
|
+
catch (_b) {
|
|
83
|
+
// Nothing to clean up
|
|
84
|
+
}
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function withLock(cachePath, fn) {
|
|
89
|
+
const lockPath = `${cachePath}.lock`;
|
|
90
|
+
let fd;
|
|
91
|
+
try {
|
|
92
|
+
mkdirSync(path.dirname(cachePath), { recursive: true });
|
|
93
|
+
try {
|
|
94
|
+
fd = openSync(lockPath, 'wx', 0o600);
|
|
95
|
+
}
|
|
96
|
+
catch (_a) {
|
|
97
|
+
if (Date.now() - statSync(lockPath).mtimeMs <= STALE_LOCK_MS) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
unlinkSync(lockPath);
|
|
101
|
+
fd = openSync(lockPath, 'wx', 0o600);
|
|
102
|
+
}
|
|
103
|
+
return fn();
|
|
104
|
+
}
|
|
105
|
+
catch (_b) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
if (fd !== undefined) {
|
|
110
|
+
try {
|
|
111
|
+
closeSync(fd);
|
|
112
|
+
unlinkSync(lockPath);
|
|
113
|
+
}
|
|
114
|
+
catch (_c) {
|
|
115
|
+
// Lock goes stale on its own
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function spawnUpdateWorker() {
|
|
121
|
+
const isTypeScript = import.meta.url.endsWith('.ts');
|
|
122
|
+
const workerPath = fileURLToPath(new URL(isTypeScript ? './update-worker.ts' : './update-worker.js', import.meta.url));
|
|
123
|
+
const args = isTypeScript ? [...process.execArgv, workerPath] : [workerPath];
|
|
124
|
+
spawn(process.execPath, args, { detached: true, stdio: 'ignore', windowsHide: true }).unref();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Starts the detached update worker when the last attempt is older than a day.
|
|
128
|
+
* Never blocks the running command and never installs in this process.
|
|
129
|
+
*/
|
|
130
|
+
export function maybeStartUpdateCheck(options = {}) {
|
|
131
|
+
var _a, _b, _c, _d;
|
|
132
|
+
const cachePath = (_a = options.cachePath) !== null && _a !== void 0 ? _a : getUpdateCachePath();
|
|
133
|
+
const now = (_b = options.now) !== null && _b !== void 0 ? _b : Date.now();
|
|
134
|
+
if (isUpdateCheckDisabled((_c = options.env) !== null && _c !== void 0 ? _c : process.env)) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
const claimed = withLock(cachePath, () => {
|
|
138
|
+
const state = readUpdateState(cachePath);
|
|
139
|
+
if (state.lastAttemptedAt !== undefined && now - state.lastAttemptedAt < CHECK_INTERVAL_MS) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
return writeUpdateState(Object.assign(Object.assign({}, state), { lastAttemptedAt: now }), cachePath);
|
|
143
|
+
});
|
|
144
|
+
if (!claimed) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
((_d = options.spawnWorker) !== null && _d !== void 0 ? _d : spawnUpdateWorker)();
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
catch (_e) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function createDefaultWorkerDependencies() {
|
|
156
|
+
return {
|
|
157
|
+
cachePath: getUpdateCachePath(),
|
|
158
|
+
version: VERSION,
|
|
159
|
+
fetchLatestVersion,
|
|
160
|
+
getSelfUpdatePlan: version => getSelfUpdatePlan(version),
|
|
161
|
+
runInstall: runInstallCommand,
|
|
162
|
+
readInstalledVersion,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function decideInstall(latest, deps) {
|
|
166
|
+
const plan = deps.getSelfUpdatePlan(latest);
|
|
167
|
+
if (plan.kind === 'manual') {
|
|
168
|
+
return { version: latest, status: 'manual', instruction: plan.instruction };
|
|
169
|
+
}
|
|
170
|
+
if (deps.readInstalledVersion(plan.packageJsonPath) === latest) {
|
|
171
|
+
return { version: latest, status: 'installed' };
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
deps.runInstall(plan.command);
|
|
175
|
+
}
|
|
176
|
+
catch (_a) {
|
|
177
|
+
return { version: latest, status: 'failed' };
|
|
178
|
+
}
|
|
179
|
+
const installed = deps.readInstalledVersion(plan.packageJsonPath);
|
|
180
|
+
return { version: latest, status: installed === latest ? 'installed' : 'failed' };
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Detached worker: checks npm and installs a newer version into the running
|
|
184
|
+
* copy only when that copy is a verified, writable global install.
|
|
185
|
+
*/
|
|
186
|
+
export function runUpdateWorker() {
|
|
187
|
+
return __awaiter(this, arguments, void 0, function* (deps = createDefaultWorkerDependencies()) {
|
|
188
|
+
try {
|
|
189
|
+
const latest = yield deps.fetchLatestVersion(REGISTRY_TIMEOUT_MS);
|
|
190
|
+
if (!latest) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
writeUpdateState(Object.assign(Object.assign({}, readUpdateState(deps.cachePath)), { latestVersion: latest }), deps.cachePath);
|
|
194
|
+
if (!isNewerVersion(deps.version, latest)) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const install = decideInstall(latest, deps);
|
|
198
|
+
writeUpdateState(Object.assign(Object.assign({}, readUpdateState(deps.cachePath)), { install }), deps.cachePath);
|
|
199
|
+
}
|
|
200
|
+
catch (_a) {
|
|
201
|
+
// Never surface worker errors
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Reads what the running copy should tell the user, based on the cache only.
|
|
207
|
+
*/
|
|
208
|
+
export function getUpdateNotice(state, currentVersion = VERSION) {
|
|
209
|
+
var _a;
|
|
210
|
+
const latest = state.latestVersion;
|
|
211
|
+
if (!latest || !isNewerVersion(currentVersion, latest)) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
const install = state.install;
|
|
215
|
+
if (!install || install.version !== latest) {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
if (install.status === 'installed') {
|
|
219
|
+
return { kind: 'installed', current: currentVersion, latest };
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
kind: 'manual',
|
|
223
|
+
current: currentVersion,
|
|
224
|
+
latest,
|
|
225
|
+
instruction: (_a = install.instruction) !== null && _a !== void 0 ? _a : 'Run: bkper upgrade',
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
export function formatUpdateNotice(notice) {
|
|
229
|
+
if (notice.kind === 'installed') {
|
|
230
|
+
return `bkper ${notice.latest} installed (current ${notice.current}). Restart to use it.`;
|
|
231
|
+
}
|
|
232
|
+
return `bkper ${notice.latest} available (current ${notice.current}). ${notice.instruction}`;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Plain-command hook: prints the fallback warning when the copy cannot
|
|
236
|
+
* update itself, then starts the daily background check.
|
|
237
|
+
*/
|
|
238
|
+
export function runCommandUpdateCheck(writeStderr = message => process.stderr.write(message)) {
|
|
239
|
+
try {
|
|
240
|
+
if (isUpdateCheckDisabled()) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const notice = getUpdateNotice(readUpdateState());
|
|
244
|
+
if ((notice === null || notice === void 0 ? void 0 : notice.kind) === 'manual') {
|
|
245
|
+
writeStderr(`${formatUpdateNotice(notice)}\n`);
|
|
246
|
+
}
|
|
247
|
+
maybeStartUpdateCheck();
|
|
248
|
+
}
|
|
249
|
+
catch (_a) {
|
|
250
|
+
// Never break the user's command
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/upgrade/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-worker.d.ts","sourceRoot":"","sources":["../../src/upgrade/update-worker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-worker.js","sourceRoot":"","sources":["../../src/upgrade/update-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,2DAA2D;AAC3D,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IACzB,8BAA8B;AAClC,CAAC,CAAC,CAAC"}
|
package/lib/upgrade/upgrade.d.ts
CHANGED
|
@@ -1,43 +1,26 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SelfUpdatePlan } from './installation.js';
|
|
2
2
|
/**
|
|
3
3
|
* Compares two semver version strings.
|
|
4
4
|
* Returns true if `latest` is newer than `current`.
|
|
5
5
|
*/
|
|
6
6
|
export declare function isNewerVersion(current: string, latest: string): boolean;
|
|
7
|
-
export interface
|
|
8
|
-
current: string;
|
|
9
|
-
latest: string;
|
|
10
|
-
method: InstallMethod;
|
|
11
|
-
}
|
|
12
|
-
export interface AvailableUpgradeDependencies {
|
|
7
|
+
export interface UpgradeDependencies {
|
|
13
8
|
version: string;
|
|
14
9
|
fetchLatestVersion: () => Promise<string | null>;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
getSelfUpdatePlan: (version: string) => SelfUpdatePlan;
|
|
11
|
+
runInstall: (command: string) => void;
|
|
12
|
+
readInstalledVersion: (packageJsonPath: string) => string | undefined;
|
|
13
|
+
log: (message: string) => void;
|
|
14
|
+
error: (message: string) => void;
|
|
20
15
|
}
|
|
21
16
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*/
|
|
25
|
-
export declare function getAvailableUpgrade(dependencies?: AvailableUpgradeDependencies): Promise<AvailableUpgrade | null>;
|
|
26
|
-
/**
|
|
27
|
-
* Runs the silent auto-upgrade check in the background.
|
|
28
|
-
*
|
|
29
|
-
* This function:
|
|
30
|
-
* 1. Fetches the latest version from npm
|
|
31
|
-
* 2. Compares with the current installed version
|
|
32
|
-
* 3. If newer, starts a detached background upgrade using the detected install method
|
|
33
|
-
* 4. Prints a brief message to stderr on fallback or when running non-interactively
|
|
34
|
-
*
|
|
35
|
-
* All errors are swallowed silently to never disrupt the user's command.
|
|
17
|
+
* Upgrades the running copy of bkper and returns the process exit code.
|
|
18
|
+
* Refuses to touch anything that is not a verified, writable global install.
|
|
36
19
|
*/
|
|
37
|
-
export declare function
|
|
20
|
+
export declare function runUpgrade(targetVersion: string | undefined, deps?: UpgradeDependencies): Promise<number>;
|
|
38
21
|
/**
|
|
39
22
|
* Runs an explicit foreground upgrade with user-facing output.
|
|
40
23
|
* Used by the `bkper upgrade` command.
|
|
41
24
|
*/
|
|
42
|
-
export declare function foregroundUpgrade(targetVersion?: string
|
|
25
|
+
export declare function foregroundUpgrade(targetVersion?: string): Promise<void>;
|
|
43
26
|
//# sourceMappingURL=upgrade.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQvE;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,cAAc,CAAC;IACvD,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,oBAAoB,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACtE,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAcD;;;GAGG;AACH,wBAAsB,UAAU,CAC5B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,IAAI,GAAE,mBAAwD,GAC/D,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7E"}
|
package/lib/upgrade/upgrade.js
CHANGED
|
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { VERSION, fetchLatestVersion,
|
|
10
|
+
import { VERSION, fetchLatestVersion, getSelfUpdatePlan, readInstalledVersion, runInstallCommand, } from './installation.js';
|
|
11
11
|
/**
|
|
12
12
|
* Compares two semver version strings.
|
|
13
13
|
* Returns true if `latest` is newer than `current`.
|
|
@@ -22,118 +22,71 @@ export function isNewerVersion(current, latest) {
|
|
|
22
22
|
return lMinor > cMinor;
|
|
23
23
|
return lPatch > cPatch;
|
|
24
24
|
}
|
|
25
|
-
function
|
|
26
|
-
if (process.stdout.isTTY === true && process.stderr.isTTY === true) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
process.stderr.write(message);
|
|
30
|
-
}
|
|
31
|
-
function createDefaultAvailableUpgradeDependencies() {
|
|
25
|
+
function createDefaultUpgradeDependencies() {
|
|
32
26
|
return {
|
|
33
27
|
version: VERSION,
|
|
34
|
-
fetchLatestVersion,
|
|
35
|
-
|
|
28
|
+
fetchLatestVersion: () => fetchLatestVersion(),
|
|
29
|
+
getSelfUpdatePlan: version => getSelfUpdatePlan(version),
|
|
30
|
+
runInstall: runInstallCommand,
|
|
31
|
+
readInstalledVersion,
|
|
32
|
+
log: message => console.log(message),
|
|
33
|
+
error: message => console.error(message),
|
|
36
34
|
};
|
|
37
35
|
}
|
|
38
|
-
function createDefaultAutoUpgradeDependencies() {
|
|
39
|
-
return Object.assign(Object.assign({}, createDefaultAvailableUpgradeDependencies()), { startUpgrade: startDetachedUpgrade, writeStderr: writeAutoUpgradeMessage });
|
|
40
|
-
}
|
|
41
|
-
function getManualUpgradeMessage(current, latest) {
|
|
42
|
-
return (`\nbkper ${latest} available (current: ${current}). ` +
|
|
43
|
-
`Upgrade manually: npm install -g bkper@${latest}\n`);
|
|
44
|
-
}
|
|
45
36
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
37
|
+
* Upgrades the running copy of bkper and returns the process exit code.
|
|
38
|
+
* Refuses to touch anything that is not a verified, writable global install.
|
|
48
39
|
*/
|
|
49
|
-
export function
|
|
50
|
-
return __awaiter(this, arguments, void 0, function* (
|
|
51
|
-
const latest = yield
|
|
52
|
-
if (!latest)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
* 3. If newer, starts a detached background upgrade using the detected install method
|
|
71
|
-
* 4. Prints a brief message to stderr on fallback or when running non-interactively
|
|
72
|
-
*
|
|
73
|
-
* All errors are swallowed silently to never disrupt the user's command.
|
|
74
|
-
*/
|
|
75
|
-
export function autoUpgrade() {
|
|
76
|
-
return __awaiter(this, arguments, void 0, function* (dependencies = createDefaultAutoUpgradeDependencies()) {
|
|
40
|
+
export function runUpgrade(targetVersion_1) {
|
|
41
|
+
return __awaiter(this, arguments, void 0, function* (targetVersion, deps = createDefaultUpgradeDependencies()) {
|
|
42
|
+
const latest = targetVersion !== null && targetVersion !== void 0 ? targetVersion : (yield deps.fetchLatestVersion());
|
|
43
|
+
if (!latest) {
|
|
44
|
+
deps.error('Could not determine the latest version. Check your network connection.');
|
|
45
|
+
return 1;
|
|
46
|
+
}
|
|
47
|
+
if (!targetVersion && !isNewerVersion(deps.version, latest)) {
|
|
48
|
+
deps.log(`Already on the latest version (${deps.version}).`);
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
const plan = deps.getSelfUpdatePlan(latest);
|
|
52
|
+
if (plan.kind === 'manual') {
|
|
53
|
+
deps.error(`Cannot upgrade this bkper automatically.\n` +
|
|
54
|
+
`Running bkper: ${plan.packageDir}\n` +
|
|
55
|
+
`Detected method: ${plan.method}\n` +
|
|
56
|
+
plan.instruction);
|
|
57
|
+
return 1;
|
|
58
|
+
}
|
|
59
|
+
deps.log(`Upgrading bkper: ${deps.version} \u2192 ${latest}`);
|
|
60
|
+
deps.log(`Running: ${plan.command}`);
|
|
77
61
|
try {
|
|
78
|
-
|
|
79
|
-
if (!availableUpgrade)
|
|
80
|
-
return;
|
|
81
|
-
if (availableUpgrade.method === 'unknown') {
|
|
82
|
-
dependencies.writeStderr(getManualUpgradeMessage(availableUpgrade.current, availableUpgrade.latest));
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
try {
|
|
86
|
-
dependencies.startUpgrade(availableUpgrade.method, availableUpgrade.latest);
|
|
87
|
-
dependencies.writeStderr(`\nbkper update started in background: ` +
|
|
88
|
-
`${availableUpgrade.current} \u2192 ${availableUpgrade.latest} ` +
|
|
89
|
-
`(restart later to use)\n`);
|
|
90
|
-
}
|
|
91
|
-
catch (_a) {
|
|
92
|
-
dependencies.writeStderr(getManualUpgradeMessage(availableUpgrade.current, availableUpgrade.latest));
|
|
93
|
-
}
|
|
62
|
+
deps.runInstall(plan.command);
|
|
94
63
|
}
|
|
95
|
-
catch (
|
|
96
|
-
|
|
64
|
+
catch (err) {
|
|
65
|
+
deps.error(`Upgrade failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
66
|
+
deps.error(`Try upgrading manually: ${plan.command}`);
|
|
67
|
+
return 1;
|
|
68
|
+
}
|
|
69
|
+
const installed = deps.readInstalledVersion(plan.packageJsonPath);
|
|
70
|
+
if (installed !== latest) {
|
|
71
|
+
deps.error(`bkper@${latest} was installed elsewhere; the running bkper at ${plan.packageDir} ` +
|
|
72
|
+
`is still ${installed !== null && installed !== void 0 ? installed : 'unknown'}.\n` +
|
|
73
|
+
`Update it with the package manager that provides it.`);
|
|
74
|
+
return 1;
|
|
97
75
|
}
|
|
76
|
+
deps.log(`Successfully upgraded to bkper@${latest}. Restart your terminal to use the new version.`);
|
|
77
|
+
return 0;
|
|
98
78
|
});
|
|
99
79
|
}
|
|
100
80
|
/**
|
|
101
81
|
* Runs an explicit foreground upgrade with user-facing output.
|
|
102
82
|
* Used by the `bkper upgrade` command.
|
|
103
83
|
*/
|
|
104
|
-
export function foregroundUpgrade(targetVersion
|
|
84
|
+
export function foregroundUpgrade(targetVersion) {
|
|
105
85
|
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
-
const
|
|
107
|
-
if (
|
|
108
|
-
|
|
109
|
-
process.exit(1);
|
|
110
|
-
}
|
|
111
|
-
if (!isNewerVersion(VERSION, latest) && !targetVersion) {
|
|
112
|
-
console.log(`Already on the latest version (${VERSION}).`);
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
const method = methodOverride && isValidMethod(methodOverride) ? methodOverride : detectMethod();
|
|
116
|
-
if (method === 'unknown') {
|
|
117
|
-
console.error(`Could not detect how bkper was installed.\n` +
|
|
118
|
-
`Please upgrade manually: npm install -g bkper@${latest}\n` +
|
|
119
|
-
`Or specify the method: bkper upgrade --method npm`);
|
|
120
|
-
process.exit(1);
|
|
121
|
-
}
|
|
122
|
-
const command = getUpgradeCommand(method, latest);
|
|
123
|
-
console.log(`Upgrading bkper: ${VERSION} \u2192 ${latest}`);
|
|
124
|
-
console.log(`Running: ${command}`);
|
|
125
|
-
try {
|
|
126
|
-
executeUpgrade(method, latest);
|
|
127
|
-
console.log(`Successfully upgraded to bkper@${latest}. Restart your terminal to use the new version.`);
|
|
128
|
-
}
|
|
129
|
-
catch (err) {
|
|
130
|
-
console.error(`Upgrade failed:`, err);
|
|
131
|
-
console.error(`\nTry upgrading manually: ${command}`);
|
|
132
|
-
process.exit(1);
|
|
86
|
+
const exitCode = yield runUpgrade(targetVersion);
|
|
87
|
+
if (exitCode !== 0) {
|
|
88
|
+
process.exit(exitCode);
|
|
133
89
|
}
|
|
134
90
|
});
|
|
135
91
|
}
|
|
136
|
-
function isValidMethod(method) {
|
|
137
|
-
return ['npm', 'bun', 'yarn'].includes(method);
|
|
138
|
-
}
|
|
139
92
|
//# sourceMappingURL=upgrade.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACH,OAAO,EACP,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Formats a 2D matrix into an RFC 4180 compliant CSV string.
|
|
3
|
-
*
|
|
4
|
-
* - Row 0 is treated as headers, rows 1+ as data (all rendered identically)
|
|
5
|
-
* - Uses CRLF line endings per RFC 4180
|
|
6
|
-
* - Fields containing commas, double quotes, or newlines are quoted
|
|
7
|
-
* - Double quotes are escaped by doubling them ("")
|
|
8
|
-
* - null/undefined cells are rendered as empty strings
|
|
9
|
-
* - No truncation is applied to any field
|
|
10
|
-
*
|
|
11
|
-
* @param matrix - 2D array where row 0 is headers and rows 1+ are data
|
|
12
|
-
* @returns RFC 4180 CSV string
|
|
13
|
-
*/
|
|
14
|
-
export declare function formatCsv(matrix: unknown[][]): string;
|
|
15
|
-
//# sourceMappingURL=csv-formatter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"csv-formatter.d.ts","sourceRoot":"","sources":["../../src/render/csv-formatter.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,CAMrD"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Formats a field value according to RFC 4180 rules.
|
|
3
|
-
*
|
|
4
|
-
* - null/undefined become empty string
|
|
5
|
-
* - Fields containing commas, double quotes, or newlines are wrapped in double quotes
|
|
6
|
-
* - Double quotes within a field are escaped by doubling them ("")
|
|
7
|
-
*/
|
|
8
|
-
function formatField(value) {
|
|
9
|
-
if (value == null) {
|
|
10
|
-
return '';
|
|
11
|
-
}
|
|
12
|
-
const str = String(value);
|
|
13
|
-
if (str.includes('"') || str.includes(',') || str.includes('\n') || str.includes('\r')) {
|
|
14
|
-
return '"' + str.replace(/"/g, '""') + '"';
|
|
15
|
-
}
|
|
16
|
-
return str;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Formats a 2D matrix into an RFC 4180 compliant CSV string.
|
|
20
|
-
*
|
|
21
|
-
* - Row 0 is treated as headers, rows 1+ as data (all rendered identically)
|
|
22
|
-
* - Uses CRLF line endings per RFC 4180
|
|
23
|
-
* - Fields containing commas, double quotes, or newlines are quoted
|
|
24
|
-
* - Double quotes are escaped by doubling them ("")
|
|
25
|
-
* - null/undefined cells are rendered as empty strings
|
|
26
|
-
* - No truncation is applied to any field
|
|
27
|
-
*
|
|
28
|
-
* @param matrix - 2D array where row 0 is headers and rows 1+ are data
|
|
29
|
-
* @returns RFC 4180 CSV string
|
|
30
|
-
*/
|
|
31
|
-
export function formatCsv(matrix) {
|
|
32
|
-
if (!matrix || matrix.length === 0) {
|
|
33
|
-
return '';
|
|
34
|
-
}
|
|
35
|
-
return matrix.map(row => row.map(formatField).join(',')).join('\r\n');
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=csv-formatter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"csv-formatter.js","sourceRoot":"","sources":["../../src/render/csv-formatter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,KAAc;IAC/B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrF,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;IAC/C,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,MAAmB;IACzC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC"}
|