dsh-plugin-upgrader 1.3.0 → 1.4.1
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 +52 -0
- package/lib/client.js +11 -2
- package/lib/host/install.d.ts +0 -9
- package/lib/host/install.d.ts.map +1 -1
- package/lib/host/install.js +37 -5
- package/lib/host/install.js.map +1 -1
- package/lib/host/lock.d.ts +68 -0
- package/lib/host/lock.d.ts.map +1 -0
- package/lib/host/lock.js +127 -0
- package/lib/host/lock.js.map +1 -0
- package/lib/host/manifest.d.ts +93 -1
- package/lib/host/manifest.d.ts.map +1 -1
- package/lib/host/manifest.js +223 -13
- package/lib/host/manifest.js.map +1 -1
- package/lib/host/progress.d.ts +1 -1
- package/lib/host/progress.d.ts.map +1 -1
- package/lib/host/progress.js +15 -0
- package/lib/host/progress.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +50 -0
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.4.1 — 2026-10-28
|
|
4
|
+
|
|
5
|
+
- **The 1.4.0 repairs now actually run inside the desktop app.** Every profile
|
|
6
|
+
path this plugin resolves went through `DSH_PROFILE_DIR` / `DSH_HOME` +
|
|
7
|
+
`DSH_PROFILE`, but the desktop shell spawns the plugin host with the profile
|
|
8
|
+
directory as the working directory and neither variable in the environment —
|
|
9
|
+
so inside the real app both lookups missed and the host half of 1.4.0 (journal
|
|
10
|
+
recovery, the writer-lock explanation, the install progress) was silently
|
|
11
|
+
inert. The resolution now falls back to the working directory when its
|
|
12
|
+
`package.json` parses and carries the `dsh.profile` key, so a random cwd is
|
|
13
|
+
never mistaken for a profile.
|
|
14
|
+
|
|
15
|
+
## 1.4.0 — 2026-10-28
|
|
16
|
+
|
|
17
|
+
- **A failed upgrade can no longer leave the profile missing a dependency.** An
|
|
18
|
+
in-place version replacement works by deleting the package's entry from
|
|
19
|
+
`profile/package.json` so the manager's `already-installed` guard stops firing,
|
|
20
|
+
then letting pnpm write the new version back. If the process dies inside that
|
|
21
|
+
window — a restart, a crash, a killed pnpm — nothing on disk remembered the
|
|
22
|
+
entry, and the package stayed on disk while being invisible to the manager.
|
|
23
|
+
That is how a theme update removed the theme: the entry never came back, and
|
|
24
|
+
the next `pnpm install` moved the orphan directory to `node_modules/.ignored`,
|
|
25
|
+
after which the plugin could not be upgraded, removed, or even seen again
|
|
26
|
+
without editing JSON by hand.
|
|
27
|
+
|
|
28
|
+
The intent is now written to `package.json.upgrader-journal.json` *before* the
|
|
29
|
+
entry leaves the manifest, and every load of this plugin repairs a record it
|
|
30
|
+
finds: an entry still missing is put back at the range it carried, and one that
|
|
31
|
+
pnpm did write is settled and the record cleared. Recovery is best-effort and
|
|
32
|
+
never a precondition — a profile that cannot be repaired still loads the tab,
|
|
33
|
+
which is the only way to fix it.
|
|
34
|
+
|
|
35
|
+
- **The panel now says what pnpm is doing, instead of showing one frozen label.**
|
|
36
|
+
A lockfile verification is the longest phase on a cold profile and the least
|
|
37
|
+
self-explanatory: it prints one line and then nothing for minutes while the tab
|
|
38
|
+
sat on `准备中`. That phase is now named (`正在校验依赖锁文件`), and the newest
|
|
39
|
+
line pnpm printed is shown live beside it — a registry timeout and a download
|
|
40
|
+
both used to read as "installing", and only one of them means keep waiting. The
|
|
41
|
+
staleness detector counts that line too, so a step that keeps printing no longer
|
|
42
|
+
reports itself as stale.
|
|
43
|
+
|
|
44
|
+
- **A writer-lock timeout now explains itself.** The harness serializes writers of
|
|
45
|
+
`profile/package.json` through a `package.json.lock` sibling, and the shared
|
|
46
|
+
`atomic-write` helper gives a caller that states no budget two seconds. When an
|
|
47
|
+
upgrade ran long enough for another writer to hold that lock, the tab reported
|
|
48
|
+
`atomic-write: timed out waiting for the writer lock at …/package.json.lock` —
|
|
49
|
+
which names a file and a pid that nobody watching the tab can act on. The
|
|
50
|
+
message is now preceded by what it means and what to do: another operation is
|
|
51
|
+
rewriting the manifest (wait it out), or the lock was never released by an
|
|
52
|
+
upgrade that was killed (restarting DSH clears it). The original sentence is
|
|
53
|
+
kept in brackets, because it is the string to search for in a log.
|
|
54
|
+
|
|
3
55
|
## 1.3.0 — 2026-10-27
|
|
4
56
|
|
|
5
57
|
- **A batch upgrade no longer greets the next start with a startup-error dialog.**
|
package/lib/client.js
CHANGED
|
@@ -95,6 +95,7 @@ window.__ModuleLoader__.load({
|
|
|
95
95
|
phaseApplying: "\u6B63\u5728\u5199\u5165\u914D\u7F6E",
|
|
96
96
|
phaseCancelling: "\u6B63\u5728\u53D6\u6D88",
|
|
97
97
|
phaseWaiting: "\u51C6\u5907\u4E2D",
|
|
98
|
+
phaseVerifying: "\u6B63\u5728\u6821\u9A8C\u4F9D\u8D56\u9501\u6587\u4EF6",
|
|
98
99
|
registryAttempt: (index, total) => `\u6CE8\u518C\u8868 ${index}/${total}\uFF0C\u4E0A\u4E00\u4E2A\u8D85\u65F6\u4F1A\u81EA\u52A8\u6362\u6E90`,
|
|
99
100
|
slowHint: "\u9996\u6B21\u5B89\u88C5\u6216\u9700\u8981\u6821\u9A8C\u4F9D\u8D56\u65F6\u4F1A\u6BD4\u8F83\u6162\uFF0C\u65E5\u5FD7\u91CC\u80FD\u770B\u5230\u771F\u5B9E\u8FDB\u5EA6\u3002",
|
|
100
101
|
cancelRequested: "\u5DF2\u8BF7\u6C42\u53D6\u6D88",
|
|
@@ -178,6 +179,7 @@ window.__ModuleLoader__.load({
|
|
|
178
179
|
phaseApplying: "Writing the profile",
|
|
179
180
|
phaseCancelling: "Cancelling",
|
|
180
181
|
phaseWaiting: "Preparing",
|
|
182
|
+
phaseVerifying: "Verifying the dependency lockfile",
|
|
181
183
|
registryAttempt: (index, total) => `Registry ${index}/${total}; a timeout falls back to the next`,
|
|
182
184
|
slowHint: "A first install, or one that must verify dependencies, takes a while \u2014 the log shows what is happening.",
|
|
183
185
|
cancelRequested: "Cancellation requested",
|
|
@@ -536,6 +538,7 @@ window.__ModuleLoader__.load({
|
|
|
536
538
|
.dsh-pu-bar-inner.is-busy { width: 40%; transition: none; animation: dsh-pu-indeterminate 1.4s ease-in-out infinite; }
|
|
537
539
|
@keyframes dsh-pu-indeterminate { 0% { transform: translateX(-100%); } 100% { transform: translateX(250%); } }
|
|
538
540
|
.dsh-pu-hint { font-size: 11px; color: var(--dsw-alias-label-tertiary); }
|
|
541
|
+
.dsh-pu-activity { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 10.5px; line-height: 1.5; color: var(--dsw-alias-label-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
539
542
|
.dsh-pu-log { max-height: 160px; overflow: auto; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 10.5px; line-height: 1.55; color: var(--dsw-alias-label-secondary); white-space: pre-wrap; word-break: break-word; border-top: 1px dashed var(--dsw-alias-border-l1); padding-top: 8px; margin: 0; }
|
|
540
543
|
.dsh-pu-banner { display: flex; align-items: center; gap: 8px; font-size: 11.5px; padding: 7px 10px; border-radius: 8px; border: 1px solid var(--dsw-alias-border-l1); background: var(--dsw-alias-bg-layer-2); color: var(--dsw-alias-label-secondary); }
|
|
541
544
|
.dsh-pu-banner.is-warn { border-color: var(--dsw-alias-state-warn-primary); color: var(--dsw-alias-state-warn-primary); }
|
|
@@ -572,12 +575,12 @@ window.__ModuleLoader__.load({
|
|
|
572
575
|
const failed = job.failed ?? 0;
|
|
573
576
|
const inStep = running && job.current !== void 0;
|
|
574
577
|
const now = useNow(inStep, job.stepStartedAt);
|
|
575
|
-
const stamp = `${job.id}|${job.stepStartedAt ?? ""}|${job.done ?? 0}|${job.status}`;
|
|
578
|
+
const stamp = `${job.id}|${job.stepStartedAt ?? ""}|${job.done ?? 0}|${job.status}|${job.activity ?? ""}`;
|
|
576
579
|
const lastChange = React.useRef({ stamp, at: Date.now() });
|
|
577
580
|
if (lastChange.current.stamp !== stamp) lastChange.current = { stamp, at: Date.now() };
|
|
578
581
|
const stale = inStep && Date.now() - lastChange.current.at > STALE_SNAPSHOT_MS;
|
|
579
582
|
const stepMs = job.stepStartedAt === void 0 ? 0 : Math.max(0, now - job.stepStartedAt);
|
|
580
|
-
const phaseKey = job.phase === "installing" ? "phaseInstalling" : job.phase === "applying" ? "phaseApplying" : job.phase === "cancelling" ? "phaseCancelling" : "phaseWaiting";
|
|
583
|
+
const phaseKey = job.phase === "installing" ? "phaseInstalling" : job.phase === "applying" ? "phaseApplying" : job.phase === "cancelling" ? "phaseCancelling" : job.phase === "verifying" ? "phaseVerifying" : "phaseWaiting";
|
|
581
584
|
const phaseText = job.attempt !== void 0 && job.attempt.total > 1 ? t("registryAttempt", job.attempt.index, job.attempt.total) : t(phaseKey);
|
|
582
585
|
const headline = running ? t("progress", done, total) : job.status === "cancelled" ? t("jobCancelled") : t("jobDone");
|
|
583
586
|
return h(
|
|
@@ -619,6 +622,12 @@ window.__ModuleLoader__.load({
|
|
|
619
622
|
{ className: "dsh-pu-bar" },
|
|
620
623
|
inStep ? h("div", { className: "dsh-pu-bar-inner is-busy" }) : h("div", { className: "dsh-pu-bar-inner", style: { width: `${percent}%` } })
|
|
621
624
|
),
|
|
625
|
+
/*
|
|
626
|
+
* The live line pnpm last printed. A phase name says which category of wait
|
|
627
|
+
* this is; this says whether anything is actually happening — a registry
|
|
628
|
+
* timeout and a download both read as "installing" otherwise.
|
|
629
|
+
*/
|
|
630
|
+
inStep && job.activity !== void 0 ? h("div", { className: "dsh-pu-activity", title: job.activity }, job.activity) : null,
|
|
622
631
|
inStep ? h("div", { className: "dsh-pu-hint" }, t("slowHint")) : null,
|
|
623
632
|
showLog && Array.isArray(job.log) ? h("pre", { className: "dsh-pu-log" }, job.log.join("\n")) : null
|
|
624
633
|
);
|
package/lib/host/install.d.ts
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Installing one version, and putting the plugin's state back afterwards.
|
|
3
|
-
*
|
|
4
|
-
* `installBundle` refuses a spec that names an already-installed dependency, so
|
|
5
|
-
* replacing a version means removing first. These helpers wrap that two-step in
|
|
6
|
-
* one call and undo the side effects a reinstall has on the enabled flag.
|
|
7
|
-
*
|
|
8
|
-
* @module dsh-plugin-upgrader/lib/install
|
|
9
|
-
*/
|
|
10
1
|
import type { ChangeResult, PluginManager, StepRecord } from './manager.ts';
|
|
11
2
|
/** Progress sink for one job. */
|
|
12
3
|
export type LogSink = (message: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/host/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/host/install.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAc,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGvF,iCAAiC;AACjC,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAE/C;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;AAEvD,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;IACzC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACvC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,aAAa,CAAC,EAAE;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,gCAAgC;AAChC,eAAO,MAAM,OAAO,aAAyC,CAAA;AA2L7D;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAuB9B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAsGD;;;;;;;;;;;;GAYG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,OAAO,EACZ,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,WAAW,CAAC,CAuItB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAM9D"}
|
package/lib/host/install.js
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Installing one version, and putting the plugin's state back afterwards.
|
|
3
|
+
*
|
|
4
|
+
* `installBundle` refuses a spec that names an already-installed dependency, so
|
|
5
|
+
* replacing a version means removing first. These helpers wrap that two-step in
|
|
6
|
+
* one call and undo the side effects a reinstall has on the enabled flag.
|
|
7
|
+
*
|
|
8
|
+
* @module dsh-plugin-upgrader/lib/install
|
|
9
|
+
*/
|
|
10
|
+
import { explainLockTimeout } from './lock.js';
|
|
11
|
+
import { confirmDependency, dropDependency, profileDirFrom, restoreDependency } from './manifest.js';
|
|
2
12
|
/** Allowed per-step actions. */
|
|
3
13
|
export const ACTIONS = new Set(['upgrade', 'switch']);
|
|
4
14
|
/** The manager's code for "a live loader fiber still owns this bundle". */
|
|
@@ -20,6 +30,19 @@ function codeOf(failure) {
|
|
|
20
30
|
return record.code;
|
|
21
31
|
return typeof record.error?.code === 'string' ? record.error.code : undefined;
|
|
22
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* A failure message with the writer-lock timeout spelled out.
|
|
35
|
+
*
|
|
36
|
+
* The manager composes that sentence inside `atomic-write`, so it cannot be
|
|
37
|
+
* improved at its source; this is the last place that still knows which profile
|
|
38
|
+
* the lock belongs to. Every other message comes back untouched.
|
|
39
|
+
*
|
|
40
|
+
* @param message - the failure message.
|
|
41
|
+
* @returns a message to show the operator.
|
|
42
|
+
*/
|
|
43
|
+
function describeFailure(message) {
|
|
44
|
+
return explainLockTimeout(message, profileDirFrom());
|
|
45
|
+
}
|
|
23
46
|
/**
|
|
24
47
|
* What the operator can do about a bundle the loader will not release.
|
|
25
48
|
*
|
|
@@ -293,7 +316,7 @@ async function replaceWithoutRemoval(manager, step, options, log, announce) {
|
|
|
293
316
|
}
|
|
294
317
|
catch (error) {
|
|
295
318
|
restoreDependency(dir, step.name, dropped.dependency);
|
|
296
|
-
log(` ! in-place install failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
319
|
+
log(` ! in-place install failed: ${describeFailure(error instanceof Error ? error.message : String(error))}`);
|
|
297
320
|
return undefined;
|
|
298
321
|
}
|
|
299
322
|
const installed = result?.application === 'applied' || result?.application === 'restart-required';
|
|
@@ -308,6 +331,15 @@ async function replaceWithoutRemoval(manager, step, options, log, announce) {
|
|
|
308
331
|
return undefined;
|
|
309
332
|
}
|
|
310
333
|
const enabled = await restoreEnabledState(manager, step, options.enabled, log);
|
|
334
|
+
/*
|
|
335
|
+
* The manifest is what the journal guards, so the journal is only settled by
|
|
336
|
+
* what the manifest now says — not by the manager's answer. A success that
|
|
337
|
+
* left no entry is exactly the crash state this record exists to repair, and
|
|
338
|
+
* dropping it there would make the loss permanent.
|
|
339
|
+
*/
|
|
340
|
+
if (!confirmDependency(dir, step.name)) {
|
|
341
|
+
log(` ! ${step.name} is installed but not recorded in the profile manifest; the next start restores it`);
|
|
342
|
+
}
|
|
311
343
|
return {
|
|
312
344
|
name: step.name,
|
|
313
345
|
version: result.version ?? step.version,
|
|
@@ -360,7 +392,7 @@ export async function runStep(manager, step, log, announce) {
|
|
|
360
392
|
...base,
|
|
361
393
|
ok: false,
|
|
362
394
|
stage: 'install',
|
|
363
|
-
message: error instanceof Error ? error.message : String(error),
|
|
395
|
+
message: describeFailure(error instanceof Error ? error.message : String(error)),
|
|
364
396
|
};
|
|
365
397
|
}
|
|
366
398
|
if (result?.error?.code === 'already-installed') {
|
|
@@ -392,7 +424,7 @@ export async function runStep(manager, step, log, announce) {
|
|
|
392
424
|
ok: false,
|
|
393
425
|
stage: 'remove',
|
|
394
426
|
application: 'failed',
|
|
395
|
-
message: code ?? `removal failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
427
|
+
message: code ?? `removal failed: ${describeFailure(error instanceof Error ? error.message : String(error))}`,
|
|
396
428
|
...(typeof diagnostic === 'string' ? { detail: diagnostic } : {}),
|
|
397
429
|
};
|
|
398
430
|
}
|
|
@@ -427,7 +459,7 @@ export async function runStep(manager, step, log, announce) {
|
|
|
427
459
|
ok: false,
|
|
428
460
|
stage: 'install',
|
|
429
461
|
application: 'failed',
|
|
430
|
-
message: `install after removal failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
462
|
+
message: `install after removal failed: ${describeFailure(error instanceof Error ? error.message : String(error))}`,
|
|
431
463
|
};
|
|
432
464
|
}
|
|
433
465
|
}
|
package/lib/host/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/host/install.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/host/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** The lock file's name, as `atomic-write` derives it. */
|
|
2
|
+
export declare const LOCK_FILE = "package.json.lock";
|
|
3
|
+
/** What the lock says about its holder. */
|
|
4
|
+
export interface WriterLock {
|
|
5
|
+
/** The pid the holder recorded, when the record is readable. */
|
|
6
|
+
pid?: number;
|
|
7
|
+
/** Whether a process with that pid is running right now. */
|
|
8
|
+
alive: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** Whether a pid names a live process. Never throws. */
|
|
11
|
+
export type LivenessProbe = (pid: number) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Whether a pid is running, by the same signal-probe `atomic-write` uses.
|
|
14
|
+
*
|
|
15
|
+
* @param pid - the process id to probe.
|
|
16
|
+
* @returns true when the process exists and this account may signal it.
|
|
17
|
+
*/
|
|
18
|
+
export declare function pidIsAlive(pid: number): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Read the profile's writer lock.
|
|
21
|
+
*
|
|
22
|
+
* A lock whose pid cannot be read is reported as alive: the file exists, so
|
|
23
|
+
* somebody created it, and treating an unreadable record as free would defeat
|
|
24
|
+
* the lock it represents.
|
|
25
|
+
*
|
|
26
|
+
* @param dir - the profile directory.
|
|
27
|
+
* @param alive - liveness probe, injectable for tests.
|
|
28
|
+
* @returns the record, or `undefined` when nothing holds the lock.
|
|
29
|
+
*/
|
|
30
|
+
export declare function readWriterLock(dir: string, alive?: LivenessProbe): WriterLock | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Whether a failure message is the writer-lock timeout.
|
|
33
|
+
*
|
|
34
|
+
* Matched on the `atomic-write` prefix and the sentence rather than on the path:
|
|
35
|
+
* the message is assembled by another package, and the path is the one part of
|
|
36
|
+
* it that varies per profile.
|
|
37
|
+
*
|
|
38
|
+
* @param message - a failure message, or anything that might be one.
|
|
39
|
+
* @returns whether this is the lock timeout.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isWriterLockTimeout(message: unknown): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* What the operator can do about a held lock, in both languages.
|
|
44
|
+
*
|
|
45
|
+
* Both travel together for the same reason `restartHint` does: the job log is one
|
|
46
|
+
* stream shown to readers of either language, and the panel cannot translate a
|
|
47
|
+
* sentence the host composed.
|
|
48
|
+
*
|
|
49
|
+
* @param lock - what the lock said, when it was read.
|
|
50
|
+
* @returns one bilingual sentence.
|
|
51
|
+
*/
|
|
52
|
+
export declare function describeWriterLock(lock: WriterLock | undefined): string;
|
|
53
|
+
/**
|
|
54
|
+
* Turn a writer-lock timeout into something the operator can act on.
|
|
55
|
+
*
|
|
56
|
+
* The original sentence is kept in brackets rather than dropped: it names the
|
|
57
|
+
* file and comes from the package that raised it, so it is the string to search
|
|
58
|
+
* for in a log or a bug report. What it cannot say is whose fault it is or what
|
|
59
|
+
* to do, which is what the leading sentence is for.
|
|
60
|
+
*
|
|
61
|
+
* Any other message is returned untouched.
|
|
62
|
+
*
|
|
63
|
+
* @param message - the failure message.
|
|
64
|
+
* @param dir - the profile directory, used to read the lock's current state.
|
|
65
|
+
* @returns a message to show, or the original when this is not a lock timeout.
|
|
66
|
+
*/
|
|
67
|
+
export declare function explainLockTimeout(message: string, dir: string | undefined): string;
|
|
68
|
+
//# sourceMappingURL=lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/host/lock.ts"],"names":[],"mappings":"AA8BA,0DAA0D;AAC1D,eAAO,MAAM,SAAS,sBAA0B,CAAA;AAEhD,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,KAAK,EAAE,OAAO,CAAA;CACf;AAED,wDAAwD;AACxD,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;AAEpD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAS/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,aAA0B,GAChC,UAAU,GAAG,SAAS,CAWxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CASvE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAInF"}
|
package/lib/host/lock.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reading the profile's writer lock, and explaining a timeout on it.
|
|
3
|
+
*
|
|
4
|
+
* The harness serializes writers of `profile/package.json` through a `wx`-created
|
|
5
|
+
* sibling, `package.json.lock`, that records the holder's pid. The manager takes
|
|
6
|
+
* that lock with a two-minute budget; the shared `atomic-write` default for a
|
|
7
|
+
* caller that states none is two seconds. Both have been observed as the last
|
|
8
|
+
* thing an upgrade said before it failed, and the message names a file and a pid
|
|
9
|
+
* nobody watching the tab can act on:
|
|
10
|
+
*
|
|
11
|
+
* atomic-write: timed out waiting for the writer lock at …/package.json.lock
|
|
12
|
+
*
|
|
13
|
+
* Two things are worth doing with that. Before touching the manifest, look at
|
|
14
|
+
* the lock: an entry cannot be dropped while somebody else is rewriting the file,
|
|
15
|
+
* and finding that out first is the difference between a refusal and a profile
|
|
16
|
+
* left without its dependency. And when the manager's own run does time out,
|
|
17
|
+
* say what it means instead of relaying the internal sentence.
|
|
18
|
+
*
|
|
19
|
+
* `atomic-write` never takes over a lock whose recorded pid is its own
|
|
20
|
+
* (`holderExited` returns false for `process.pid`), so a nested acquisition
|
|
21
|
+
* cannot succeed by waiting: it always ends in exactly this timeout. That is the
|
|
22
|
+
* most likely way a step ends up holding a lock it can never get.
|
|
23
|
+
*
|
|
24
|
+
* @module dsh-plugin-upgrader/lib/lock
|
|
25
|
+
*/
|
|
26
|
+
import { readFileSync } from 'node:fs';
|
|
27
|
+
import { join } from 'node:path';
|
|
28
|
+
import { MANIFEST_FILE } from './manifest.js';
|
|
29
|
+
/** The lock file's name, as `atomic-write` derives it. */
|
|
30
|
+
export const LOCK_FILE = `${MANIFEST_FILE}.lock`;
|
|
31
|
+
/**
|
|
32
|
+
* Whether a pid is running, by the same signal-probe `atomic-write` uses.
|
|
33
|
+
*
|
|
34
|
+
* @param pid - the process id to probe.
|
|
35
|
+
* @returns true when the process exists and this account may signal it.
|
|
36
|
+
*/
|
|
37
|
+
export function pidIsAlive(pid) {
|
|
38
|
+
if (!Number.isInteger(pid) || pid <= 0 || pid > 2147483647)
|
|
39
|
+
return false;
|
|
40
|
+
try {
|
|
41
|
+
process.kill(pid, 0);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
// EPERM means the process exists under another account: still a holder.
|
|
46
|
+
return error?.code !== 'ESRCH';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Read the profile's writer lock.
|
|
51
|
+
*
|
|
52
|
+
* A lock whose pid cannot be read is reported as alive: the file exists, so
|
|
53
|
+
* somebody created it, and treating an unreadable record as free would defeat
|
|
54
|
+
* the lock it represents.
|
|
55
|
+
*
|
|
56
|
+
* @param dir - the profile directory.
|
|
57
|
+
* @param alive - liveness probe, injectable for tests.
|
|
58
|
+
* @returns the record, or `undefined` when nothing holds the lock.
|
|
59
|
+
*/
|
|
60
|
+
export function readWriterLock(dir, alive = pidIsAlive) {
|
|
61
|
+
let raw;
|
|
62
|
+
try {
|
|
63
|
+
raw = readFileSync(join(dir, LOCK_FILE), 'utf8');
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
const match = /^(\d+)\s*$/u.exec(raw.trim());
|
|
69
|
+
if (match === null)
|
|
70
|
+
return { alive: true };
|
|
71
|
+
const pid = Number(match[1]);
|
|
72
|
+
return { pid, alive: alive(pid) };
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Whether a failure message is the writer-lock timeout.
|
|
76
|
+
*
|
|
77
|
+
* Matched on the `atomic-write` prefix and the sentence rather than on the path:
|
|
78
|
+
* the message is assembled by another package, and the path is the one part of
|
|
79
|
+
* it that varies per profile.
|
|
80
|
+
*
|
|
81
|
+
* @param message - a failure message, or anything that might be one.
|
|
82
|
+
* @returns whether this is the lock timeout.
|
|
83
|
+
*/
|
|
84
|
+
export function isWriterLockTimeout(message) {
|
|
85
|
+
return typeof message === 'string' && /atomic-write: timed out waiting for the writer lock/u.test(message);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* What the operator can do about a held lock, in both languages.
|
|
89
|
+
*
|
|
90
|
+
* Both travel together for the same reason `restartHint` does: the job log is one
|
|
91
|
+
* stream shown to readers of either language, and the panel cannot translate a
|
|
92
|
+
* sentence the host composed.
|
|
93
|
+
*
|
|
94
|
+
* @param lock - what the lock said, when it was read.
|
|
95
|
+
* @returns one bilingual sentence.
|
|
96
|
+
*/
|
|
97
|
+
export function describeWriterLock(lock) {
|
|
98
|
+
if (lock !== undefined && lock.alive) {
|
|
99
|
+
const zh = '另一个操作正在改写 profile 的 package.json(写入锁仍被占用);等它结束再试';
|
|
100
|
+
const en = 'another operation is rewriting the profile manifest and still holds its writer lock; retry once it finishes';
|
|
101
|
+
return `${zh} / ${en}`;
|
|
102
|
+
}
|
|
103
|
+
const zh = 'profile 写入锁没有被释放,可能是上一次升级被强制结束时留下的;重启 DSH 后会自行恢复';
|
|
104
|
+
const en = 'the profile writer lock was never released, most likely left by an upgrade that was killed; restarting DSH clears it';
|
|
105
|
+
return `${zh} / ${en}`;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Turn a writer-lock timeout into something the operator can act on.
|
|
109
|
+
*
|
|
110
|
+
* The original sentence is kept in brackets rather than dropped: it names the
|
|
111
|
+
* file and comes from the package that raised it, so it is the string to search
|
|
112
|
+
* for in a log or a bug report. What it cannot say is whose fault it is or what
|
|
113
|
+
* to do, which is what the leading sentence is for.
|
|
114
|
+
*
|
|
115
|
+
* Any other message is returned untouched.
|
|
116
|
+
*
|
|
117
|
+
* @param message - the failure message.
|
|
118
|
+
* @param dir - the profile directory, used to read the lock's current state.
|
|
119
|
+
* @returns a message to show, or the original when this is not a lock timeout.
|
|
120
|
+
*/
|
|
121
|
+
export function explainLockTimeout(message, dir) {
|
|
122
|
+
if (!isWriterLockTimeout(message))
|
|
123
|
+
return message;
|
|
124
|
+
const lock = dir === undefined ? undefined : readWriterLock(dir);
|
|
125
|
+
return `${describeWriterLock(lock)} [${message}]`;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/host/lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,aAAa,OAAO,CAAA;AAahD;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,UAAU;QAAE,OAAO,KAAK,CAAA;IACxE,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,OAAQ,KAA4B,EAAE,IAAI,KAAK,OAAO,CAAA;IACxD,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,KAAK,GAAkB,UAAU;IAEjC,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;AACnC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,sDAAsD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC5G,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA4B;IAC7D,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,kDAAkD,CAAA;QAC7D,MAAM,EAAE,GAAG,6GAA6G,CAAA;QACxH,OAAO,GAAG,EAAE,MAAM,EAAE,EAAE,CAAA;IACxB,CAAC;IACD,MAAM,EAAE,GAAG,kDAAkD,CAAA;IAC7D,MAAM,EAAE,GAAG,sHAAsH,CAAA;IACjI,OAAO,GAAG,EAAE,MAAM,EAAE,EAAE,CAAA;AACxB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,GAAuB;IACzE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IACjD,MAAM,IAAI,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IAChE,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,CAAA;AACnD,CAAC"}
|
package/lib/host/manifest.d.ts
CHANGED
|
@@ -1,15 +1,43 @@
|
|
|
1
1
|
/** Where a profile keeps its manifest. */
|
|
2
2
|
export declare const MANIFEST_FILE = "package.json";
|
|
3
|
+
/**
|
|
4
|
+
* Where a pending drop is recorded, next to the manifest it belongs to.
|
|
5
|
+
*
|
|
6
|
+
* The drop has to survive a crash to be undoable. Writing the intent to disk
|
|
7
|
+
* before the entry disappears means the next process to load this plugin can
|
|
8
|
+
* put the entry back, instead of inheriting a profile that declares a package
|
|
9
|
+
* it no longer lists — which is how a failed upgrade lost a theme: pnpm spent
|
|
10
|
+
* two minutes verifying a lockfile, the app was restarted, and the dependency
|
|
11
|
+
* entry was never written back.
|
|
12
|
+
*/
|
|
13
|
+
export declare const JOURNAL_FILE = "package.json.upgrader-journal.json";
|
|
14
|
+
/** What a drop records, so a later process can undo it. */
|
|
15
|
+
export interface DropJournal {
|
|
16
|
+
/** The package whose entry was removed. */
|
|
17
|
+
name: string;
|
|
18
|
+
/** The range the entry carried, so it goes back byte for byte. */
|
|
19
|
+
spec: string;
|
|
20
|
+
/** When the drop happened; only ever used for diagnostics. */
|
|
21
|
+
at: number;
|
|
22
|
+
}
|
|
3
23
|
/**
|
|
4
24
|
* Resolve the profile directory the running host is managing.
|
|
5
25
|
*
|
|
6
26
|
* The harness exports this to every process it starts, so the value names the
|
|
7
27
|
* same profile the manager is working on rather than a guess from the disk.
|
|
8
28
|
*
|
|
29
|
+
* The desktop host is an exception: it spawns the plugin host with
|
|
30
|
+
* `cwd: this.projectDir` (the profile directory) and no `DSH_PROFILE*`
|
|
31
|
+
* variables in the child environment, so the env-only lookups both miss. In
|
|
32
|
+
* that case fall back to the working directory — but only when it really
|
|
33
|
+
* looks like a profile (its `package.json` parses and carries a `dsh.profile`
|
|
34
|
+
* object), so a random cwd can never be mistaken for one.
|
|
35
|
+
*
|
|
9
36
|
* @param env - the process environment.
|
|
37
|
+
* @param cwd - the working directory to fall back to (overridable in tests).
|
|
10
38
|
* @returns the absolute profile directory, or `undefined` when unknown.
|
|
11
39
|
*/
|
|
12
|
-
export declare function profileDirFrom(env?: NodeJS.ProcessEnv): string | undefined;
|
|
40
|
+
export declare function profileDirFrom(env?: NodeJS.ProcessEnv, cwd?: string): string | undefined;
|
|
13
41
|
/** What happened when the entry was dropped. */
|
|
14
42
|
export type DropResult = {
|
|
15
43
|
kind: 'dropped';
|
|
@@ -20,6 +48,70 @@ export type DropResult = {
|
|
|
20
48
|
kind: 'unavailable';
|
|
21
49
|
reason: string;
|
|
22
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Forget the pending drop.
|
|
53
|
+
*
|
|
54
|
+
* Called once the entry is back, or once pnpm has written a new version in its
|
|
55
|
+
* place — either way there is nothing left to undo.
|
|
56
|
+
*
|
|
57
|
+
* @param dir - the profile directory.
|
|
58
|
+
*/
|
|
59
|
+
export declare function clearJournal(dir: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* Read the pending drop, when one is recorded.
|
|
62
|
+
*
|
|
63
|
+
* @param dir - the profile directory.
|
|
64
|
+
* @returns the record, or `undefined` when there is none to read.
|
|
65
|
+
*/
|
|
66
|
+
export declare function readJournal(dir: string): DropJournal | undefined;
|
|
67
|
+
/** What a recovery pass did, for the caller to report. */
|
|
68
|
+
export type RecoveryResult = {
|
|
69
|
+
kind: 'none';
|
|
70
|
+
} | {
|
|
71
|
+
kind: 'restored';
|
|
72
|
+
name: string;
|
|
73
|
+
spec: string;
|
|
74
|
+
} | {
|
|
75
|
+
kind: 'settled';
|
|
76
|
+
name: string;
|
|
77
|
+
} | {
|
|
78
|
+
kind: 'failed';
|
|
79
|
+
name: string;
|
|
80
|
+
reason: string;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Undo a drop whose install never finished.
|
|
84
|
+
*
|
|
85
|
+
* This is the crash repair. A drop writes its intent to the journal before the
|
|
86
|
+
* entry leaves the manifest, so whichever process loads the plugin next can see
|
|
87
|
+
* that an entry is missing and put it back. Two outcomes are possible:
|
|
88
|
+
*
|
|
89
|
+
* - the entry is still absent, so pnpm never wrote the new version: restore it;
|
|
90
|
+
* - the entry is present, so the install landed and simply outlived the drop
|
|
91
|
+
* record: forget the record and leave the manifest alone.
|
|
92
|
+
*
|
|
93
|
+
* Doing this at load time rather than at next upgrade matters: a profile with a
|
|
94
|
+
* package on disk and no dependency entry is invisible to the manager, so the
|
|
95
|
+
* plugin cannot be upgraded, removed or seen again until somebody edits JSON by
|
|
96
|
+
* hand.
|
|
97
|
+
*
|
|
98
|
+
* @param dir - the profile directory.
|
|
99
|
+
* @returns what happened.
|
|
100
|
+
*/
|
|
101
|
+
export declare function recoverPendingDrop(dir: string): RecoveryResult;
|
|
102
|
+
/**
|
|
103
|
+
* Forget the pending drop once the entry is visibly back.
|
|
104
|
+
*
|
|
105
|
+
* Called after an install reported success. pnpm is what writes the new version
|
|
106
|
+
* into the manifest, so a success that left no entry means the write did not
|
|
107
|
+
* happen after all — and then the record is the only thing that can repair the
|
|
108
|
+
* profile, so it stays until it can actually be settled.
|
|
109
|
+
*
|
|
110
|
+
* @param dir - the profile directory.
|
|
111
|
+
* @param name - the package whose entry should be present.
|
|
112
|
+
* @returns whether the entry was there, and the record therefore cleared.
|
|
113
|
+
*/
|
|
114
|
+
export declare function confirmDependency(dir: string, name: string): boolean;
|
|
23
115
|
/**
|
|
24
116
|
* Remove one dependency entry, leaving everything else untouched.
|
|
25
117
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/host/manifest.ts"],"names":[],"mappings":"AA0BA,0CAA0C;AAC1C,eAAO,MAAM,aAAa,iBAAiB,CAAA;AAE3C
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/host/manifest.ts"],"names":[],"mappings":"AA0BA,0CAA0C;AAC1C,eAAO,MAAM,aAAa,iBAAiB,CAAA;AAE3C;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,uCAAuC,CAAA;AAEhE,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAA;IACZ,8DAA8D;IAC9D,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,SAAS,CASpH;AAqBD,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAiE3C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAM9C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAiBhE;AAED,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAoC9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQpE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CA6BpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBlF"}
|
package/lib/host/manifest.js
CHANGED
|
@@ -21,20 +21,39 @@
|
|
|
21
21
|
*
|
|
22
22
|
* @module dsh-plugin-upgrader/lib/manifest
|
|
23
23
|
*/
|
|
24
|
-
import { readFileSync, writeFileSync, renameSync } from 'node:fs';
|
|
24
|
+
import { readFileSync, writeFileSync, renameSync, rmSync } from 'node:fs';
|
|
25
25
|
import { join } from 'node:path';
|
|
26
26
|
/** Where a profile keeps its manifest. */
|
|
27
27
|
export const MANIFEST_FILE = 'package.json';
|
|
28
|
+
/**
|
|
29
|
+
* Where a pending drop is recorded, next to the manifest it belongs to.
|
|
30
|
+
*
|
|
31
|
+
* The drop has to survive a crash to be undoable. Writing the intent to disk
|
|
32
|
+
* before the entry disappears means the next process to load this plugin can
|
|
33
|
+
* put the entry back, instead of inheriting a profile that declares a package
|
|
34
|
+
* it no longer lists — which is how a failed upgrade lost a theme: pnpm spent
|
|
35
|
+
* two minutes verifying a lockfile, the app was restarted, and the dependency
|
|
36
|
+
* entry was never written back.
|
|
37
|
+
*/
|
|
38
|
+
export const JOURNAL_FILE = 'package.json.upgrader-journal.json';
|
|
28
39
|
/**
|
|
29
40
|
* Resolve the profile directory the running host is managing.
|
|
30
41
|
*
|
|
31
42
|
* The harness exports this to every process it starts, so the value names the
|
|
32
43
|
* same profile the manager is working on rather than a guess from the disk.
|
|
33
44
|
*
|
|
45
|
+
* The desktop host is an exception: it spawns the plugin host with
|
|
46
|
+
* `cwd: this.projectDir` (the profile directory) and no `DSH_PROFILE*`
|
|
47
|
+
* variables in the child environment, so the env-only lookups both miss. In
|
|
48
|
+
* that case fall back to the working directory — but only when it really
|
|
49
|
+
* looks like a profile (its `package.json` parses and carries a `dsh.profile`
|
|
50
|
+
* object), so a random cwd can never be mistaken for one.
|
|
51
|
+
*
|
|
34
52
|
* @param env - the process environment.
|
|
53
|
+
* @param cwd - the working directory to fall back to (overridable in tests).
|
|
35
54
|
* @returns the absolute profile directory, or `undefined` when unknown.
|
|
36
55
|
*/
|
|
37
|
-
export function profileDirFrom(env = process.env) {
|
|
56
|
+
export function profileDirFrom(env = process.env, cwd = process.cwd()) {
|
|
38
57
|
const explicit = env.DSH_PROFILE_DIR;
|
|
39
58
|
if (typeof explicit === 'string' && explicit.trim() !== '')
|
|
40
59
|
return explicit.trim();
|
|
@@ -43,7 +62,29 @@ export function profileDirFrom(env = process.env) {
|
|
|
43
62
|
if (typeof home === 'string' && home.trim() !== '' && typeof name === 'string' && name.trim() !== '') {
|
|
44
63
|
return join(home.trim(), 'profiles', name.trim());
|
|
45
64
|
}
|
|
46
|
-
return
|
|
65
|
+
return profileDirFromCwd(cwd);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Recognise a profile directory by its manifest alone.
|
|
69
|
+
*
|
|
70
|
+
* @param cwd - the candidate directory.
|
|
71
|
+
* @returns the directory when its `package.json` carries a `dsh.profile` object.
|
|
72
|
+
*/
|
|
73
|
+
function profileDirFromCwd(cwd) {
|
|
74
|
+
try {
|
|
75
|
+
const parsed = JSON.parse(readFileSync(join(cwd, MANIFEST_FILE), 'utf8'));
|
|
76
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
77
|
+
return undefined;
|
|
78
|
+
const dsh = parsed['dsh'];
|
|
79
|
+
if (dsh === null || typeof dsh !== 'object' || Array.isArray(dsh))
|
|
80
|
+
return undefined;
|
|
81
|
+
if (typeof dsh['profile'] !== 'object')
|
|
82
|
+
return undefined;
|
|
83
|
+
return cwd;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
47
88
|
}
|
|
48
89
|
/**
|
|
49
90
|
* Read a profile manifest, or explain why it could not be read.
|
|
@@ -80,6 +121,160 @@ function writeManifest(dir, manifest) {
|
|
|
80
121
|
writeFileSync(temporary, `${JSON.stringify(manifest, undefined, 2)}\n`, 'utf8');
|
|
81
122
|
renameSync(temporary, target);
|
|
82
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Record that an entry is about to disappear, before it disappears.
|
|
126
|
+
*
|
|
127
|
+
* Written with the same temp-then-rename dance as the manifest: a half-written
|
|
128
|
+
* journal would be worse than none, because recovery trusts it.
|
|
129
|
+
*
|
|
130
|
+
* @param dir - the profile directory.
|
|
131
|
+
* @param journal - what is being dropped.
|
|
132
|
+
* @returns whether the record reached the disk.
|
|
133
|
+
*/
|
|
134
|
+
function writeJournal(dir, journal) {
|
|
135
|
+
const target = join(dir, JOURNAL_FILE);
|
|
136
|
+
const temporary = `${target}.upgrader-tmp`;
|
|
137
|
+
try {
|
|
138
|
+
writeFileSync(temporary, `${JSON.stringify(journal, undefined, 2)}\n`, 'utf8');
|
|
139
|
+
renameSync(temporary, target);
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
try {
|
|
144
|
+
rmSync(temporary, { force: true });
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Nothing left to clean up: the failure is already being reported.
|
|
148
|
+
}
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Forget the pending drop.
|
|
154
|
+
*
|
|
155
|
+
* Called once the entry is back, or once pnpm has written a new version in its
|
|
156
|
+
* place — either way there is nothing left to undo.
|
|
157
|
+
*
|
|
158
|
+
* @param dir - the profile directory.
|
|
159
|
+
*/
|
|
160
|
+
export function clearJournal(dir) {
|
|
161
|
+
try {
|
|
162
|
+
rmSync(join(dir, JOURNAL_FILE), { force: true });
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// A journal that cannot be removed only causes one more no-op recovery.
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Read the pending drop, when one is recorded.
|
|
170
|
+
*
|
|
171
|
+
* @param dir - the profile directory.
|
|
172
|
+
* @returns the record, or `undefined` when there is none to read.
|
|
173
|
+
*/
|
|
174
|
+
export function readJournal(dir) {
|
|
175
|
+
let raw;
|
|
176
|
+
try {
|
|
177
|
+
raw = readFileSync(join(dir, JOURNAL_FILE), 'utf8');
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
const parsed = JSON.parse(raw);
|
|
184
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
185
|
+
return undefined;
|
|
186
|
+
const record = parsed;
|
|
187
|
+
if (typeof record.name !== 'string' || record.name === '')
|
|
188
|
+
return undefined;
|
|
189
|
+
if (typeof record.spec !== 'string')
|
|
190
|
+
return undefined;
|
|
191
|
+
return { name: record.name, spec: record.spec, at: typeof record.at === 'number' ? record.at : 0 };
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Undo a drop whose install never finished.
|
|
199
|
+
*
|
|
200
|
+
* This is the crash repair. A drop writes its intent to the journal before the
|
|
201
|
+
* entry leaves the manifest, so whichever process loads the plugin next can see
|
|
202
|
+
* that an entry is missing and put it back. Two outcomes are possible:
|
|
203
|
+
*
|
|
204
|
+
* - the entry is still absent, so pnpm never wrote the new version: restore it;
|
|
205
|
+
* - the entry is present, so the install landed and simply outlived the drop
|
|
206
|
+
* record: forget the record and leave the manifest alone.
|
|
207
|
+
*
|
|
208
|
+
* Doing this at load time rather than at next upgrade matters: a profile with a
|
|
209
|
+
* package on disk and no dependency entry is invisible to the manager, so the
|
|
210
|
+
* plugin cannot be upgraded, removed or seen again until somebody edits JSON by
|
|
211
|
+
* hand.
|
|
212
|
+
*
|
|
213
|
+
* @param dir - the profile directory.
|
|
214
|
+
* @returns what happened.
|
|
215
|
+
*/
|
|
216
|
+
export function recoverPendingDrop(dir) {
|
|
217
|
+
const journal = readJournal(dir);
|
|
218
|
+
if (journal === undefined) {
|
|
219
|
+
clearJournal(dir);
|
|
220
|
+
return { kind: 'none' };
|
|
221
|
+
}
|
|
222
|
+
const { manifest, error } = readManifest(dir);
|
|
223
|
+
if (manifest === undefined)
|
|
224
|
+
return { kind: 'failed', name: journal.name, reason: error ?? 'unreadable manifest' };
|
|
225
|
+
const dependencies = manifest.dependencies;
|
|
226
|
+
const record = dependencies !== null && typeof dependencies === 'object' && !Array.isArray(dependencies)
|
|
227
|
+
? dependencies
|
|
228
|
+
: undefined;
|
|
229
|
+
if (record === undefined) {
|
|
230
|
+
// No dependencies at all: the manifest was rewritten by something else, so
|
|
231
|
+
// the record no longer describes it. Dropping the record is the only safe
|
|
232
|
+
// move — inventing a `dependencies` object could undo a deliberate edit.
|
|
233
|
+
clearJournal(dir);
|
|
234
|
+
return { kind: 'none' };
|
|
235
|
+
}
|
|
236
|
+
if (Object.hasOwn(record, journal.name)) {
|
|
237
|
+
clearJournal(dir);
|
|
238
|
+
return { kind: 'settled', name: journal.name };
|
|
239
|
+
}
|
|
240
|
+
record[journal.name] = journal.spec;
|
|
241
|
+
try {
|
|
242
|
+
writeManifest(dir, manifest);
|
|
243
|
+
}
|
|
244
|
+
catch (writeError) {
|
|
245
|
+
return {
|
|
246
|
+
kind: 'failed',
|
|
247
|
+
name: journal.name,
|
|
248
|
+
reason: writeError instanceof Error ? writeError.message : String(writeError),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
clearJournal(dir);
|
|
252
|
+
return { kind: 'restored', name: journal.name, spec: journal.spec };
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Forget the pending drop once the entry is visibly back.
|
|
256
|
+
*
|
|
257
|
+
* Called after an install reported success. pnpm is what writes the new version
|
|
258
|
+
* into the manifest, so a success that left no entry means the write did not
|
|
259
|
+
* happen after all — and then the record is the only thing that can repair the
|
|
260
|
+
* profile, so it stays until it can actually be settled.
|
|
261
|
+
*
|
|
262
|
+
* @param dir - the profile directory.
|
|
263
|
+
* @param name - the package whose entry should be present.
|
|
264
|
+
* @returns whether the entry was there, and the record therefore cleared.
|
|
265
|
+
*/
|
|
266
|
+
export function confirmDependency(dir, name) {
|
|
267
|
+
const { manifest } = readManifest(dir);
|
|
268
|
+
if (manifest === undefined)
|
|
269
|
+
return false;
|
|
270
|
+
const dependencies = manifest.dependencies;
|
|
271
|
+
if (dependencies === null || typeof dependencies !== 'object' || Array.isArray(dependencies))
|
|
272
|
+
return false;
|
|
273
|
+
if (!Object.hasOwn(dependencies, name))
|
|
274
|
+
return false;
|
|
275
|
+
clearJournal(dir);
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
83
278
|
/**
|
|
84
279
|
* Remove one dependency entry, leaving everything else untouched.
|
|
85
280
|
*
|
|
@@ -98,17 +293,28 @@ export function dropDependency(dir, name) {
|
|
|
98
293
|
if (!Object.hasOwn(record, name))
|
|
99
294
|
return { kind: 'absent' };
|
|
100
295
|
const previous = record[name];
|
|
296
|
+
const spec = typeof previous === 'string' ? previous : '';
|
|
297
|
+
/*
|
|
298
|
+
* Journal first, then the manifest. The other order leaves a window where the
|
|
299
|
+
* entry is gone and nothing on disk remembers what it was — the exact state
|
|
300
|
+
* that turned a killed install into a missing theme.
|
|
301
|
+
*/
|
|
302
|
+
if (!writeJournal(dir, { name, spec, at: Date.now() })) {
|
|
303
|
+
return { kind: 'unavailable', reason: 'could not record the pending drop' };
|
|
304
|
+
}
|
|
101
305
|
delete record[name];
|
|
102
306
|
try {
|
|
103
307
|
writeManifest(dir, manifest);
|
|
104
308
|
}
|
|
105
309
|
catch (writeError) {
|
|
310
|
+
// The manifest still has the entry, so the record is stale: remove it.
|
|
311
|
+
clearJournal(dir);
|
|
106
312
|
return {
|
|
107
313
|
kind: 'unavailable',
|
|
108
314
|
reason: writeError instanceof Error ? writeError.message : String(writeError),
|
|
109
315
|
};
|
|
110
316
|
}
|
|
111
|
-
return { kind: 'dropped', dependency:
|
|
317
|
+
return { kind: 'dropped', dependency: spec };
|
|
112
318
|
}
|
|
113
319
|
/**
|
|
114
320
|
* Put a dropped entry back, for when the install did not reach pnpm.
|
|
@@ -132,15 +338,19 @@ export function restoreDependency(dir, name, spec) {
|
|
|
132
338
|
: undefined;
|
|
133
339
|
if (record === undefined)
|
|
134
340
|
return false;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
341
|
+
const present = Object.hasOwn(record, name);
|
|
342
|
+
if (!present) {
|
|
343
|
+
record[name] = spec;
|
|
344
|
+
try {
|
|
345
|
+
writeManifest(dir, manifest);
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
144
350
|
}
|
|
351
|
+
// The entry is on disk either way, so the pending record has served its
|
|
352
|
+
// purpose: leaving it would make the next load try to restore it again.
|
|
353
|
+
clearJournal(dir);
|
|
354
|
+
return true;
|
|
145
355
|
}
|
|
146
356
|
//# sourceMappingURL=manifest.js.map
|
package/lib/host/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/host/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/host/manifest.ts"],"names":[],"mappings":"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"}
|
package/lib/host/progress.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import type { InstallLogChunk, InstallState } from './manager.ts';
|
|
14
14
|
/** The phase a job reports, including the state before the step starts. */
|
|
15
|
-
export type Phase = InstallState['phase'] | 'waiting';
|
|
15
|
+
export type Phase = InstallState['phase'] | 'waiting' | 'verifying';
|
|
16
16
|
/**
|
|
17
17
|
* The phase a log chunk puts a job in.
|
|
18
18
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/host/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEjE,2EAA2E;AAC3E,MAAM,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/host/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEjE,2EAA2E;AAC3E,MAAM,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,WAAW,CAAA;AAWnE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,eAAe,GAAG,KAAK,CAanF"}
|
package/lib/host/progress.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pnpm's own words for "nothing is downloaded yet, I am checking a lockfile".
|
|
3
|
+
*
|
|
4
|
+
* This is the line that appears first and then sits unchanged for minutes on a
|
|
5
|
+
* healthy profile, which is why the tab looked frozen: the phase stayed on the
|
|
6
|
+
* pre-start state until the install itself printed something.
|
|
7
|
+
*/
|
|
8
|
+
const VERIFYING = /verifying lockfile|supply-chain policies/i;
|
|
1
9
|
/**
|
|
2
10
|
* The phase a log chunk puts a job in.
|
|
3
11
|
*
|
|
@@ -16,6 +24,13 @@ export function nextPhase(current, chunk) {
|
|
|
16
24
|
// A whitespace-only chunk is a keep-alive, not evidence of work.
|
|
17
25
|
if (typeof chunk.text !== 'string' || chunk.text.trim() === '')
|
|
18
26
|
return current ?? 'waiting';
|
|
27
|
+
/*
|
|
28
|
+
* Verification is worth naming. It reads as the same frozen phase as the
|
|
29
|
+
* pre-start state, and it is the phase that lasts longest: a cold profile
|
|
30
|
+
* spends minutes here while pnpm asks the registry about every lockfile entry.
|
|
31
|
+
*/
|
|
32
|
+
if (VERIFYING.test(chunk.text))
|
|
33
|
+
return 'verifying';
|
|
19
34
|
return 'installing';
|
|
20
35
|
}
|
|
21
36
|
//# sourceMappingURL=progress.js.map
|
package/lib/host/progress.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/host/progress.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,OAA0B,EAAE,KAAsB;IAC1E,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QACnF,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,iEAAiE;IACjE,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,OAAO,IAAI,SAAS,CAAA;IAC3F,OAAO,YAAY,CAAA;AACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/host/progress.ts"],"names":[],"mappings":"AAiBA;;;;;;GAMG;AACH,MAAM,SAAS,GAAG,2CAA2C,CAAA;AAE7D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,OAA0B,EAAE,KAAsB;IAC1E,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QACnF,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,iEAAiE;IACjE,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,OAAO,IAAI,SAAS,CAAA;IAC3F;;;;OAIG;IACH,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAA;IAClD,OAAO,YAAY,CAAA;AACrB,CAAC"}
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6BA,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,mBAAmB,CAAA;AAE1B,kEAAkE;AAClE,eAAO,MAAM,IAAI,oBAAoB,CAAA;AAErC,gFAAgF;AAChF,eAAO,MAAM,MAAM,UAAgB,CAAA;AAgGnC;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAya5C"}
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { writeJson, isLoopbackRequest, readJsonBody } from './host/http.js';
|
|
2
2
|
import { buildOverview } from './host/overview.js';
|
|
3
3
|
import { runStep, validateStep } from './host/install.js';
|
|
4
|
+
import { profileDirFrom, recoverPendingDrop } from './host/manifest.js';
|
|
4
5
|
import { nextPhase } from './host/progress.js';
|
|
5
6
|
import { asPluginManager, } from './host/manager.js';
|
|
6
7
|
/** Stable plugin name; matches the cordis.patch.yml insert id. */
|
|
@@ -34,6 +35,14 @@ const JOB_LOG_LIMIT = 400;
|
|
|
34
35
|
const JOB_LOG_CHARS = 24 * 1024;
|
|
35
36
|
/** How many log lines the overview ships for a job the tab adopts. */
|
|
36
37
|
const ADOPTED_LOG_LIMIT = 60;
|
|
38
|
+
/**
|
|
39
|
+
* How much of the newest pnpm line the panel shows.
|
|
40
|
+
*
|
|
41
|
+
* A single warning line can carry a whole URL plus retry bookkeeping; the tab
|
|
42
|
+
* renders this inline next to the phase, so it is clipped from the left — the
|
|
43
|
+
* tail of a pnpm warning says what failed, the head only repeats the registry.
|
|
44
|
+
*/
|
|
45
|
+
const ACTIVITY_CHARS = 120;
|
|
37
46
|
/**
|
|
38
47
|
* Mount the host half.
|
|
39
48
|
*
|
|
@@ -110,6 +119,7 @@ export function apply(ctx) {
|
|
|
110
119
|
job.current = `${step.name}@${step.version}`;
|
|
111
120
|
job.stepStartedAt = Date.now();
|
|
112
121
|
job.phase = 'waiting';
|
|
122
|
+
job.activity = undefined;
|
|
113
123
|
job.attempt = undefined;
|
|
114
124
|
appendLog(job, `→ ${job.current}`);
|
|
115
125
|
const outcome = await runStep(manager, step, (message) => appendLog(job, message), (requestId) => {
|
|
@@ -136,6 +146,7 @@ export function apply(ctx) {
|
|
|
136
146
|
job.current = undefined;
|
|
137
147
|
job.stepStartedAt = undefined;
|
|
138
148
|
job.phase = undefined;
|
|
149
|
+
job.activity = undefined;
|
|
139
150
|
job.attempt = undefined;
|
|
140
151
|
job.finishedAt = Date.now();
|
|
141
152
|
job.cacheDirty = true;
|
|
@@ -202,6 +213,7 @@ export function apply(ctx) {
|
|
|
202
213
|
startedAt: live.startedAt,
|
|
203
214
|
stepStartedAt: live.stepStartedAt,
|
|
204
215
|
phase: live.phase,
|
|
216
|
+
activity: live.activity,
|
|
205
217
|
attempt: live.attempt,
|
|
206
218
|
log: live.log.slice(-ADOPTED_LOG_LIMIT),
|
|
207
219
|
},
|
|
@@ -283,6 +295,7 @@ export function apply(ctx) {
|
|
|
283
295
|
failed: job.failed,
|
|
284
296
|
current: job.current,
|
|
285
297
|
phase: job.phase,
|
|
298
|
+
activity: job.activity,
|
|
286
299
|
attempt: job.attempt,
|
|
287
300
|
startedAt: job.startedAt,
|
|
288
301
|
stepStartedAt: job.stepStartedAt,
|
|
@@ -370,6 +383,18 @@ export function apply(ctx) {
|
|
|
370
383
|
* install, which is what makes a two-minute step read as a hang.
|
|
371
384
|
*/
|
|
372
385
|
job.phase = nextPhase(job.phase, chunk);
|
|
386
|
+
/*
|
|
387
|
+
* Keep the newest line as the activity. Everything pnpm says is one more
|
|
388
|
+
* fact about what it is doing, and the phase is too coarse to answer the
|
|
389
|
+
* only question a waiting person has: is it working or is it stuck?
|
|
390
|
+
*/
|
|
391
|
+
const text = typeof chunk.text === 'string' ? chunk.text.trim() : '';
|
|
392
|
+
if (text !== '') {
|
|
393
|
+
const line = text.split(/\r?\n/).filter((part) => part.trim() !== '').at(-1) ?? '';
|
|
394
|
+
const trimmed = line.trim();
|
|
395
|
+
if (trimmed !== '')
|
|
396
|
+
job.activity = trimmed.length > ACTIVITY_CHARS ? `…${trimmed.slice(-ACTIVITY_CHARS)}` : trimmed;
|
|
397
|
+
}
|
|
373
398
|
}, 'plugin-upgrader: install output');
|
|
374
399
|
subscribe('plugin-manager/install-state', (state) => {
|
|
375
400
|
const job = liveJob;
|
|
@@ -394,5 +419,30 @@ export function apply(ctx) {
|
|
|
394
419
|
}
|
|
395
420
|
}, 'plugin-upgrader: install phase');
|
|
396
421
|
ctx.effect(() => ctx.webServer.register({ kind: 'prefix', path: API_PREFIX, handler }), 'plugin-upgrader: routes');
|
|
422
|
+
/**
|
|
423
|
+
* Repair a drop whose install never finished.
|
|
424
|
+
*
|
|
425
|
+
* An upgrade replaces a version by removing the dependency entry and letting
|
|
426
|
+
* pnpm write the new one back. If the process dies inside that window — a
|
|
427
|
+
* restart, a crash, a killed pnpm — the entry is gone and the package is
|
|
428
|
+
* still on disk, which makes the plugin invisible to the manager. The journal
|
|
429
|
+
* written before the drop is what makes that state recoverable, so it is read
|
|
430
|
+
* here, on every load, before anything else can look at the profile.
|
|
431
|
+
*/
|
|
432
|
+
const dir = profileDirFrom();
|
|
433
|
+
if (dir !== undefined) {
|
|
434
|
+
try {
|
|
435
|
+
const recovery = recoverPendingDrop(dir);
|
|
436
|
+
if (recovery.kind === 'restored') {
|
|
437
|
+
console.warn(`[plugin-upgrader] an interrupted upgrade left ${recovery.name} out of the profile manifest; ` +
|
|
438
|
+
`restored it at ${recovery.spec}. Upgrade it again to finish.`);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
// Recovery is a repair, never a precondition: a profile that cannot be
|
|
443
|
+
// repaired must still load the tab, which is the only way to fix it.
|
|
444
|
+
console.warn(`[plugin-upgrader] could not repair an interrupted upgrade: ${error instanceof Error ? error.message : String(error)}`);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
397
447
|
}
|
|
398
448
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|