@instawp/cli 0.0.1-beta.22 → 0.0.1-beta.23
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/CHANGELOG.md +7 -0
- package/README.md +9 -0
- package/dist/commands/upgrade.d.ts +2 -0
- package/dist/commands/upgrade.js +47 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/index.js +21 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +7 -0
- package/dist/lib/config.js +11 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/update-notifier.d.ts +18 -0
- package/dist/lib/update-notifier.js +101 -0
- package/dist/lib/update-notifier.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.0.1-beta.23 (2026-06-15)
|
|
4
|
+
|
|
5
|
+
### Added — update notifier + `instawp upgrade`
|
|
6
|
+
- The CLI now checks npm for a newer version **at most once a day** (cached in `~/.config/instawp/`) and prints a one-line hint to **stderr** when an update is available — e.g. `⚡ Update available: 0.0.1-beta.22 → beta.23 · run: instawp upgrade`. It's instant on cache hits and only does a short, timeout-bounded network call on the daily refresh.
|
|
7
|
+
- **`instawp upgrade`** (alias `update`) self-updates via `npm i -g @instawp/cli@latest`; `--check` reports without installing.
|
|
8
|
+
- **Never pollutes output or surprises you**: the hint is suppressed in `--json`, `CI`, and non-interactive shells (so harnesses never see it), and it never auto-installs by default. Opt into hands-off updates with `INSTAWP_AUTO_UPGRADE=1`; silence the hint with `INSTAWP_NO_UPDATE_NOTIFIER=1`.
|
|
9
|
+
|
|
3
10
|
## 0.0.1-beta.22 (2026-06-15)
|
|
4
11
|
|
|
5
12
|
### Added — `plugin install`, `sql`, and HTTP-ready `create`
|
package/README.md
CHANGED
|
@@ -264,6 +264,15 @@ instawp wp "pr-$PR_NUMBER" option get siteurl --api
|
|
|
264
264
|
instawp sites delete "pr-$PR_NUMBER" --force
|
|
265
265
|
```
|
|
266
266
|
|
|
267
|
+
## Updating
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
instawp upgrade # update to the latest version
|
|
271
|
+
instawp upgrade --check # check only; don't install
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
The CLI checks for a new version **once a day** and prints a one-line hint (to stderr) when one is available. It never auto-installs and never pollutes command output — it's silenced automatically in `--json`, CI, and non-interactive shells. Opt into hands-off updates with `INSTAWP_AUTO_UPGRADE=1`, or silence the hint entirely with `INSTAWP_NO_UPDATE_NOTIFIER=1`.
|
|
275
|
+
|
|
267
276
|
## Requirements
|
|
268
277
|
|
|
269
278
|
- Node.js 18+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { fetchLatestVersion, performUpgrade, compareVersions } from '../lib/update-notifier.js';
|
|
3
|
+
import { success, error, info, isJsonMode } from '../lib/output.js';
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
export function registerUpgradeCommand(program) {
|
|
6
|
+
program
|
|
7
|
+
.command('upgrade')
|
|
8
|
+
.alias('update')
|
|
9
|
+
.description('Update the InstaWP CLI to the latest version')
|
|
10
|
+
.option('--check', 'Only check for an update; do not install')
|
|
11
|
+
.action(async (opts) => {
|
|
12
|
+
const current = require('../../package.json').version;
|
|
13
|
+
const json = isJsonMode();
|
|
14
|
+
const latest = await fetchLatestVersion();
|
|
15
|
+
if (!latest) {
|
|
16
|
+
error('Could not reach npm to check for updates.');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
const upToDate = compareVersions(latest, current) <= 0;
|
|
20
|
+
if (upToDate) {
|
|
21
|
+
if (json)
|
|
22
|
+
console.log(JSON.stringify({ success: true, data: { current, latest, up_to_date: true } }));
|
|
23
|
+
else
|
|
24
|
+
success(`Already up to date (${current}).`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (opts.check) {
|
|
28
|
+
if (json)
|
|
29
|
+
console.log(JSON.stringify({ success: true, data: { current, latest, up_to_date: false } }));
|
|
30
|
+
else
|
|
31
|
+
info(`Update available: ${current} → ${latest}. Run \`instawp upgrade\` to install.`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (!json)
|
|
35
|
+
info(`Updating ${current} → ${latest}…`);
|
|
36
|
+
const code = performUpgrade();
|
|
37
|
+
if (code !== 0) {
|
|
38
|
+
error('Upgrade failed. If this is a permissions error, try: sudo npm install -g @instawp/cli@latest');
|
|
39
|
+
process.exit(code);
|
|
40
|
+
}
|
|
41
|
+
if (json)
|
|
42
|
+
console.log(JSON.stringify({ success: true, data: { current, latest, upgraded: true } }));
|
|
43
|
+
else
|
|
44
|
+
success(`Updated to ${latest}.`);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,QAAQ,CAAC;SACf,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,SAAS,EAAE,0CAA0C,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,IAAyB,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAW,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;QAC9D,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAE1B,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;;gBACjG,OAAO,CAAC,uBAAuB,OAAO,IAAI,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;;gBAClG,IAAI,CAAC,qBAAqB,OAAO,MAAM,MAAM,uCAAuC,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,YAAY,OAAO,MAAM,MAAM,GAAG,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,KAAK,CAAC,8FAA8F,CAAC,CAAC;YACtG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;;YAC/F,OAAO,CAAC,cAAc,MAAM,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,8 @@ import { registerLocalCommand } from './commands/local.js';
|
|
|
16
16
|
import { registerDbCommand } from './commands/db.js';
|
|
17
17
|
import { registerOpenCommand } from './commands/open.js';
|
|
18
18
|
import { registerLogsCommand } from './commands/logs.js';
|
|
19
|
+
import { registerUpgradeCommand } from './commands/upgrade.js';
|
|
20
|
+
import { maybeNotifyUpdate } from './lib/update-notifier.js';
|
|
19
21
|
const require = createRequire(import.meta.url);
|
|
20
22
|
const { version } = require('../package.json');
|
|
21
23
|
// Early --json detection so it works in any argv position
|
|
@@ -52,6 +54,8 @@ registerOpenCommand(program);
|
|
|
52
54
|
registerTeamsCommand(program);
|
|
53
55
|
// -- Local dev --
|
|
54
56
|
registerLocalCommand(program);
|
|
57
|
+
// -- Self-update --
|
|
58
|
+
registerUpgradeCommand(program);
|
|
55
59
|
// -- Changelog --
|
|
56
60
|
program
|
|
57
61
|
.command('changelog')
|
|
@@ -104,6 +108,8 @@ ${d('Remote Access')}
|
|
|
104
108
|
${c('db')} ${d('push|pull')} Push/pull MySQL database (auto-backup)
|
|
105
109
|
${c('logs')} ${d('<site>')} Tail WP / PHP / nginx logs
|
|
106
110
|
${c('exec')} ${d('<site>')} ${d('<cmd>')} Run arbitrary shell (escape hatch for non-WP)
|
|
111
|
+
${c('sql')} ${d('<site>')} ${d('<query>')} Run SQL via WP-CLI (hits MySQL, cache-immune)
|
|
112
|
+
${c('plugin install')} Install a plugin from a local .zip or directory
|
|
107
113
|
|
|
108
114
|
${d('Local Development')}
|
|
109
115
|
${c('local create')} Create and start a local WordPress site
|
|
@@ -120,6 +126,10 @@ ${d('Teams')}
|
|
|
120
126
|
${c('teams switch')} Switch active team
|
|
121
127
|
${c('teams members')} List team members
|
|
122
128
|
|
|
129
|
+
${d('Updating')}
|
|
130
|
+
${c('upgrade')} Update the CLI to the latest version
|
|
131
|
+
${d('(checks once/day and shows a hint; INSTAWP_NO_UPDATE_NOTIFIER=1 to silence)')}
|
|
132
|
+
|
|
123
133
|
${d('Examples')}
|
|
124
134
|
$ instawp login
|
|
125
135
|
$ instawp create --name my-site
|
|
@@ -156,5 +166,15 @@ program.configureHelp({
|
|
|
156
166
|
return output;
|
|
157
167
|
},
|
|
158
168
|
});
|
|
159
|
-
|
|
169
|
+
// Once-a-day update check (stderr banner; suppressed in --json/CI/non-TTY).
|
|
170
|
+
// Skip for `upgrade`/`update` (it checks itself) and version/help.
|
|
171
|
+
const firstArg = process.argv[2];
|
|
172
|
+
const skipNotify = !firstArg || ['upgrade', 'update'].includes(firstArg)
|
|
173
|
+
|| ['-V', '--version', '-h', '--help'].includes(firstArg);
|
|
174
|
+
if (skipNotify) {
|
|
175
|
+
program.parse();
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
maybeNotifyUpdate(version).finally(() => program.parse());
|
|
179
|
+
}
|
|
160
180
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,0DAA0D;AAC1D,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClB,6EAA6E;IAC7E,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,mEAAmE,CAAC;KAChF,OAAO,CAAC,OAAO,CAAC;KAChB,uBAAuB,EAAE;KACzB,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;AAE9C,aAAa;AACb,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,cAAc;AACd,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEjC,sBAAsB;AACtB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,cAAc;AACd,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,kBAAkB;AAClB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,oBAAoB;AACpB,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACxD,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,qBAAqB;AACrB,OAAO,CAAC,aAAa,CAAC;IACpB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE;CACxD,CAAC,CAAC;AAEH,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE;IAChC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IACpB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IACrB,OAAO;EACP,CAAC,CAAC,MAAM,CAAC;IACP,CAAC,CAAC,OAAO,CAAC;IACV,CAAC,CAAC,QAAQ,CAAC;;EAEb,CAAC,CAAC,OAAO,CAAC;IACR,CAAC,CAAC,QAAQ,CAAC;IACX,CAAC,CAAC,YAAY,CAAC;IACf,CAAC,CAAC,aAAa,CAAC;IAChB,CAAC,CAAC,WAAW,CAAC;IACd,CAAC,CAAC,cAAc,CAAC;IACjB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;;EAE5B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,wCAAwC,CAAC;IAC1D,CAAC,CAAC,iBAAiB,CAAC;IACpB,CAAC,CAAC,eAAe,CAAC;IAClB,CAAC,CAAC,kBAAkB,CAAC;IACrB,CAAC,CAAC,iBAAiB,CAAC;;EAEtB,CAAC,CAAC,eAAe,CAAC;IAChB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IACzC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IAC1B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC;IAC7B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC;IAC7B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;IAC1B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;IAC1C,CAAC,CAAC,gBAAgB,CAAC;;EAErB,CAAC,CAAC,mBAAmB,CAAC;IACpB,CAAC,CAAC,cAAc,CAAC;IACjB,CAAC,CAAC,aAAa,CAAC;IAChB,CAAC,CAAC,aAAa,CAAC;IAChB,CAAC,CAAC,YAAY,CAAC;IACf,CAAC,CAAC,YAAY,CAAC;IACf,CAAC,CAAC,YAAY,CAAC;IACf,CAAC,CAAC,YAAY,CAAC;IACf,CAAC,CAAC,cAAc,CAAC;;EAEnB,CAAC,CAAC,OAAO,CAAC;IACR,CAAC,CAAC,YAAY,CAAC;IACf,CAAC,CAAC,cAAc,CAAC;IACjB,CAAC,CAAC,eAAe,CAAC;;EAEpB,CAAC,CAAC,UAAU,CAAC;IACX,CAAC,CAAC,SAAS,CAAC;IACZ,CAAC,CAAC,6EAA6E,CAAC;;EAElF,CAAC,CAAC,UAAU,CAAC;;;;;;;;;;;;CAYd,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,OAAO,CAAC,aAAa,CAAC;IACpB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAErD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,wBAAwB,CAAC;QAEvE,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;gBACxB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;gBAC7B,MAAM,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC;AAEH,4EAA4E;AAC5E,mEAAmE;AACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,MAAM,UAAU,GAAG,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;OACnE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAE5D,IAAI,UAAU,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;KAAM,CAAC;IACN,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAC5D,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -9,6 +9,12 @@ export declare function getTeamId(): number | null;
|
|
|
9
9
|
export declare function setTeamId(id: number): void;
|
|
10
10
|
export declare function clearTeamId(): void;
|
|
11
11
|
export declare function clearConfig(): void;
|
|
12
|
+
interface UpdateCheck {
|
|
13
|
+
lastCheck: number;
|
|
14
|
+
latestVersion: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function getUpdateCheck(): UpdateCheck | null;
|
|
17
|
+
export declare function setUpdateCheck(latestVersion: string): void;
|
|
12
18
|
export declare function getSiteCache(identifier: string): number | null;
|
|
13
19
|
export declare function setSiteCache(identifier: string, siteId: number): void;
|
|
14
20
|
export declare function getLocalInstances(): Record<string, LocalInstance>;
|
|
@@ -18,3 +24,4 @@ export declare function removeLocalInstance(name: string): void;
|
|
|
18
24
|
export declare function getSshCache(siteId: number): SshConnectionCache | null;
|
|
19
25
|
export declare function setSshCache(siteId: number, entry: SshConnectionCache): void;
|
|
20
26
|
export declare function clearSshCache(siteId?: number): void;
|
|
27
|
+
export {};
|
package/dist/lib/config.js
CHANGED
|
@@ -11,6 +11,7 @@ const config = new Conf({
|
|
|
11
11
|
site_cache: { type: 'object', default: {} },
|
|
12
12
|
local_instances: { type: 'object', default: {} },
|
|
13
13
|
team_id: { type: 'number', default: 0 },
|
|
14
|
+
update_check: { type: 'object', default: {} },
|
|
14
15
|
},
|
|
15
16
|
});
|
|
16
17
|
export function getToken() {
|
|
@@ -51,6 +52,16 @@ export function clearTeamId() {
|
|
|
51
52
|
export function clearConfig() {
|
|
52
53
|
config.clear();
|
|
53
54
|
}
|
|
55
|
+
export function getUpdateCheck() {
|
|
56
|
+
const v = config.get('update_check');
|
|
57
|
+
if (v && typeof v.lastCheck === 'number') {
|
|
58
|
+
return { lastCheck: v.lastCheck, latestVersion: v.latestVersion || '' };
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
export function setUpdateCheck(latestVersion) {
|
|
63
|
+
config.set('update_check', { lastCheck: Date.now(), latestVersion });
|
|
64
|
+
}
|
|
54
65
|
export function getSiteCache(identifier) {
|
|
55
66
|
const cache = config.get('site_cache');
|
|
56
67
|
const entry = cache?.[identifier.toLowerCase()];
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAC/C,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAEpD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC;IACtB,WAAW,EAAE,SAAS;IACtB,MAAM,EAAE;QACN,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,wBAAwB,EAAE;QAC9D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACtC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACrC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1C,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3C,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAChD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compare semver-ish versions ("0.0.1" / "0.0.1-beta.22"). Returns >0 if a>b,
|
|
3
|
+
* <0 if a<b, 0 if equal. A release outranks any prerelease of the same core
|
|
4
|
+
* (so 0.0.1 > 0.0.1-beta.22), and beta.22 > beta.9 (numeric, not string).
|
|
5
|
+
*/
|
|
6
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
7
|
+
/** Fetch the newest published version (the `latest` dist-tag). Null on any failure. */
|
|
8
|
+
export declare function fetchLatestVersion(timeoutMs?: number): Promise<string | null>;
|
|
9
|
+
/** Run `npm install -g @instawp/cli@<tag>` (inherits stdio). Returns npm's exit code. */
|
|
10
|
+
export declare function performUpgrade(versionTag?: string): number;
|
|
11
|
+
/**
|
|
12
|
+
* At most once per day, check npm for a newer version. If found, print a
|
|
13
|
+
* one-line banner to STDERR (so it never pollutes stdout/JSON), or run the
|
|
14
|
+
* upgrade automatically when INSTAWP_AUTO_UPGRADE is set. Cache hits are
|
|
15
|
+
* instant; only the daily refresh does a short, timeout-bounded network call.
|
|
16
|
+
* Never throws — a notifier must never break a real command.
|
|
17
|
+
*/
|
|
18
|
+
export declare function maybeNotifyUpdate(currentVersion: string): Promise<void>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { getUpdateCheck, setUpdateCheck } from './config.js';
|
|
3
|
+
import { isJsonMode } from './output.js';
|
|
4
|
+
const PKG = '@instawp/cli';
|
|
5
|
+
const DIST_TAGS_URL = `https://registry.npmjs.org/-/package/${PKG}/dist-tags`;
|
|
6
|
+
const CHECK_INTERVAL = 24 * 60 * 60 * 1000; // once per day
|
|
7
|
+
/**
|
|
8
|
+
* Compare semver-ish versions ("0.0.1" / "0.0.1-beta.22"). Returns >0 if a>b,
|
|
9
|
+
* <0 if a<b, 0 if equal. A release outranks any prerelease of the same core
|
|
10
|
+
* (so 0.0.1 > 0.0.1-beta.22), and beta.22 > beta.9 (numeric, not string).
|
|
11
|
+
*/
|
|
12
|
+
export function compareVersions(a, b) {
|
|
13
|
+
const parse = (v) => {
|
|
14
|
+
const [core, pre] = v.replace(/^v/, '').split('-');
|
|
15
|
+
const [maj, min, pat] = core.split('.').map((n) => parseInt(n, 10) || 0);
|
|
16
|
+
let preNum = Infinity; // no prerelease = highest
|
|
17
|
+
if (pre) {
|
|
18
|
+
const m = pre.match(/(\d+)/);
|
|
19
|
+
preNum = m ? parseInt(m[1], 10) : 0;
|
|
20
|
+
}
|
|
21
|
+
return [maj || 0, min || 0, pat || 0, preNum];
|
|
22
|
+
};
|
|
23
|
+
const pa = parse(a);
|
|
24
|
+
const pb = parse(b);
|
|
25
|
+
for (let i = 0; i < 4; i++) {
|
|
26
|
+
if (pa[i] !== pb[i])
|
|
27
|
+
return pa[i] < pb[i] ? -1 : 1;
|
|
28
|
+
}
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
/** Fetch the newest published version (the `latest` dist-tag). Null on any failure. */
|
|
32
|
+
export async function fetchLatestVersion(timeoutMs = 2500) {
|
|
33
|
+
try {
|
|
34
|
+
const ctrl = new AbortController();
|
|
35
|
+
const timer = setTimeout(() => ctrl.abort(), timeoutMs);
|
|
36
|
+
try {
|
|
37
|
+
const res = await fetch(DIST_TAGS_URL, { signal: ctrl.signal });
|
|
38
|
+
if (!res.ok)
|
|
39
|
+
return null;
|
|
40
|
+
const tags = (await res.json());
|
|
41
|
+
return tags.latest || null;
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
clearTimeout(timer);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Run `npm install -g @instawp/cli@<tag>` (inherits stdio). Returns npm's exit code. */
|
|
52
|
+
export function performUpgrade(versionTag = 'latest') {
|
|
53
|
+
const res = spawnSync('npm', ['install', '-g', `${PKG}@${versionTag}`], { stdio: 'inherit' });
|
|
54
|
+
return res.status ?? 1;
|
|
55
|
+
}
|
|
56
|
+
function suppressed() {
|
|
57
|
+
return Boolean(process.env.INSTAWP_NO_UPDATE_NOTIFIER ||
|
|
58
|
+
process.env.NO_UPDATE_NOTIFIER ||
|
|
59
|
+
process.env.CI ||
|
|
60
|
+
isJsonMode() ||
|
|
61
|
+
!process.stderr.isTTY);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* At most once per day, check npm for a newer version. If found, print a
|
|
65
|
+
* one-line banner to STDERR (so it never pollutes stdout/JSON), or run the
|
|
66
|
+
* upgrade automatically when INSTAWP_AUTO_UPGRADE is set. Cache hits are
|
|
67
|
+
* instant; only the daily refresh does a short, timeout-bounded network call.
|
|
68
|
+
* Never throws — a notifier must never break a real command.
|
|
69
|
+
*/
|
|
70
|
+
export async function maybeNotifyUpdate(currentVersion) {
|
|
71
|
+
if (suppressed())
|
|
72
|
+
return;
|
|
73
|
+
try {
|
|
74
|
+
const cache = getUpdateCheck();
|
|
75
|
+
let latest = cache?.latestVersion || '';
|
|
76
|
+
const stale = !cache || Date.now() - cache.lastCheck > CHECK_INTERVAL;
|
|
77
|
+
if (stale) {
|
|
78
|
+
const fetched = await fetchLatestVersion();
|
|
79
|
+
if (fetched) {
|
|
80
|
+
latest = fetched;
|
|
81
|
+
setUpdateCheck(fetched);
|
|
82
|
+
}
|
|
83
|
+
else if (!cache) {
|
|
84
|
+
return; // first run + offline: nothing cached to show
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (!latest || compareVersions(latest, currentVersion) <= 0)
|
|
88
|
+
return;
|
|
89
|
+
if (process.env.INSTAWP_AUTO_UPGRADE) {
|
|
90
|
+
process.stderr.write(`\nUpdating ${PKG} ${currentVersion} → ${latest}…\n`);
|
|
91
|
+
performUpgrade();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
process.stderr.write(`\n⚡ Update available: ${currentVersion} → ${latest} · run: instawp upgrade\n` +
|
|
95
|
+
` (silence with INSTAWP_NO_UPDATE_NOTIFIER=1)\n\n`);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// swallow — never let the notifier interfere with the command
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=update-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-notifier.js","sourceRoot":"","sources":["../../src/lib/update-notifier.ts"],"names":[],"mappings":"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"}
|