@bitmagic/cli 0.1.53-dev.4 → 0.1.53-dev.6
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 +88 -18
- package/dist/cli.d.ts +10 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/publish.d.ts +7 -2
- package/dist/commands/publish.js +39 -7
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/reset-account.js +25 -8
- package/dist/commands/reset-account.js.map +1 -1
- package/dist/commands/self-update.d.ts +67 -0
- package/dist/commands/self-update.js +196 -0
- package/dist/commands/self-update.js.map +1 -0
- package/dist/commands/upgrade.js +5 -2
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/editor/cli-update.d.ts +32 -0
- package/dist/editor/cli-update.js +67 -0
- package/dist/editor/cli-update.js.map +1 -0
- package/dist/editor/publish-panel.d.ts +31 -0
- package/dist/editor/publish-panel.js +69 -0
- package/dist/editor/publish-panel.js.map +1 -0
- package/dist/editor/server.js +38 -0
- package/dist/editor/server.js.map +1 -1
- package/dist/editor/shell-page.js +112 -3
- package/dist/editor/shell-page.js.map +1 -1
- package/dist/publish/record.d.ts +22 -0
- package/dist/publish/record.js +62 -0
- package/dist/publish/record.js.map +1 -0
- package/dist/render/qr-output.d.ts +44 -0
- package/dist/render/qr-output.js +71 -0
- package/dist/render/qr-output.js.map +1 -0
- package/dist/render/qr-png.d.ts +37 -0
- package/dist/render/qr-png.js +111 -0
- package/dist/render/qr-png.js.map +1 -0
- package/dist/render/qr-terminal.d.ts +8 -1
- package/dist/render/qr-terminal.js +8 -1
- package/dist/render/qr-terminal.js.map +1 -1
- package/dist/scaffold/project-files.js +36 -27
- package/dist/scaffold/project-files.js.map +1 -1
- package/dist/update/check.js +2 -1
- package/dist/update/check.js.map +1 -1
- package/dist/update/notice.d.ts +31 -1
- package/dist/update/notice.js +39 -5
- package/dist/update/notice.js.map +1 -1
- package/dist/update/self-install.d.ts +175 -0
- package/dist/update/self-install.js +335 -0
- package/dist/update/self-install.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `bitmagic self-update` — replace this CLI with the newest build of its own line.
|
|
3
|
+
*
|
|
4
|
+
* Why a command and not a printed instruction: see the header of `update/self-install.ts`. In
|
|
5
|
+
* short, a printed `npm i -g` is run by whatever `npm` the calling shell happens to resolve, which
|
|
6
|
+
* on an nvm machine is routinely not the one that owns this install — the update lands in a prefix
|
|
7
|
+
* nobody's PATH points at, npm reports success, and the next `bitmagic` is still the old build.
|
|
8
|
+
* This command asks the shell nothing.
|
|
9
|
+
*
|
|
10
|
+
* It is also what every update nudge now names, and that is safe by construction: the CLI printing
|
|
11
|
+
* the nudge is on that shell's PATH, because it just ran there.
|
|
12
|
+
*/
|
|
13
|
+
import { defineCommand } from 'citty';
|
|
14
|
+
import { createOutput } from '../output.js';
|
|
15
|
+
import { CliError } from '../errors.js';
|
|
16
|
+
import { currentCliVersion } from '../update/cli-version.js';
|
|
17
|
+
import { fetchTagVersion, writeUpdateCache } from '../update/check.js';
|
|
18
|
+
import { describeUpdateTag, installCommandFor, updateTagFor, updateTagForEnvironment, } from '../update/notice.js';
|
|
19
|
+
import { readPinnedEnvironment } from '../config/environments.js';
|
|
20
|
+
import { isOlderSemverVersion } from '../project/version-compare.js';
|
|
21
|
+
import * as fs from 'fs';
|
|
22
|
+
import { PACKAGE_NAME, installArgs, isStalePackumentFailure, isUpdatable, isWritable, managerFor, readInstalledVersion, realSpawnManager, resolveInstall, } from '../update/self-install.js';
|
|
23
|
+
/** How long to wait before the single retry that a stale packument earns. */
|
|
24
|
+
const RETRY_DELAY_MS = 5000;
|
|
25
|
+
export const defaultSelfUpdateDeps = {
|
|
26
|
+
currentVersion: currentCliVersion,
|
|
27
|
+
pinned: () => readPinnedEnvironment(),
|
|
28
|
+
resolve: () => resolveInstall(import.meta.url),
|
|
29
|
+
fetchTag: (tag) => fetchTagVersion(tag),
|
|
30
|
+
spawn: realSpawnManager,
|
|
31
|
+
readVersion: (dir) => readInstalledVersion(dir),
|
|
32
|
+
writable: (dir) => isWritable(dir),
|
|
33
|
+
exists: (candidate) => fs.existsSync(candidate),
|
|
34
|
+
writeCache: (cache) => writeUpdateCache(cache),
|
|
35
|
+
sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
36
|
+
now: Date.now,
|
|
37
|
+
execPath: process.execPath,
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Which npm line to install from, and never a question put to the creator.
|
|
41
|
+
*
|
|
42
|
+
* The order is the same rule the startup nudge already applies, just acted on instead of printed:
|
|
43
|
+
* an explicit `--tag` is a deliberate override; otherwise a project's committed pin decides,
|
|
44
|
+
* because the project is where a wrong line actually bites (a prerelease against `prod` calls
|
|
45
|
+
* `/api/cli/v1` endpoints that are not deployed there yet); and outside a project the only honest
|
|
46
|
+
* answer is the line this build is already on.
|
|
47
|
+
*
|
|
48
|
+
* That middle case is what makes this command the fix for `cliLineMismatchNotice` too: run inside
|
|
49
|
+
* a project on the wrong line, it crosses over without being told to.
|
|
50
|
+
*/
|
|
51
|
+
export function resolveTargetTag(explicit, pinned, currentVersion) {
|
|
52
|
+
if (explicit !== undefined) {
|
|
53
|
+
if (explicit !== 'latest' && explicit !== 'dev') {
|
|
54
|
+
throw new CliError(`--tag must be \`latest\` or \`dev\`, not \`${explicit}\`.`);
|
|
55
|
+
}
|
|
56
|
+
return explicit;
|
|
57
|
+
}
|
|
58
|
+
if (pinned !== undefined)
|
|
59
|
+
return updateTagForEnvironment(pinned);
|
|
60
|
+
return updateTagFor(currentVersion);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Turn a location this command cannot act on into the sentence that says why, and what to do
|
|
64
|
+
* instead.
|
|
65
|
+
*
|
|
66
|
+
* Every branch names the resolved directory. That is the point: the failure being replaced is one
|
|
67
|
+
* where nobody could tell WHERE the install went, so a refusal that does not say where it looked
|
|
68
|
+
* would be the same failure wearing a different message.
|
|
69
|
+
*/
|
|
70
|
+
function refuse(location, tag) {
|
|
71
|
+
const manual = installCommandFor(tag);
|
|
72
|
+
if (location.kind === 'npx') {
|
|
73
|
+
return new CliError(`This CLI is running from an npx cache (${location.packageDir}), so there is no install to ` +
|
|
74
|
+
`update — npx fetches a fresh copy every time. To keep one, run \`${manual}\`.`);
|
|
75
|
+
}
|
|
76
|
+
if (location.kind === 'linked-dev') {
|
|
77
|
+
return new CliError(`This CLI is running from a source checkout (${location.packageDir}), not from an npm ` +
|
|
78
|
+
'install. Update it with `git pull` and a rebuild (`pnpm run build` in `cli/`).');
|
|
79
|
+
}
|
|
80
|
+
return new CliError(`Could not recognise how this CLI is installed (${location.packageDir}), so it will not guess ` +
|
|
81
|
+
`at where to write. Update it the way you installed it — for a normal install that is ` +
|
|
82
|
+
`\`${manual}\`.`);
|
|
83
|
+
}
|
|
84
|
+
export async function runSelfUpdate(explicitTag, output, deps = defaultSelfUpdateDeps) {
|
|
85
|
+
const current = deps.currentVersion();
|
|
86
|
+
if (current === '') {
|
|
87
|
+
throw new CliError('Could not read this CLI\'s own version, so there is nothing to compare against.');
|
|
88
|
+
}
|
|
89
|
+
const tag = resolveTargetTag(explicitTag, deps.pinned(), current);
|
|
90
|
+
const target = await deps.fetchTag(tag);
|
|
91
|
+
if (target === null) {
|
|
92
|
+
throw new CliError(`Could not reach the npm registry to find the newest ${describeUpdateTag(tag)} build. ` +
|
|
93
|
+
'Check your connection and try again.', 1, 'unreachable');
|
|
94
|
+
}
|
|
95
|
+
const location = deps.resolve();
|
|
96
|
+
if (!isUpdatable(location))
|
|
97
|
+
throw refuse(location, tag);
|
|
98
|
+
const manager = location.kind === 'npm-global' ? 'npm' : 'pnpm';
|
|
99
|
+
// Already current is reported before anything is spawned, but AFTER the location is resolved:
|
|
100
|
+
// being told "you are up to date" by a command that could not have updated you anyway is the
|
|
101
|
+
// kind of all-clear that hides a broken install until the day it matters.
|
|
102
|
+
if (target === current) {
|
|
103
|
+
output.info(`Already on the newest ${describeUpdateTag(tag)} build: ${current}.`);
|
|
104
|
+
// Recorded even though nothing changed: this run just asked npm the question the startup nudge
|
|
105
|
+
// caches an answer to, and throwing that away would leave the nudge free to contradict it.
|
|
106
|
+
deps.writeCache({ latest: target, tag, checkedAt: deps.now() });
|
|
107
|
+
return { ok: true, from: current, to: current, tag, updated: false, manager, packageDir: location.packageDir };
|
|
108
|
+
}
|
|
109
|
+
// A CLI ahead of the registry is a normal state on the dev line right after a release, and
|
|
110
|
+
// "updating" to it would be a downgrade nobody asked for. Asked before the two checks below,
|
|
111
|
+
// which are about whether an install COULD be performed: refusing over an unwritable prefix
|
|
112
|
+
// someone was never going to write to would replace a true answer with an irrelevant complaint.
|
|
113
|
+
if (isOlderSemverVersion(current, target) !== true) {
|
|
114
|
+
output.info(`Nothing newer on the ${describeUpdateTag(tag)} line: it is at ${target}, you have ${current}.`);
|
|
115
|
+
return { ok: true, from: current, to: current, tag, updated: false, manager, packageDir: location.packageDir };
|
|
116
|
+
}
|
|
117
|
+
if (location.kind === 'pnpm-global' && location.binDir === undefined) {
|
|
118
|
+
throw new CliError(`This CLI was installed with pnpm into ${location.globalDir}, but the matching global bin ` +
|
|
119
|
+
'directory could not be found, and installing into a guessed one would put the update ' +
|
|
120
|
+
`somewhere your PATH does not look. Run \`pnpm add -g --global-dir ${location.globalDir} ` +
|
|
121
|
+
`--global-bin-dir <your bin dir> ${PACKAGE_NAME}@${target}\`.`);
|
|
122
|
+
}
|
|
123
|
+
if (!deps.writable(location.modulesRoot)) {
|
|
124
|
+
throw new CliError(`${location.modulesRoot} is not writable by this user, so the update cannot be installed ` +
|
|
125
|
+
'there. Either fix its ownership, or reinstall the CLI into a prefix you own.');
|
|
126
|
+
}
|
|
127
|
+
const command = managerFor(location, deps.execPath, deps.exists);
|
|
128
|
+
const spec = `${PACKAGE_NAME}@${target}`;
|
|
129
|
+
const args = [...command.leadingArgs, ...installArgs(location, spec)];
|
|
130
|
+
output.info(`Updating ${PACKAGE_NAME} on the ${describeUpdateTag(tag)} line: ${current} -> ${target}`);
|
|
131
|
+
output.info(` into ${location.modulesRoot}`);
|
|
132
|
+
if (command.fromPath) {
|
|
133
|
+
output.info(` using \`${command.command}\` from PATH — no bundled ${manager} was found next to this node.`);
|
|
134
|
+
}
|
|
135
|
+
// Nothing below this line may need a module that has not been imported yet: the install replaces
|
|
136
|
+
// the very directory this process is executing out of, and a lazy import after it would resolve
|
|
137
|
+
// against a directory npm has already unlinked.
|
|
138
|
+
let outcome = deps.spawn(command.command, args);
|
|
139
|
+
if (outcome.status !== 0 && isStalePackumentFailure(outcome)) {
|
|
140
|
+
// The documented post-release window: the version IS published, but this machine's cached
|
|
141
|
+
// packument predates it. Retrying is the fix (docs/npm-publishing.md).
|
|
142
|
+
output.info(' npm has a stale package listing for a just-published version; retrying once…');
|
|
143
|
+
await deps.sleep(RETRY_DELAY_MS);
|
|
144
|
+
outcome = deps.spawn(command.command, args);
|
|
145
|
+
}
|
|
146
|
+
if (outcome.error !== undefined) {
|
|
147
|
+
throw new CliError(`Could not run \`${command.command}\`: ${outcome.error.message}. ` +
|
|
148
|
+
(command.fromPath
|
|
149
|
+
? `It was not found next to this node installation and is not on PATH either.`
|
|
150
|
+
: 'The file exists but could not be executed.'));
|
|
151
|
+
}
|
|
152
|
+
if (outcome.status !== 0) {
|
|
153
|
+
const detail = (outcome.stderr.trim() || outcome.stdout.trim()).split('\n').slice(-8);
|
|
154
|
+
for (const line of detail)
|
|
155
|
+
output.info(` ${line}`);
|
|
156
|
+
throw new CliError(`\`${manager}\` exited ${outcome.status ?? 'without a status'}; the CLI was not updated.`);
|
|
157
|
+
}
|
|
158
|
+
// The check that makes a silent no-op impossible. The manager reporting success is not evidence
|
|
159
|
+
// that anything moved — that was precisely the old failure, where npm cheerfully installed into
|
|
160
|
+
// a prefix nobody's PATH pointed at and said so.
|
|
161
|
+
const installed = deps.readVersion(location.verifyDir);
|
|
162
|
+
if (installed !== target) {
|
|
163
|
+
throw new CliError(`\`${manager}\` reported success, but ${location.verifyDir} still holds ` +
|
|
164
|
+
`${installed ?? 'no readable version'} instead of ${target}. The update did not land where ` +
|
|
165
|
+
'this CLI is installed; nothing has been changed.');
|
|
166
|
+
}
|
|
167
|
+
// Written so the startup nudge goes quiet on the very next command instead of at the end of its
|
|
168
|
+
// refresh interval — being told to update by the CLI you just updated reads as a failed update.
|
|
169
|
+
deps.writeCache({ latest: target, tag, checkedAt: deps.now() });
|
|
170
|
+
output.info(`Done. \`bitmagic --version\` now reports ${target}.`);
|
|
171
|
+
return { ok: true, from: current, to: target, tag, updated: true, manager, packageDir: location.packageDir };
|
|
172
|
+
}
|
|
173
|
+
export const selfUpdateCommand = defineCommand({
|
|
174
|
+
meta: {
|
|
175
|
+
name: 'self-update',
|
|
176
|
+
description: 'Update the bitmagic CLI itself to the newest build of its line, installing it where this ' +
|
|
177
|
+
'CLI actually lives rather than wherever `npm` on your PATH would put it.',
|
|
178
|
+
},
|
|
179
|
+
args: {
|
|
180
|
+
tag: {
|
|
181
|
+
type: 'string',
|
|
182
|
+
description: "Which npm line to install: `latest` or `dev`. Defaults to the project's environment, or " +
|
|
183
|
+
'to the line this build is already on.',
|
|
184
|
+
},
|
|
185
|
+
json: {
|
|
186
|
+
type: 'boolean',
|
|
187
|
+
description: 'Print the result as JSON on stdout; all progress goes to stderr.',
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
async run({ args }) {
|
|
191
|
+
const output = createOutput(args.json === true);
|
|
192
|
+
const result = await runSelfUpdate(typeof args.tag === 'string' ? args.tag : undefined, output);
|
|
193
|
+
output.result(result);
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
//# sourceMappingURL=self-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/upgrade.js
CHANGED
|
@@ -16,7 +16,7 @@ import { loadProjectContext } from '../project/context.js';
|
|
|
16
16
|
import { addCommand, detectPackageManager } from '../project/package-manager.js';
|
|
17
17
|
import { isOlderSemverVersion } from '../project/version-compare.js';
|
|
18
18
|
import { fetchTagVersion } from '../update/check.js';
|
|
19
|
-
import {
|
|
19
|
+
import { crossLineUpdateCommand, updateTagFor, updateTagForEnvironment } from '../update/notice.js';
|
|
20
20
|
import { currentCliVersion } from '../update/cli-version.js';
|
|
21
21
|
const deps = {
|
|
22
22
|
fetch: globalThis.fetch,
|
|
@@ -223,7 +223,10 @@ fetchLatest = () => fetchTagVersion(tag)) {
|
|
|
223
223
|
if (updateAvailable) {
|
|
224
224
|
output.info('');
|
|
225
225
|
output.info(`Your CLI is older than the engine you just vendored: ${latest} is on npm, you have ${version}.`);
|
|
226
|
-
|
|
226
|
+
// `--tag` is named because this call site passes the PROJECT's line, not the running build's:
|
|
227
|
+
// an upgrade run by a CLI from the other line must be told to cross over, and the bare command
|
|
228
|
+
// would only re-read the pin it is already standing in.
|
|
229
|
+
output.info(` Run \`${crossLineUpdateCommand(tag)}\` before the next build.`);
|
|
227
230
|
output.info(' The CLI and the engine ship together, so a newer engine can need build config or a ' +
|
|
228
231
|
'command only the newer CLI has.');
|
|
229
232
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,YAAY,EAAe,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACvG,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAiD,MAAM,gCAAgC,CAAC;AACjH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,uBAAuB,EAAkB,MAAM,qBAAqB,CAAC;AACpH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,UAAU,CAAC,KAAK;IACvB,KAAK,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;CAC/E,CAAC;AAMF;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,KAAc;IAC/D,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,QAAQ,CAChB,4FAA4F;YAC1F,mEAAmE,CACtE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACxG,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACvD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,OAAO;QACL,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAC7E,eAAe,EAAE,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;KACvF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CACjE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,IAAY;IAChE,MAAM,UAAU,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;QAC7D,YAAY,EAAE,YAAY;QAC1B,eAAe,EAAE,gBAAgB;KAClC,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAE/C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,IAAI,CACT,4FAA4F;QAC1F,iCAAiC,CACpC,CAAC;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;IACrE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,gGAAgG;AAChG,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAwB;IACrE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO;IAEzC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;QACzG,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CACT,mBAAmB,OAAO,CAAC,eAAe,CAAC,MAAM,WAAW,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,4BAA4B,CACxI,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IACnF,CAAC;IACD,8FAA8F;IAC9F,gGAAgG;IAChG,8FAA8F;IAC9F,0CAA0C;IAC1C,MAAM,CAAC,IAAI,CACT,2FAA2F;QACzF,uFAAuF;QACvF,oCAAoC,CACvC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,IAAY;IACjE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,CAAC,IAAI,CACT,uFAAuF;QACrF,6DAA6D,CAChE,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;IACnG,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC1F,MAAM,CAAC,IAAI,CACT,sFAAsF;QACpF,2DAA2D,CAC9D,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,aAAsB,EACtB,UAAkB,iBAAiB,EAAE;AACrC,6FAA6F;AAC7F,gGAAgG;AAChG,gGAAgG;AAChG,MAAiB,YAAY,CAAC,OAAO,CAAC;AACtC,+FAA+F;AAC/F,cAA4C,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC;IAEtE,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IACnC,8FAA8F;IAC9F,+FAA+F;IAC/F,MAAM,eAAe,GAAG,OAAO,KAAK,EAAE,IAAI,oBAAoB,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/F,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,wDAAwD,MAAM,wBAAwB,OAAO,GAAG,CAAC,CAAC;QAC9G,8FAA8F;QAC9F,+FAA+F;QAC/F,wDAAwD;QACxD,MAAM,CAAC,IAAI,CAAC,WAAW,sBAAsB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAC/E,MAAM,CAAC,IAAI,CACT,uFAAuF;YACrF,iCAAiC,CACpC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,yIAAyI;KACvJ;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qEAAqE,EAAE;QAC9G,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4DAA4D,EAAE;QACrG,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,kEAAkE;SAChF;KAEF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;QACrC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAEjE,MAAM,SAAS,GAAG,2BAA2B,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QAC1C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEhE,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QAE5F,6FAA6F;QAC7F,8FAA8F;QAC9F,wFAAwF;QACxF,gFAAgF;QAChF,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC;QACtD,IAAI,aAAa,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,IAAI,QAAQ,CAChB,4BAA4B,aAAa,mDAAmD;gBAC1F,YAAY,QAAQ,CAAC,OAAO,mCAAmC,CAClE,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,sBAAsB,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;YACvD,MAAM,iBAAiB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YAExG,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACrD,MAAM,aAAa,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG,cAAc,CAAC;gBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,kBAAkB,EAAE,SAAS;gBAC7B,aAAa,EAAE,QAAQ,CAAC,OAAO;gBAC/B,wFAAwF;gBACxF,gFAAgF;gBAChF,2FAA2F;gBAC3F,8EAA8E;gBAC9E,EAAE;gBACF,0FAA0F;gBAC1F,2FAA2F;gBAC3F,uFAAuF;gBACvF,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;oBACjC,SAAS,CAAC,MAAM,KAAK,SAAS;oBAC9B,SAAS,CAAC,MAAM,KAAK,QAAQ;oBAC3B,CAAC,CAAC,EAAE,gBAAgB,EAAE,WAAW,CAAC,IAAI,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,8BAA8B,MAAM,CAAC,iBAAiB,gCAAgC,CAAC,CAAC;YACtG,CAAC;YACD,IAAI,MAAM,CAAC,qBAAqB,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC1D,qFAAqF;gBACrF,qFAAqF;gBACrF,2EAA2E;gBAC3E,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,aAAa,wCAAwC,CAAC,CAAC;YACjG,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,qBAAqB,OAAO,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;YAC7F,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,MAAM,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,sFAAsF;gBACtF,wFAAwF;gBACxF,+CAA+C;gBAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,CACT,aAAa,MAAM,CAAC,qBAAqB,CAAC,MAAM,uDAAuD;oBACrG,4FAA4F;oBAC5F,+BAA+B,CAClC,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBACjD,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,IAAI,iBAAiB,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAClH,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,yDAAyD,MAAM,CAAC,mBAAmB,GAAG,CAAC,CAAC;gBACpG,MAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,qBAAqB,iCAAiC,CAAC,CAAC;gBACnF,MAAM,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;gBAC5F,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAC7E,CAAC;YACD,2FAA2F;YAC3F,0FAA0F;YAC1F,yEAAyE;YACzE,2FAA2F;YAC3F,qFAAqF;YACrF,yEAAyE;YACzE,MAAM,SAAS,GAAG,MAAM,eAAe,CACrC,MAAM,EACN,MAAM,CAAC,qBAAqB,KAAK,MAAM,CAAC,aAAa,EACrD,iBAAiB,EAAE,EACnB,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,CAC1C,CAAC;YACF,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/D,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,cAAc,GAAG,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACpE,MAAM,CAAC,MAAM,CAAC;gBACZ,EAAE,EAAE,IAAI;gBACR,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;gBACnD,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,wFAAwF;gBACxF,uCAAuC;gBACvC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;gBACnD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,IAAI;gBACvD,wFAAwF;gBACxF,qCAAqC;gBACrC,mBAAmB,EAAE,UAAU;gBAC/B,2FAA2F;gBAC3F,gCAAgC;gBAChC,gBAAgB,EAAE,cAAc;gBAChC,sFAAsF;gBACtF,mFAAmF;gBACnF,SAAS;gBACT,4FAA4F;gBAC5F,gEAAgE;gBAChE,QAAQ,EAAE;oBACR,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;oBAC9B,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,eAAe;oBAChD,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;iBACnD;aACF,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type UpdateCheckCache } from '../update/notice.js';
|
|
2
|
+
/** What the banner needs to write its sentence, or null when there is nothing to say. */
|
|
3
|
+
export interface CliUpdateState {
|
|
4
|
+
current: string;
|
|
5
|
+
latest: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* How often the cache file is re-read.
|
|
9
|
+
*
|
|
10
|
+
* Not about the network — the refresh below has its own, much longer interval — but about not
|
|
11
|
+
* stat-ing and parsing a file 7200 times an hour to answer a question whose answer changes at most
|
|
12
|
+
* a few times a day.
|
|
13
|
+
*/
|
|
14
|
+
export declare const CLI_UPDATE_READ_INTERVAL_MS = 30000;
|
|
15
|
+
export interface CliUpdateReaderDeps {
|
|
16
|
+
version: () => string;
|
|
17
|
+
readCache: () => UpdateCheckCache | null;
|
|
18
|
+
/** Fire-and-forget; self-throttles on the cache's own staleness rule. */
|
|
19
|
+
refresh: (version: string) => void;
|
|
20
|
+
now: () => number;
|
|
21
|
+
}
|
|
22
|
+
export declare const defaultCliUpdateReaderDeps: CliUpdateReaderDeps;
|
|
23
|
+
/**
|
|
24
|
+
* A memoised "is this CLI behind?", safe to call from a route handler on every poll.
|
|
25
|
+
*
|
|
26
|
+
* The refresh is triggered from here rather than on a timer of its own, because a `dev` session is
|
|
27
|
+
* exactly the case bin.ts's one-shot refresh does not cover: it checks once at startup and the
|
|
28
|
+
* process then runs for hours, so without this a session started before a release would never
|
|
29
|
+
* learn of it. `refreshUpdateCacheInBackground` already declines to do anything until its own
|
|
30
|
+
* interval has passed, so calling it here every thirty seconds costs a cache read, not a request.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createCliUpdateReader(deps?: CliUpdateReaderDeps): () => CliUpdateState | null;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a newer bitmagic CLI exists, for the `bitmagic dev` banner.
|
|
3
|
+
*
|
|
4
|
+
* The terminal already prints this at the top of every command (bin.ts), but `dev` is the one
|
|
5
|
+
* command that runs for hours: its nudge scrolls away behind the build log within seconds, and the
|
|
6
|
+
* creator spends the rest of the session looking at a browser tab instead. So the same fact is
|
|
7
|
+
* surfaced where they actually are.
|
|
8
|
+
*
|
|
9
|
+
* Nothing here goes to the network on the page's behalf. The answer comes from the cache that the
|
|
10
|
+
* ordinary startup check already maintains (`~/.bitmagic/update-check.json`), and the refresh is
|
|
11
|
+
* the same fire-and-forget one every command performs — which matters because `/api/state` is
|
|
12
|
+
* polled twice a second, and a check that cost a registry read would cost 7000 of them an hour.
|
|
13
|
+
*
|
|
14
|
+
* Structured rather than the prose notice: the shell page is assembled as a TypeScript template
|
|
15
|
+
* literal and may not contain a backtick, and the terminal's wording is full of them. Sending the
|
|
16
|
+
* two versions lets the page write its own sentence.
|
|
17
|
+
*/
|
|
18
|
+
import { currentCliVersion } from '../update/cli-version.js';
|
|
19
|
+
import { readUpdateCache, refreshUpdateCacheInBackground } from '../update/check.js';
|
|
20
|
+
import { updateTagFor } from '../update/notice.js';
|
|
21
|
+
import { isOlderSemverVersion } from '../project/version-compare.js';
|
|
22
|
+
/**
|
|
23
|
+
* How often the cache file is re-read.
|
|
24
|
+
*
|
|
25
|
+
* Not about the network — the refresh below has its own, much longer interval — but about not
|
|
26
|
+
* stat-ing and parsing a file 7200 times an hour to answer a question whose answer changes at most
|
|
27
|
+
* a few times a day.
|
|
28
|
+
*/
|
|
29
|
+
export const CLI_UPDATE_READ_INTERVAL_MS = 30_000;
|
|
30
|
+
export const defaultCliUpdateReaderDeps = {
|
|
31
|
+
version: currentCliVersion,
|
|
32
|
+
readCache: () => readUpdateCache(),
|
|
33
|
+
refresh: (version) => void refreshUpdateCacheInBackground(version),
|
|
34
|
+
now: Date.now,
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* A memoised "is this CLI behind?", safe to call from a route handler on every poll.
|
|
38
|
+
*
|
|
39
|
+
* The refresh is triggered from here rather than on a timer of its own, because a `dev` session is
|
|
40
|
+
* exactly the case bin.ts's one-shot refresh does not cover: it checks once at startup and the
|
|
41
|
+
* process then runs for hours, so without this a session started before a release would never
|
|
42
|
+
* learn of it. `refreshUpdateCacheInBackground` already declines to do anything until its own
|
|
43
|
+
* interval has passed, so calling it here every thirty seconds costs a cache read, not a request.
|
|
44
|
+
*/
|
|
45
|
+
export function createCliUpdateReader(deps = defaultCliUpdateReaderDeps) {
|
|
46
|
+
let memo = null;
|
|
47
|
+
let readAt = null;
|
|
48
|
+
return () => {
|
|
49
|
+
const now = deps.now();
|
|
50
|
+
if (readAt !== null && now - readAt < CLI_UPDATE_READ_INTERVAL_MS)
|
|
51
|
+
return memo;
|
|
52
|
+
readAt = now;
|
|
53
|
+
const version = deps.version();
|
|
54
|
+
deps.refresh(version);
|
|
55
|
+
const cache = deps.readCache();
|
|
56
|
+
// A cache about the OTHER line answers a different question — the same rule, and the same
|
|
57
|
+
// silence, as `pendingUpdateNotice`. A dev build must not be shown the release as "newer".
|
|
58
|
+
memo =
|
|
59
|
+
cache === null || cache.latest === null || cache.tag !== updateTagFor(version)
|
|
60
|
+
? null
|
|
61
|
+
: isOlderSemverVersion(version, cache.latest) === true
|
|
62
|
+
? { current: version, latest: cache.latest }
|
|
63
|
+
: null;
|
|
64
|
+
return memo;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=cli-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-update.js","sourceRoot":"","sources":["../../src/editor/cli-update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAyB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAQrE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAUlD,MAAM,CAAC,MAAM,0BAA0B,GAAwB;IAC7D,OAAO,EAAE,iBAAiB;IAC1B,SAAS,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE;IAClC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,8BAA8B,CAAC,OAAO,CAAC;IAClE,GAAG,EAAE,IAAI,CAAC,GAAG;CACd,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA4B,0BAA0B;IAEtD,IAAI,IAAI,GAA0B,IAAI,CAAC;IACvC,IAAI,MAAM,GAAkB,IAAI,CAAC;IAEjC,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,MAAM,KAAK,IAAI,IAAI,GAAG,GAAG,MAAM,GAAG,2BAA2B;YAAE,OAAO,IAAI,CAAC;QAC/E,MAAM,GAAG,GAAG,CAAC;QAEb,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,0FAA0F;QAC1F,2FAA2F;QAC3F,IAAI;YACF,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,OAAO,CAAC;gBAC5E,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI;oBACpD,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;oBAC5C,CAAC,CAAC,IAAI,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The published-game panel's CSS and markup, composed into `shell-page.ts`.
|
|
3
|
+
*
|
|
4
|
+
* Split out for the reason `asset-detail-panel.ts` was: that file is the busiest in the package and
|
|
5
|
+
* sits near the repo's 2000-line ceiling. Style and markup carry no closure state, so they can
|
|
6
|
+
* leave without threading anything across a boundary; the panel's behaviour stays inline there,
|
|
7
|
+
* because it needs the poll, `readPref`/`writePref` and the enclosing IIFE's element lookups.
|
|
8
|
+
*
|
|
9
|
+
* What this surface is for: `bitmagic dev` is the window a creator already has open, and until now
|
|
10
|
+
* it could not answer "where is this game?". The terminal that published knows, and it has usually
|
|
11
|
+
* scrolled away — or belongs to an agent the creator never sees. The QR is the second half of the
|
|
12
|
+
* same thought: the address is most useful on a phone, and a phone cannot copy from a terminal.
|
|
13
|
+
*
|
|
14
|
+
* Same template-literal rules as its host: **no backticks**, and a backslash in a regex has to be
|
|
15
|
+
* doubled to survive the literal. Every colour is a `--bm-*` token; `shell-page.test.ts` fails the
|
|
16
|
+
* build on a hex that is not black or white.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Styles for `#publish-overlay`, appended to the shell's stylesheet.
|
|
20
|
+
*
|
|
21
|
+
* The backdrop, the card and the pills come from `design.ts` (`.bm-overlay`, `.bm-dialog`,
|
|
22
|
+
* `.bm-pill`, `.bm-badge`); only this dialog's own layout lives here.
|
|
23
|
+
*/
|
|
24
|
+
export declare const PUBLISH_PANEL_CSS = "\n /* Level with #hq-overlay: the two are opened from different controls and never stack. */\n #publish-overlay { z-index: 10; }\n #publish-dialog { width: min(420px, 92vw); padding: 20px; text-align: center; }\n /* The address, styled like #hq-note's command line \u2014 the one thing on this card a creator may\n want to read character by character, and the one thing that has to wrap without pushing the\n card wider. */\n #publish-url { display: block; margin: 0 0 12px; color: var(--bm-aqua);\n font-family: var(--bm-font-mono); font-size: 12px; word-break: break-all;\n text-decoration: none; }\n #publish-url:hover { text-decoration: underline; }\n #publish-meta { display: flex; align-items: center; justify-content: center; gap: 8px;\n margin-bottom: 16px; font-size: 12px; color: var(--bm-text-muted); }\n /* White ground under the code, always: the PNG is dark-on-white and this surface is near-black,\n so without it the quiet zone would be the page and no scanner would find the edges. */\n #publish-qr { display: block; width: 240px; height: 240px; margin: 0 auto;\n background: #ffffff; border-radius: 6px; }\n #publish-hint { margin: 12px 0 0; font-size: 12px; color: var(--bm-text-muted); }\n #publish-actions { display: flex; justify-content: center; gap: 8px; margin-top: 16px; }\n /* An anchor wearing a pill needs the line-height a button gets for free. */\n #publish-manage { display: inline-flex; align-items: center; text-decoration: none; }\n";
|
|
25
|
+
/**
|
|
26
|
+
* Markup for the published-game dialog.
|
|
27
|
+
*
|
|
28
|
+
* Everything inside is empty until the poll fills it: the shell is rendered once when the server
|
|
29
|
+
* starts, and the publish it should show usually happens hours later in another terminal.
|
|
30
|
+
*/
|
|
31
|
+
export declare const PUBLISH_PANEL_HTML = " <div id=\"publish-overlay\" class=\"bm-overlay\">\n <div id=\"publish-dialog\" class=\"bm-dialog\">\n <h2>Your game is live</h2>\n <a id=\"publish-url\" target=\"_blank\" rel=\"noopener noreferrer\"></a>\n <div id=\"publish-meta\">\n <span id=\"publish-visibility\" class=\"bm-badge\"></span>\n <span id=\"publish-version\"></span>\n </div>\n <img id=\"publish-qr\" alt=\"QR code for this game's address\">\n <p id=\"publish-hint\">Scan it to play on your phone.</p>\n <div id=\"publish-actions\">\n <a id=\"publish-manage\" class=\"bm-pill bm-pill--ghost\" target=\"_blank\" rel=\"noopener noreferrer\">Manage</a>\n <button id=\"publish-close\" class=\"bm-pill bm-pill--primary\" type=\"button\">Close</button>\n </div>\n </div>\n </div>\n";
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The published-game panel's CSS and markup, composed into `shell-page.ts`.
|
|
3
|
+
*
|
|
4
|
+
* Split out for the reason `asset-detail-panel.ts` was: that file is the busiest in the package and
|
|
5
|
+
* sits near the repo's 2000-line ceiling. Style and markup carry no closure state, so they can
|
|
6
|
+
* leave without threading anything across a boundary; the panel's behaviour stays inline there,
|
|
7
|
+
* because it needs the poll, `readPref`/`writePref` and the enclosing IIFE's element lookups.
|
|
8
|
+
*
|
|
9
|
+
* What this surface is for: `bitmagic dev` is the window a creator already has open, and until now
|
|
10
|
+
* it could not answer "where is this game?". The terminal that published knows, and it has usually
|
|
11
|
+
* scrolled away — or belongs to an agent the creator never sees. The QR is the second half of the
|
|
12
|
+
* same thought: the address is most useful on a phone, and a phone cannot copy from a terminal.
|
|
13
|
+
*
|
|
14
|
+
* Same template-literal rules as its host: **no backticks**, and a backslash in a regex has to be
|
|
15
|
+
* doubled to survive the literal. Every colour is a `--bm-*` token; `shell-page.test.ts` fails the
|
|
16
|
+
* build on a hex that is not black or white.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Styles for `#publish-overlay`, appended to the shell's stylesheet.
|
|
20
|
+
*
|
|
21
|
+
* The backdrop, the card and the pills come from `design.ts` (`.bm-overlay`, `.bm-dialog`,
|
|
22
|
+
* `.bm-pill`, `.bm-badge`); only this dialog's own layout lives here.
|
|
23
|
+
*/
|
|
24
|
+
export const PUBLISH_PANEL_CSS = `
|
|
25
|
+
/* Level with #hq-overlay: the two are opened from different controls and never stack. */
|
|
26
|
+
#publish-overlay { z-index: 10; }
|
|
27
|
+
#publish-dialog { width: min(420px, 92vw); padding: 20px; text-align: center; }
|
|
28
|
+
/* The address, styled like #hq-note's command line — the one thing on this card a creator may
|
|
29
|
+
want to read character by character, and the one thing that has to wrap without pushing the
|
|
30
|
+
card wider. */
|
|
31
|
+
#publish-url { display: block; margin: 0 0 12px; color: var(--bm-aqua);
|
|
32
|
+
font-family: var(--bm-font-mono); font-size: 12px; word-break: break-all;
|
|
33
|
+
text-decoration: none; }
|
|
34
|
+
#publish-url:hover { text-decoration: underline; }
|
|
35
|
+
#publish-meta { display: flex; align-items: center; justify-content: center; gap: 8px;
|
|
36
|
+
margin-bottom: 16px; font-size: 12px; color: var(--bm-text-muted); }
|
|
37
|
+
/* White ground under the code, always: the PNG is dark-on-white and this surface is near-black,
|
|
38
|
+
so without it the quiet zone would be the page and no scanner would find the edges. */
|
|
39
|
+
#publish-qr { display: block; width: 240px; height: 240px; margin: 0 auto;
|
|
40
|
+
background: #ffffff; border-radius: 6px; }
|
|
41
|
+
#publish-hint { margin: 12px 0 0; font-size: 12px; color: var(--bm-text-muted); }
|
|
42
|
+
#publish-actions { display: flex; justify-content: center; gap: 8px; margin-top: 16px; }
|
|
43
|
+
/* An anchor wearing a pill needs the line-height a button gets for free. */
|
|
44
|
+
#publish-manage { display: inline-flex; align-items: center; text-decoration: none; }
|
|
45
|
+
`;
|
|
46
|
+
/**
|
|
47
|
+
* Markup for the published-game dialog.
|
|
48
|
+
*
|
|
49
|
+
* Everything inside is empty until the poll fills it: the shell is rendered once when the server
|
|
50
|
+
* starts, and the publish it should show usually happens hours later in another terminal.
|
|
51
|
+
*/
|
|
52
|
+
export const PUBLISH_PANEL_HTML = ` <div id="publish-overlay" class="bm-overlay">
|
|
53
|
+
<div id="publish-dialog" class="bm-dialog">
|
|
54
|
+
<h2>Your game is live</h2>
|
|
55
|
+
<a id="publish-url" target="_blank" rel="noopener noreferrer"></a>
|
|
56
|
+
<div id="publish-meta">
|
|
57
|
+
<span id="publish-visibility" class="bm-badge"></span>
|
|
58
|
+
<span id="publish-version"></span>
|
|
59
|
+
</div>
|
|
60
|
+
<img id="publish-qr" alt="QR code for this game's address">
|
|
61
|
+
<p id="publish-hint">Scan it to play on your phone.</p>
|
|
62
|
+
<div id="publish-actions">
|
|
63
|
+
<a id="publish-manage" class="bm-pill bm-pill--ghost" target="_blank" rel="noopener noreferrer">Manage</a>
|
|
64
|
+
<button id="publish-close" class="bm-pill bm-pill--primary" type="button">Close</button>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
`;
|
|
69
|
+
//# sourceMappingURL=publish-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-panel.js","sourceRoot":"","sources":["../../src/editor/publish-panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBhC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;CAgBjC,CAAC"}
|
package/dist/editor/server.js
CHANGED
|
@@ -22,7 +22,11 @@ import { applyModificationsToWorld } from '../forge/apply-modifications.js';
|
|
|
22
22
|
import { readProjectGameData } from '../forge/browser-host.js';
|
|
23
23
|
import { projectWorldJsonPath } from '../forge/run-pipeline.js';
|
|
24
24
|
import { renderEditorShell } from './shell-page.js';
|
|
25
|
+
import { createCliUpdateReader } from './cli-update.js';
|
|
25
26
|
import { renderAssetPreviewPage } from './asset-preview-page.js';
|
|
27
|
+
import { readPublishRecord } from '../publish/record.js';
|
|
28
|
+
import { encodeQr } from '../render/qr.js';
|
|
29
|
+
import { encodeQrPng } from '../render/qr-png.js';
|
|
26
30
|
import { buildSceneModifications } from './save.js';
|
|
27
31
|
import { buildVoxelSaveModifications } from './voxel-save.js';
|
|
28
32
|
import { asHostJournalEvent, deriveSceneEvents, EditorJournal } from './journal.js';
|
|
@@ -179,6 +183,10 @@ export async function startEditorServer(options) {
|
|
|
179
183
|
const worldPath = projectWorldJsonPath(options.root);
|
|
180
184
|
const shell = renderEditorShell({ gamePort: options.gamePort, gameId: options.gameId });
|
|
181
185
|
const journal = new EditorJournal({ root: options.root, log });
|
|
186
|
+
// `dev` is the one command that runs for hours, so the terminal's startup nudge about a newer
|
|
187
|
+
// CLI has long scrolled away by the time it matters. Memoised, because /api/state is polled
|
|
188
|
+
// twice a second (see editor/cli-update.ts).
|
|
189
|
+
const readCliUpdate = createCliUpdateReader();
|
|
182
190
|
/** The mtime our own last write produced. Anything else is an external edit. */
|
|
183
191
|
let lastWrittenMtimeMs = worldMtimeMs(worldPath);
|
|
184
192
|
/**
|
|
@@ -785,9 +793,39 @@ export async function startEditorServer(options) {
|
|
|
785
793
|
sendJson(res, 200, {
|
|
786
794
|
worldMtimeMs: worldMtimeMs(worldPath),
|
|
787
795
|
lastWrittenMtimeMs,
|
|
796
|
+
// Null when this CLI is current, on the other line, or has never managed a check.
|
|
797
|
+
cliUpdate: readCliUpdate(),
|
|
798
|
+
// Read every poll rather than captured at startup: `bitmagic dev` is the command that
|
|
799
|
+
// runs for hours, and the publish it should show usually happens in ANOTHER terminal
|
|
800
|
+
// while this one is still up. Null until the project has been published once.
|
|
801
|
+
publish: readPublishRecord(options.root),
|
|
788
802
|
});
|
|
789
803
|
return;
|
|
790
804
|
}
|
|
805
|
+
/**
|
|
806
|
+
* The last publish's URL as a QR code, so the creator can put the game on a phone from the
|
|
807
|
+
* window they already have open.
|
|
808
|
+
*
|
|
809
|
+
* Encoded on demand from the record rather than served from `.bitmagic/publish-qr.png`: that
|
|
810
|
+
* file is written only when the publishing terminal could not draw the code itself, so a
|
|
811
|
+
* creator who published interactively has no such file and would get a broken image here.
|
|
812
|
+
* The encode is cheap enough not to be worth a cache.
|
|
813
|
+
*/
|
|
814
|
+
if (req.method === 'GET' && url === '/api/publish/qr.png') {
|
|
815
|
+
const record = readPublishRecord(options.root);
|
|
816
|
+
const matrix = record === null ? null : encodeQr(record.url);
|
|
817
|
+
if (matrix === null) {
|
|
818
|
+
sendJson(res, 404, { ok: false, error: 'This project has not been published yet.' });
|
|
819
|
+
return;
|
|
820
|
+
}
|
|
821
|
+
// No caching: publishing again keeps the same URL for an alias publish but not for a
|
|
822
|
+
// versioned one, and a stale code would send a phone to the previous build.
|
|
823
|
+
res.writeHead(200, {
|
|
824
|
+
'Content-Type': 'image/png',
|
|
825
|
+
'Cache-Control': 'no-store',
|
|
826
|
+
}).end(encodeQrPng(matrix));
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
791
829
|
if (req.method === 'POST' && url === '/api/scene/save') {
|
|
792
830
|
await handleSave(req, res);
|
|
793
831
|
return;
|