@noodleseed/one 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive-ops.d.ts +3 -0
- package/dist/commands/archive-ops.d.ts.map +1 -0
- package/dist/commands/archive-ops.js +168 -0
- package/dist/commands/archive-ops.js.map +1 -0
- package/dist/commands/org-admin.d.ts +17 -0
- package/dist/commands/org-admin.d.ts.map +1 -0
- package/dist/commands/org-admin.js +241 -0
- package/dist/commands/org-admin.js.map +1 -0
- package/dist/commands/policy-ops.d.ts.map +1 -1
- package/dist/commands/policy-ops.js +94 -1
- package/dist/commands/policy-ops.js.map +1 -1
- package/dist/commands/session.d.ts +1 -15
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +15 -170
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +13 -5
- package/dist/commands/shared.js.map +1 -1
- package/dist/commands/update-ops.d.ts +29 -0
- package/dist/commands/update-ops.d.ts.map +1 -0
- package/dist/commands/update-ops.js +315 -0
- package/dist/commands/update-ops.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/update-binary.d.ts +38 -0
- package/dist/update-binary.d.ts.map +1 -0
- package/dist/update-binary.js +144 -0
- package/dist/update-binary.js.map +1 -0
- package/dist/update-check.d.ts +40 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +212 -0
- package/dist/update-check.js.map +1 -0
- package/dist/update-render.d.ts +17 -0
- package/dist/update-render.d.ts.map +1 -0
- package/dist/update-render.js +39 -0
- package/dist/update-render.js.map +1 -0
- package/dist/update.d.ts +10 -9
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +21 -89
- package/dist/update.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +13 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts +43 -0
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.js +122 -0
- package/node_modules/@noodle-borg/service/dist/archive-sweeper.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.js +119 -0
- package/node_modules/@noodle-borg/service/dist/commercial-plans.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.js +1 -1
- package/node_modules/@noodle-borg/service/dist/deployment-versioning.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +3 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +2 -0
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +25 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.js +119 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +7 -6
- package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.js +44 -44
- package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts +16 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.js +83 -0
- package/node_modules/@noodle-borg/service/dist/routes/archive.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +1 -18
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +18 -260
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +17 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js +88 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts +40 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +353 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +15 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.js +47 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts +20 -0
- package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/plans.js +159 -0
- package/node_modules/@noodle-borg/service/dist/routes/plans.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/policies.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/policies.js +7 -0
- package/node_modules/@noodle-borg/service/dist/routes/policies.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js +19 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +107 -4
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/control-plane.js +38 -0
- package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +25 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.js +163 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +16 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts +60 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js +101 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-rows.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +8 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +20 -6
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +74 -122
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/records.d.ts +35 -0
- package/node_modules/@noodle-borg/service/dist/store/records.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/records.js +87 -0
- package/node_modules/@noodle-borg/service/dist/store/records.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +19 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.js +61 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts +68 -44
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.js +48 -213
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;IACzB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,IAAI,IAAI,CAAC;QACd,IAAI,EAAE,CAAC;IACT,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,QAAmC,OAAO,CAAC,KAAK;IACpE,KAAK,CACH;QACE,yBAAyB;QACzB,EAAE;QACF,sFAAsF;QACtF,oGAAoG;QACpG,6EAA6E;QAC7E,8DAA8D;QAC9D,kEAAkE;QAClE,6EAA6E;QAC7E,mFAAmF;QACnF,qEAAqE;QACrE,oHAAoH;QACpH,sFAAsF;QACtF,6EAA6E;QAC7E,4FAA4F;QAC5F,0FAA0F;QAC1F,0EAA0E;QAC1E,mFAAmF;QACnF,uDAAuD;QACvD,kFAAkF;QAClF,+CAA+C;QAC/C,6FAA6F;QAC7F,iFAAiF;QACjF,uFAAuF;QACvF,mEAAmE;QACnE,wGAAwG;QACxG,8CAA8C;QAC9C,gFAAgF;QAChF,+DAA+D;QAC/D,0EAA0E;QAC1E,sBAAsB;QACtB,yGAAyG;QACzG,yGAAyG;QACzG,sGAAsG;QACtG,uHAAuH;QACvH,iGAAiG;QACjG,sGAAsG;QACtG,qCAAqC;QACrC,6FAA6F;QAC7F,8GAA8G;QAC9G,sEAAsE;QACtE,uFAAuF;QACvF,
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ColorMode } from '../gradient.js';
|
|
2
|
+
import { type NoodleBinaryInspection } from '../update-binary.js';
|
|
3
|
+
export declare const UPDATE_EXIT: {
|
|
4
|
+
readonly ok: 0;
|
|
5
|
+
readonly updateAvailable: 10;
|
|
6
|
+
readonly updateFailed: 11;
|
|
7
|
+
readonly repairRequired: 12;
|
|
8
|
+
readonly unsafeBinary: 13;
|
|
9
|
+
readonly networkInconclusive: 14;
|
|
10
|
+
};
|
|
11
|
+
export interface UpdateCommandDeps {
|
|
12
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
13
|
+
readonly fetchImpl?: typeof fetch;
|
|
14
|
+
readonly inspectImpl?: () => NoodleBinaryInspection;
|
|
15
|
+
readonly installImpl?: (opts: {
|
|
16
|
+
readonly json: boolean;
|
|
17
|
+
readonly colorMode?: ColorMode;
|
|
18
|
+
}) => Promise<number>;
|
|
19
|
+
readonly unlinkImpl?: (path: string) => void;
|
|
20
|
+
readonly confirmImpl?: (message: string) => Promise<boolean>;
|
|
21
|
+
/** Base prompt capability; defaults to stdin+stdout TTY outside CI. */
|
|
22
|
+
readonly interactive?: boolean;
|
|
23
|
+
readonly log?: (line: string) => void;
|
|
24
|
+
readonly logError?: (line: string) => void;
|
|
25
|
+
/** Rich-output mode; defaults to stdout detection ('none' in tests/CI/pipes). */
|
|
26
|
+
readonly colorMode?: ColorMode;
|
|
27
|
+
}
|
|
28
|
+
export declare function runUpdateCommand(rest: readonly string[], deps?: UpdateCommandDeps): Promise<number>;
|
|
29
|
+
//# sourceMappingURL=update-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-ops.d.ts","sourceRoot":"","sources":["../../src/commands/update-ops.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAWjE,OAAO,EAAuB,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAQvF,eAAO,MAAM,WAAW;;;;;;;CAOd,CAAC;AAMX,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,sBAAsB,CAAC;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;KAChC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,uEAAuE;IACvE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAsOjB"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `noodle update` — the canonical install/update/repair command (#242, ADR 0118).
|
|
3
|
+
*
|
|
4
|
+
* `npm install -g` fails with `EEXIST` before any of our code runs when a stale or
|
|
5
|
+
* foreign `noodle` binary occupies the global bin path, so this command detects the
|
|
6
|
+
* conflict first (via `update-binary.ts`), repairs it only when the binary is provably
|
|
7
|
+
* ours, and otherwise prints the exact manual commands. The repair unlink is the only
|
|
8
|
+
* destructive filesystem operation in the update system, runs only on a SAFE-classified
|
|
9
|
+
* path, and is always logged plainly.
|
|
10
|
+
*
|
|
11
|
+
* Stable exit codes (explicit `noodle update` paths only, never plain commands):
|
|
12
|
+
* 0 ok / already current / updated
|
|
13
|
+
* 10 update available (--check)
|
|
14
|
+
* 11 update or repair failed
|
|
15
|
+
* 12 repair required (safe, but --repair not authorized / not confirmable)
|
|
16
|
+
* 13 unsafe conflicting binary
|
|
17
|
+
* 14 network inconclusive
|
|
18
|
+
*/
|
|
19
|
+
import { spawn } from 'node:child_process';
|
|
20
|
+
import { unlinkSync } from 'node:fs';
|
|
21
|
+
import { detectColorMode } from '../gradient.js';
|
|
22
|
+
import { confirm } from '../prompts.js';
|
|
23
|
+
import { startSpinner } from '../status.js';
|
|
24
|
+
import { CLI_PACKAGE_NAME, compareVersions, currentCliVersion, fetchLatestVersion, GLOBAL_UPDATE_COMMAND, truthyEnv, } from '../update.js';
|
|
25
|
+
import { inspectNoodleBinary } from '../update-binary.js';
|
|
26
|
+
import { renderRepairNotice, renderUpdateAvailable, renderUpdated, renderUpToDate, } from '../update-render.js';
|
|
27
|
+
export const UPDATE_EXIT = {
|
|
28
|
+
ok: 0,
|
|
29
|
+
updateAvailable: 10,
|
|
30
|
+
updateFailed: 11,
|
|
31
|
+
repairRequired: 12,
|
|
32
|
+
unsafeBinary: 13,
|
|
33
|
+
networkInconclusive: 14,
|
|
34
|
+
};
|
|
35
|
+
const RECOMMENDED_UPDATE = 'noodle update --yes --json';
|
|
36
|
+
const RECOMMENDED_REPAIR = 'noodle update --yes --repair --json';
|
|
37
|
+
const UNSAFE_REASON = `Existing noodle binary is not known to be owned by ${CLI_PACKAGE_NAME}.`;
|
|
38
|
+
export async function runUpdateCommand(rest, deps = {}) {
|
|
39
|
+
const env = deps.env ?? process.env;
|
|
40
|
+
const yes = rest.includes('--yes') || rest.includes('-y');
|
|
41
|
+
const check = rest.includes('--check');
|
|
42
|
+
const json = rest.includes('--json');
|
|
43
|
+
const repair = rest.includes('--repair');
|
|
44
|
+
const log = deps.log ?? console.log;
|
|
45
|
+
const logError = deps.logError ?? console.error;
|
|
46
|
+
const canPrompt = (deps.interactive ?? defaultInteractive(env)) &&
|
|
47
|
+
!truthyEnv(env.NOODLE_NO_PROMPT) &&
|
|
48
|
+
!yes &&
|
|
49
|
+
!json &&
|
|
50
|
+
!check;
|
|
51
|
+
const colorMode = deps.colorMode ?? detectColorMode(process.stdout);
|
|
52
|
+
const installed = currentCliVersion();
|
|
53
|
+
// The check moment: a live spinner on rich TTYs; nothing extra anywhere else.
|
|
54
|
+
const spin = colorMode !== 'none' && !json ? startSpinner('checking for updates') : undefined;
|
|
55
|
+
const latest = await fetchLatestVersion(deps.fetchImpl ?? fetch, 5000).catch(() => undefined);
|
|
56
|
+
if (latest === undefined) {
|
|
57
|
+
spin?.warn('could not reach the npm registry');
|
|
58
|
+
if (json) {
|
|
59
|
+
log(JSON.stringify({
|
|
60
|
+
ok: false,
|
|
61
|
+
error: 'network_inconclusive',
|
|
62
|
+
package: CLI_PACKAGE_NAME,
|
|
63
|
+
installed,
|
|
64
|
+
reason: 'Could not reach the npm registry to determine the latest version.',
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
else if (spin === undefined) {
|
|
68
|
+
logError('update: could not reach the npm registry to determine the latest version.');
|
|
69
|
+
}
|
|
70
|
+
return UPDATE_EXIT.networkInconclusive;
|
|
71
|
+
}
|
|
72
|
+
spin?.stop();
|
|
73
|
+
const updateAvailable = compareVersions(latest, installed) > 0;
|
|
74
|
+
const inspection = (deps.inspectImpl ?? inspectNoodleBinary)();
|
|
75
|
+
const status = inspection.status;
|
|
76
|
+
const repairRequired = status.kind === 'safe-repair' || status.kind === 'unsafe';
|
|
77
|
+
const repairSafe = status.kind === 'safe-repair';
|
|
78
|
+
const checkShape = () => ({
|
|
79
|
+
ok: true,
|
|
80
|
+
package: CLI_PACKAGE_NAME,
|
|
81
|
+
installed,
|
|
82
|
+
latest,
|
|
83
|
+
updateAvailable,
|
|
84
|
+
// Never recommend a command guaranteed to exit 13: an UNSAFE binary gets
|
|
85
|
+
// the manual path at check time instead of a doomed --yes suggestion.
|
|
86
|
+
...(updateAvailable && status.kind !== 'unsafe'
|
|
87
|
+
? { recommendedCommand: repairSafe ? RECOMMENDED_REPAIR : RECOMMENDED_UPDATE }
|
|
88
|
+
: {}),
|
|
89
|
+
repairRequired,
|
|
90
|
+
repairSafe,
|
|
91
|
+
...(status.kind === 'unsafe'
|
|
92
|
+
? {
|
|
93
|
+
path: inspection.binPath,
|
|
94
|
+
manualCommands: [`rm ${inspection.binPath}`, GLOBAL_UPDATE_COMMAND],
|
|
95
|
+
}
|
|
96
|
+
: {}),
|
|
97
|
+
});
|
|
98
|
+
if (check) {
|
|
99
|
+
if (json)
|
|
100
|
+
log(JSON.stringify(checkShape()));
|
|
101
|
+
else
|
|
102
|
+
printPlan({ log, logError, installed, latest, updateAvailable, inspection, colorMode });
|
|
103
|
+
return updateAvailable ? UPDATE_EXIT.updateAvailable : UPDATE_EXIT.ok;
|
|
104
|
+
}
|
|
105
|
+
if (!updateAvailable) {
|
|
106
|
+
if (json)
|
|
107
|
+
log(JSON.stringify(checkShape()));
|
|
108
|
+
else
|
|
109
|
+
log(renderUpToDate(installed, colorMode));
|
|
110
|
+
return UPDATE_EXIT.ok;
|
|
111
|
+
}
|
|
112
|
+
const install = async (repairedPath) => {
|
|
113
|
+
const code = await (deps.installImpl ?? defaultInstall)({ json, colorMode });
|
|
114
|
+
if (code !== 0) {
|
|
115
|
+
if (json) {
|
|
116
|
+
log(JSON.stringify({
|
|
117
|
+
ok: false,
|
|
118
|
+
error: 'update_failed',
|
|
119
|
+
package: CLI_PACKAGE_NAME,
|
|
120
|
+
installedBefore: installed,
|
|
121
|
+
command: GLOBAL_UPDATE_COMMAND,
|
|
122
|
+
exitCode: code,
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
logError(`update: \`${GLOBAL_UPDATE_COMMAND}\` exited with code ${code}.`);
|
|
127
|
+
}
|
|
128
|
+
return UPDATE_EXIT.updateFailed;
|
|
129
|
+
}
|
|
130
|
+
if (json) {
|
|
131
|
+
log(JSON.stringify({
|
|
132
|
+
ok: true,
|
|
133
|
+
package: CLI_PACKAGE_NAME,
|
|
134
|
+
installedBefore: installed,
|
|
135
|
+
installedAfter: latest,
|
|
136
|
+
command: GLOBAL_UPDATE_COMMAND,
|
|
137
|
+
...(repairedPath !== undefined ? { repairPerformed: true, repairedPath } : {}),
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
log(renderUpdated(installed, latest, colorMode));
|
|
142
|
+
}
|
|
143
|
+
return UPDATE_EXIT.ok;
|
|
144
|
+
};
|
|
145
|
+
const repairAndInstall = async () => {
|
|
146
|
+
const reason = status.kind === 'safe-repair' ? status.reason : '';
|
|
147
|
+
// The one destructive operation in the update system: unlink a SAFE-classified
|
|
148
|
+
// path, logged plainly before it happens.
|
|
149
|
+
logError(`Removing blocked binary: ${inspection.binPath} (${reason})`);
|
|
150
|
+
try {
|
|
151
|
+
(deps.unlinkImpl ?? unlinkSync)(inspection.binPath);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
155
|
+
if (json) {
|
|
156
|
+
log(JSON.stringify({
|
|
157
|
+
ok: false,
|
|
158
|
+
error: 'repair_failed',
|
|
159
|
+
package: CLI_PACKAGE_NAME,
|
|
160
|
+
path: inspection.binPath,
|
|
161
|
+
reason: message,
|
|
162
|
+
}));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
logError(`update: could not remove ${inspection.binPath}: ${message}`);
|
|
166
|
+
}
|
|
167
|
+
return UPDATE_EXIT.updateFailed;
|
|
168
|
+
}
|
|
169
|
+
return install(inspection.binPath);
|
|
170
|
+
};
|
|
171
|
+
const reportUnsafe = () => {
|
|
172
|
+
if (json) {
|
|
173
|
+
log(JSON.stringify({
|
|
174
|
+
ok: false,
|
|
175
|
+
error: 'conflicting_binary',
|
|
176
|
+
package: CLI_PACKAGE_NAME,
|
|
177
|
+
path: inspection.binPath,
|
|
178
|
+
reason: UNSAFE_REASON,
|
|
179
|
+
repairRequired: true,
|
|
180
|
+
repairSafe: false,
|
|
181
|
+
manualCommands: [`rm ${inspection.binPath}`, GLOBAL_UPDATE_COMMAND],
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
logError('The existing `noodle` binary is not owned by this install, so I will not overwrite it automatically.');
|
|
186
|
+
logError(` binary: ${inspection.binPath}`);
|
|
187
|
+
logError('Verify that file yourself, then update manually:');
|
|
188
|
+
logError(` rm ${inspection.binPath}`);
|
|
189
|
+
logError(` ${GLOBAL_UPDATE_COMMAND}`);
|
|
190
|
+
}
|
|
191
|
+
return UPDATE_EXIT.unsafeBinary;
|
|
192
|
+
};
|
|
193
|
+
const reportRepairRequired = () => {
|
|
194
|
+
if (json) {
|
|
195
|
+
log(JSON.stringify({
|
|
196
|
+
ok: false,
|
|
197
|
+
error: 'repair_required',
|
|
198
|
+
package: CLI_PACKAGE_NAME,
|
|
199
|
+
path: inspection.binPath,
|
|
200
|
+
reason: 'A previous Noodle CLI binary is blocking npm; it is safe to remove.',
|
|
201
|
+
repairRequired: true,
|
|
202
|
+
repairSafe: true,
|
|
203
|
+
recommendedCommand: RECOMMENDED_REPAIR,
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
logError(`update: an old Noodle CLI binary at ${inspection.binPath} is blocking npm.`);
|
|
208
|
+
logError('Run `noodle update --yes --repair` to remove it safely and update.');
|
|
209
|
+
}
|
|
210
|
+
return UPDATE_EXIT.repairRequired;
|
|
211
|
+
};
|
|
212
|
+
// Headless or explicitly-flagged action paths (--yes and/or --repair).
|
|
213
|
+
if (yes || repair) {
|
|
214
|
+
if (status.kind === 'unsafe')
|
|
215
|
+
return reportUnsafe();
|
|
216
|
+
if (repairSafe) {
|
|
217
|
+
if (repair && yes)
|
|
218
|
+
return repairAndInstall();
|
|
219
|
+
if (repair && canPrompt) {
|
|
220
|
+
printPlan({ log, logError, installed, latest, updateAvailable, inspection, colorMode });
|
|
221
|
+
const go = await promptConfirm(deps, 'Repair and update now?');
|
|
222
|
+
return go ? repairAndInstall() : UPDATE_EXIT.ok;
|
|
223
|
+
}
|
|
224
|
+
// --yes without --repair, or --repair without a way to confirm.
|
|
225
|
+
return reportRepairRequired();
|
|
226
|
+
}
|
|
227
|
+
// No blocking binary (or the active install's own symlink).
|
|
228
|
+
if (yes)
|
|
229
|
+
return install();
|
|
230
|
+
// --repair with nothing to repair, interactive: fall through to the normal prompt.
|
|
231
|
+
}
|
|
232
|
+
// Interactive default: show the plan, then ask.
|
|
233
|
+
if (canPrompt) {
|
|
234
|
+
log(renderUpdateAvailable(installed, latest, colorMode));
|
|
235
|
+
if (status.kind === 'unsafe')
|
|
236
|
+
return reportUnsafe();
|
|
237
|
+
if (repairSafe) {
|
|
238
|
+
logError(renderRepairNotice(`An old \`noodle\` binary at ${inspection.binPath} is blocking npm.`, colorMode));
|
|
239
|
+
logError('It is provably a Noodle CLI install, so it can be removed safely.');
|
|
240
|
+
const go = await promptConfirm(deps, 'Repair and update now?');
|
|
241
|
+
return go ? repairAndInstall() : UPDATE_EXIT.ok;
|
|
242
|
+
}
|
|
243
|
+
const go = await promptConfirm(deps, 'Update now?');
|
|
244
|
+
return go ? install() : UPDATE_EXIT.ok;
|
|
245
|
+
}
|
|
246
|
+
// Non-interactive without an action flag: report the plan and change nothing.
|
|
247
|
+
if (json)
|
|
248
|
+
log(JSON.stringify(checkShape()));
|
|
249
|
+
else
|
|
250
|
+
printPlan({ log, logError, installed, latest, updateAvailable, inspection, colorMode });
|
|
251
|
+
return UPDATE_EXIT.ok;
|
|
252
|
+
}
|
|
253
|
+
function printPlan(input) {
|
|
254
|
+
const { log, installed, latest, updateAvailable, inspection, colorMode } = input;
|
|
255
|
+
if (!updateAvailable) {
|
|
256
|
+
log(renderUpToDate(installed, colorMode));
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
log(renderUpdateAvailable(installed, latest, colorMode));
|
|
260
|
+
const status = inspection.status;
|
|
261
|
+
if (status.kind === 'safe-repair') {
|
|
262
|
+
log(`An old \`noodle\` binary at ${inspection.binPath} will block npm; it is safe to remove.`);
|
|
263
|
+
log('Run `noodle update --yes --repair` to repair and update now.');
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
if (status.kind === 'unsafe') {
|
|
267
|
+
log(`An existing \`noodle\` binary at ${inspection.binPath} blocks npm and is not owned by`);
|
|
268
|
+
log('this install. Verify and remove it yourself, then update:');
|
|
269
|
+
log(` rm ${inspection.binPath}`);
|
|
270
|
+
log(` ${GLOBAL_UPDATE_COMMAND}`);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
log('Run `noodle update --yes` to update now.');
|
|
274
|
+
}
|
|
275
|
+
async function promptConfirm(deps, message) {
|
|
276
|
+
const ask = deps.confirmImpl ?? ((m) => confirm(m));
|
|
277
|
+
return ask(message).catch(() => false);
|
|
278
|
+
}
|
|
279
|
+
function defaultInteractive(env) {
|
|
280
|
+
return (process.stdin.isTTY === true && process.stdout.isTTY === true && !truthyEnv(env.CI ?? undefined));
|
|
281
|
+
}
|
|
282
|
+
function defaultInstall(opts) {
|
|
283
|
+
const rich = !opts.json && (opts.colorMode ?? 'none') !== 'none';
|
|
284
|
+
// Rich TTYs get a spinner and captured npm output (shown only on failure);
|
|
285
|
+
// --json keeps stdout machine-readable; plain mode inherits npm's own output.
|
|
286
|
+
const spin = rich ? startSpinner(`updating ${CLI_PACKAGE_NAME}`) : undefined;
|
|
287
|
+
return new Promise((resolve) => {
|
|
288
|
+
const child = spawn('npm', ['install', '-g', `${CLI_PACKAGE_NAME}@latest`], {
|
|
289
|
+
stdio: rich ? ['ignore', 'pipe', 'pipe'] : opts.json ? ['ignore', 2, 2] : 'inherit',
|
|
290
|
+
});
|
|
291
|
+
let captured = '';
|
|
292
|
+
child.stdout?.on('data', (chunk) => {
|
|
293
|
+
captured = (captured + chunk.toString()).slice(-65536);
|
|
294
|
+
});
|
|
295
|
+
child.stderr?.on('data', (chunk) => {
|
|
296
|
+
captured = (captured + chunk.toString()).slice(-65536);
|
|
297
|
+
});
|
|
298
|
+
child.on('error', (error) => {
|
|
299
|
+
spin?.fail(`updating ${CLI_PACKAGE_NAME}`);
|
|
300
|
+
console.error(`update: ${error.message}`);
|
|
301
|
+
resolve(1);
|
|
302
|
+
});
|
|
303
|
+
child.on('close', (code) => {
|
|
304
|
+
if ((code ?? 1) === 0)
|
|
305
|
+
spin?.stop();
|
|
306
|
+
else {
|
|
307
|
+
spin?.fail(`updating ${CLI_PACKAGE_NAME}`);
|
|
308
|
+
if (captured.length > 0)
|
|
309
|
+
process.stderr.write(`${captured}\n`);
|
|
310
|
+
}
|
|
311
|
+
resolve(code ?? 1);
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=update-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-ops.js","sourceRoot":"","sources":["../../src/commands/update-ops.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -39,6 +39,8 @@ export interface NoodleConfig {
|
|
|
39
39
|
readonly checkedAt: string;
|
|
40
40
|
readonly latestVersion?: string;
|
|
41
41
|
readonly skillsLatestVersion?: string;
|
|
42
|
+
/** Prompt snooze deadline (ISO): the default update prompt stays quiet until then. */
|
|
43
|
+
readonly snoozedUntil?: string;
|
|
42
44
|
};
|
|
43
45
|
}
|
|
44
46
|
/** A locally-cached record of a deployed server. Contains metadata only; credentials are not stored here. */
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,6GAA6G;IAC7G,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,mFAAmF;IACnF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,mFAAmF;IACnF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,oEAAoE;IACpE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qFAAqF;IACrF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,4FAA4F;IAC5F,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,oDAAoD;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IACtD,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type BinaryPathKind = 'file' | 'symlink' | 'dir' | 'other' | 'missing' | 'error';
|
|
2
|
+
export interface BinaryProbeDeps {
|
|
3
|
+
/** The running node executable; the expected global npm bin dir is its directory. */
|
|
4
|
+
readonly execPath: string;
|
|
5
|
+
lstatKind(path: string): BinaryPathKind;
|
|
6
|
+
readlink(path: string): string | undefined;
|
|
7
|
+
realpath(path: string): string | undefined;
|
|
8
|
+
/** First bytes of a file (launcher-shim sniffing). Undefined when unreadable. */
|
|
9
|
+
readFileHead(path: string): string | undefined;
|
|
10
|
+
}
|
|
11
|
+
/** Real-filesystem probes; `execPath` is overridable so tests point at a temp prefix. */
|
|
12
|
+
export declare function realBinaryProbeDeps(overrides?: Partial<Pick<BinaryProbeDeps, 'execPath'>>): BinaryProbeDeps;
|
|
13
|
+
export type BinaryStatus = {
|
|
14
|
+
readonly kind: 'none';
|
|
15
|
+
}
|
|
16
|
+
/** A healthy symlink into the active prefix's own Noodle CLI package — npm updates it in place. */
|
|
17
|
+
| {
|
|
18
|
+
readonly kind: 'active-install';
|
|
19
|
+
readonly target: string;
|
|
20
|
+
}
|
|
21
|
+
/** A blocking binary that is provably a Noodle CLI leftover; removing it is authorized. */
|
|
22
|
+
| {
|
|
23
|
+
readonly kind: 'safe-repair';
|
|
24
|
+
readonly reason: string;
|
|
25
|
+
}
|
|
26
|
+
/** A blocking binary of unknown or foreign ownership; never removed automatically. */
|
|
27
|
+
| {
|
|
28
|
+
readonly kind: 'unsafe';
|
|
29
|
+
readonly reason: string;
|
|
30
|
+
};
|
|
31
|
+
export interface NoodleBinaryInspection {
|
|
32
|
+
readonly expectedBinDir: string;
|
|
33
|
+
readonly binPath: string;
|
|
34
|
+
readonly status: BinaryStatus;
|
|
35
|
+
}
|
|
36
|
+
/** Inspect the expected global `noodle` binary and classify it. Never mutates anything. */
|
|
37
|
+
export declare function inspectNoodleBinary(deps?: BinaryProbeDeps): NoodleBinaryInspection;
|
|
38
|
+
//# sourceMappingURL=update-binary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-binary.d.ts","sourceRoot":"","sources":["../src/update-binary.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAExF,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3C,iFAAiF;IACjF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,yFAAyF;AACzF,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAM,GACzD,eAAe,CAoCjB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC3B,mGAAmG;GACjG;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC9D,2FAA2F;GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC3D,sFAAsF;GACpF;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CAC/B;AAsBD,2FAA2F;AAC3F,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,eAAuC,GAC5C,sBAAsB,CAIxB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary ownership resolver for `noodle update` repair (#242, ADR 0118).
|
|
3
|
+
*
|
|
4
|
+
* npm's `EEXIST .../bin/noodle` failure happens before any of our code runs, so
|
|
5
|
+
* `noodle update` inspects the expected global bin path itself: does a `noodle`
|
|
6
|
+
* binary exist there, is it a symlink, where does it resolve, and is that target
|
|
7
|
+
* provably a Noodle CLI install? Classification is deliberately conservative:
|
|
8
|
+
*
|
|
9
|
+
* - SAFE to repair: a symlink into an `@noodleseed/one` (or legacy `noodleseed-cli`)
|
|
10
|
+
* package outside the active prefix, a dangling symlink, or a launcher file that
|
|
11
|
+
* provably references a Noodle CLI package.
|
|
12
|
+
* - UNSAFE: everything else — real files of unknown content, symlinks into other
|
|
13
|
+
* packages or arbitrary files, unreadable paths. Ambiguous is always UNSAFE.
|
|
14
|
+
*
|
|
15
|
+
* All probes are dependency-injected (fs + execPath) so every classification case
|
|
16
|
+
* is unit-testable against temp prefixes, never the developer's real global prefix.
|
|
17
|
+
*/
|
|
18
|
+
import { lstatSync, readFileSync, readlinkSync, realpathSync } from 'node:fs';
|
|
19
|
+
import { dirname, isAbsolute, join, resolve, sep } from 'node:path';
|
|
20
|
+
/** Real-filesystem probes; `execPath` is overridable so tests point at a temp prefix. */
|
|
21
|
+
export function realBinaryProbeDeps(overrides = {}) {
|
|
22
|
+
return {
|
|
23
|
+
execPath: overrides.execPath ?? process.execPath,
|
|
24
|
+
lstatKind: (path) => {
|
|
25
|
+
try {
|
|
26
|
+
const stat = lstatSync(path);
|
|
27
|
+
if (stat.isSymbolicLink())
|
|
28
|
+
return 'symlink';
|
|
29
|
+
if (stat.isFile())
|
|
30
|
+
return 'file';
|
|
31
|
+
if (stat.isDirectory())
|
|
32
|
+
return 'dir';
|
|
33
|
+
return 'other';
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return error.code === 'ENOENT' ? 'missing' : 'error';
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
readlink: (path) => {
|
|
40
|
+
try {
|
|
41
|
+
return readlinkSync(path);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
realpath: (path) => {
|
|
48
|
+
try {
|
|
49
|
+
return realpathSync(path);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
readFileHead: (path) => {
|
|
56
|
+
try {
|
|
57
|
+
return readFileSync(path, 'utf8').slice(0, 4096);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** The npm-installed package directory of the current CLI. */
|
|
66
|
+
const CURRENT_PACKAGE_PATH = join('node_modules', '@noodleseed', 'one');
|
|
67
|
+
/** Known previous Noodle CLI installs (also safe to replace, but never "active"). */
|
|
68
|
+
const LEGACY_PACKAGE_PATHS = [join('node_modules', 'noodleseed-cli')];
|
|
69
|
+
function containsPackagePath(path, packagePath) {
|
|
70
|
+
return path.includes(`${sep}${packagePath}${sep}`) || path.endsWith(`${sep}${packagePath}`);
|
|
71
|
+
}
|
|
72
|
+
function isCurrentPackagePath(path) {
|
|
73
|
+
return containsPackagePath(path, CURRENT_PACKAGE_PATH);
|
|
74
|
+
}
|
|
75
|
+
function isOwnedPackagePath(path) {
|
|
76
|
+
return (isCurrentPackagePath(path) ||
|
|
77
|
+
LEGACY_PACKAGE_PATHS.some((legacy) => containsPackagePath(path, legacy)));
|
|
78
|
+
}
|
|
79
|
+
/** Inspect the expected global `noodle` binary and classify it. Never mutates anything. */
|
|
80
|
+
export function inspectNoodleBinary(deps = realBinaryProbeDeps()) {
|
|
81
|
+
const expectedBinDir = dirname(deps.execPath);
|
|
82
|
+
const binPath = join(expectedBinDir, 'noodle');
|
|
83
|
+
return { expectedBinDir, binPath, status: classify(deps, expectedBinDir, binPath) };
|
|
84
|
+
}
|
|
85
|
+
function classify(deps, expectedBinDir, binPath) {
|
|
86
|
+
switch (deps.lstatKind(binPath)) {
|
|
87
|
+
case 'missing':
|
|
88
|
+
return { kind: 'none' };
|
|
89
|
+
case 'error':
|
|
90
|
+
return { kind: 'unsafe', reason: 'the existing binary could not be inspected' };
|
|
91
|
+
case 'dir':
|
|
92
|
+
case 'other':
|
|
93
|
+
return { kind: 'unsafe', reason: 'the path is not a regular file or symlink' };
|
|
94
|
+
case 'symlink':
|
|
95
|
+
return classifySymlink(deps, expectedBinDir, binPath);
|
|
96
|
+
case 'file':
|
|
97
|
+
return classifyFile(deps, binPath);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function classifySymlink(deps, expectedBinDir, binPath) {
|
|
101
|
+
const link = deps.readlink(binPath);
|
|
102
|
+
if (link === undefined)
|
|
103
|
+
return { kind: 'unsafe', reason: 'the symlink could not be read' };
|
|
104
|
+
const linkTarget = isAbsolute(link) ? link : resolve(dirname(binPath), link);
|
|
105
|
+
const real = deps.realpath(binPath);
|
|
106
|
+
if (real === undefined) {
|
|
107
|
+
// Dangling symlink: removing it cannot destroy anything.
|
|
108
|
+
return { kind: 'safe-repair', reason: `broken symlink to ${linkTarget}` };
|
|
109
|
+
}
|
|
110
|
+
if (isOwnedPackagePath(real) || isOwnedPackagePath(linkTarget)) {
|
|
111
|
+
// Only the current package inside the active prefix is npm-updatable in place;
|
|
112
|
+
// a legacy package's bin (any prefix) still blocks `npm install -g @noodleseed/one`.
|
|
113
|
+
if (isCurrentPackagePath(real)) {
|
|
114
|
+
// Canonicalize the active prefix too (macOS tmp dirs resolve through /private).
|
|
115
|
+
const prefixDir = dirname(expectedBinDir);
|
|
116
|
+
const prefix = deps.realpath(prefixDir) ?? prefixDir;
|
|
117
|
+
if (real.startsWith(`${prefix}${sep}`)) {
|
|
118
|
+
return { kind: 'active-install', target: real };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
kind: 'safe-repair',
|
|
123
|
+
reason: `symlink into a Noodle CLI install that npm cannot update in place (${real})`,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
kind: 'unsafe',
|
|
128
|
+
reason: `the symlink resolves to ${real}, which is not a Noodle CLI install`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function classifyFile(deps, binPath) {
|
|
132
|
+
const head = deps.readFileHead(binPath);
|
|
133
|
+
if (head === undefined)
|
|
134
|
+
return { kind: 'unsafe', reason: 'the existing file is unreadable' };
|
|
135
|
+
// npm launcher shims (Windows-style .cmd/.ps1 or sh) embed the package path they run.
|
|
136
|
+
if (head.includes('@noodleseed/one') || head.includes('noodleseed-cli')) {
|
|
137
|
+
return { kind: 'safe-repair', reason: 'launcher script for a previous Noodle CLI install' };
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
kind: 'unsafe',
|
|
141
|
+
reason: 'the existing file is not known to be owned by @noodleseed/one',
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=update-binary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-binary.js","sourceRoot":"","sources":["../src/update-binary.ts"],"names":[],"mappings":"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"}
|