@jentrix/cli 0.5.7 → 0.5.9
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/main.js +67 -11
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -20962,7 +20962,7 @@ function refreshAccessToken(input) {
|
|
|
20962
20962
|
|
|
20963
20963
|
// src/client.ts
|
|
20964
20964
|
var CLI_NAME = "stacks-cli";
|
|
20965
|
-
var CLI_VERSION = "0.5.
|
|
20965
|
+
var CLI_VERSION = "0.5.9";
|
|
20966
20966
|
var DEAD_TOKEN_MESSAGE = "authentication failed (HTTP 401): the token is dead or expired \u2014 mint a new PAT at /account/tokens on your Jentrix server and update STACKS_TOKEN (or --token / the config file).";
|
|
20967
20967
|
var RELOGIN_MESSAGE = "OAuth session expired and could not be refreshed \u2014 run `jentrix login` to sign in again.";
|
|
20968
20968
|
function originOf2(url2) {
|
|
@@ -21117,6 +21117,17 @@ function execTarget(file, args, platform2 = process.platform, comSpec = process.
|
|
|
21117
21117
|
options: { windowsVerbatimArguments: true }
|
|
21118
21118
|
};
|
|
21119
21119
|
}
|
|
21120
|
+
function browserTarget(url2, platform2 = process.platform, comSpec = process.env.ComSpec) {
|
|
21121
|
+
if (platform2 === "darwin") return { file: "open", args: [url2], options: {} };
|
|
21122
|
+
if (platform2 !== "win32") {
|
|
21123
|
+
return { file: "xdg-open", args: [url2], options: {} };
|
|
21124
|
+
}
|
|
21125
|
+
return {
|
|
21126
|
+
file: comSpec || "cmd.exe",
|
|
21127
|
+
args: ["/d", "/s", "/c", `"start "" ${quoteForCmd(url2)}"`],
|
|
21128
|
+
options: { windowsVerbatimArguments: true }
|
|
21129
|
+
};
|
|
21130
|
+
}
|
|
21120
21131
|
|
|
21121
21132
|
// src/loopback.ts
|
|
21122
21133
|
import { createServer } from "node:http";
|
|
@@ -21185,11 +21196,13 @@ async function bindLoopback(ports, timeoutMs = CALLBACK_TIMEOUT_MS) {
|
|
|
21185
21196
|
}
|
|
21186
21197
|
function openBrowser(url2) {
|
|
21187
21198
|
return new Promise((resolve5) => {
|
|
21188
|
-
const
|
|
21189
|
-
const cmd = os === "darwin" ? "open" : os === "win32" ? "cmd" : "xdg-open";
|
|
21190
|
-
const args = os === "win32" ? ["/c", "start", "", url2] : [url2];
|
|
21199
|
+
const { file, args, options } = browserTarget(url2, platform());
|
|
21191
21200
|
try {
|
|
21192
|
-
const child = spawn(
|
|
21201
|
+
const child = spawn(file, args, {
|
|
21202
|
+
stdio: "ignore",
|
|
21203
|
+
detached: true,
|
|
21204
|
+
...options
|
|
21205
|
+
});
|
|
21193
21206
|
child.on("error", () => resolve5());
|
|
21194
21207
|
child.unref();
|
|
21195
21208
|
} catch {
|
|
@@ -27900,18 +27913,39 @@ var NPM_INSTALL_TIMEOUT_MS2 = 3e5;
|
|
|
27900
27913
|
var SUPERSEDED = ["@jentrix/stacks-cli", "@jentrix/stacks-runner"];
|
|
27901
27914
|
var CLI_SPEC = `@jentrix/cli@${CLI_VERSION}`;
|
|
27902
27915
|
var RUNNER_SPEC2 = `@jentrix/runner@${CLI_VERSION}`;
|
|
27916
|
+
function compareVersions(a, b) {
|
|
27917
|
+
const parts = (v) => {
|
|
27918
|
+
const m = /^(\d+)\.(\d+)\.(\d+)/.exec(v.trim());
|
|
27919
|
+
return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : [0, 0, 0];
|
|
27920
|
+
};
|
|
27921
|
+
const [x, y] = [parts(a), parts(b)];
|
|
27922
|
+
for (let i = 0; i < 3; i++) {
|
|
27923
|
+
if (x[i] !== y[i]) return x[i] - y[i];
|
|
27924
|
+
}
|
|
27925
|
+
return 0;
|
|
27926
|
+
}
|
|
27903
27927
|
function say(deps2, text = "") {
|
|
27904
27928
|
deps2.writeOut(text);
|
|
27905
27929
|
}
|
|
27906
27930
|
async function installToolchain(deps2) {
|
|
27907
27931
|
const npm = await deps2.resolveNpm();
|
|
27908
27932
|
let global = await deps2.globalInstall();
|
|
27909
|
-
|
|
27933
|
+
const installedVersion = global.cliVersion;
|
|
27934
|
+
const behind = global.cliDir !== null && (installedVersion === null || compareVersions(installedVersion, CLI_VERSION) < 0);
|
|
27935
|
+
const upgradable = behind && !global.runningFromGlobal;
|
|
27936
|
+
if (global.cliDir && !upgradable) {
|
|
27910
27937
|
say(
|
|
27911
27938
|
deps2,
|
|
27912
|
-
`jentrix ${
|
|
27939
|
+
`jentrix ${installedVersion ?? "(unreadable version)"} is already installed (${global.cliDir}).`
|
|
27913
27940
|
);
|
|
27914
|
-
|
|
27941
|
+
if (behind) {
|
|
27942
|
+
say(deps2, ` ${CLI_VERSION} is available \u2014 upgrade with:`);
|
|
27943
|
+
say(deps2, ` npm install -g ${CLI_SPEC} ${RUNNER_SPEC2}`);
|
|
27944
|
+
} else if (installedVersion && compareVersions(installedVersion, CLI_VERSION) > 0) {
|
|
27945
|
+
say(deps2, ` Newer than this ${CLI_VERSION} runner \u2014 left alone.`);
|
|
27946
|
+
} else {
|
|
27947
|
+
say(deps2, " Upgrade it any time with: npm update -g @jentrix/cli");
|
|
27948
|
+
}
|
|
27915
27949
|
} else {
|
|
27916
27950
|
if (!npm) {
|
|
27917
27951
|
deps2.writeErr(
|
|
@@ -27920,7 +27954,10 @@ async function installToolchain(deps2) {
|
|
|
27920
27954
|
return EXIT_CODES.INVALID_INPUT;
|
|
27921
27955
|
}
|
|
27922
27956
|
await deps2.invoke(npm, ["rm", "-g", ...SUPERSEDED], void 0, 6e4);
|
|
27923
|
-
say(
|
|
27957
|
+
say(
|
|
27958
|
+
deps2,
|
|
27959
|
+
upgradable ? `Upgrading jentrix ${installedVersion ?? "?"} \u2192 ${CLI_VERSION} (npm -g)\u2026` : `Installing ${CLI_SPEC} + ${RUNNER_SPEC2} (npm -g)\u2026`
|
|
27960
|
+
);
|
|
27924
27961
|
const installed = await deps2.invoke(
|
|
27925
27962
|
npm,
|
|
27926
27963
|
["install", "-g", CLI_SPEC, RUNNER_SPEC2],
|
|
@@ -27944,7 +27981,10 @@ async function installToolchain(deps2) {
|
|
|
27944
27981
|
);
|
|
27945
27982
|
return EXIT_CODES.INTERNAL;
|
|
27946
27983
|
}
|
|
27947
|
-
say(
|
|
27984
|
+
say(
|
|
27985
|
+
deps2,
|
|
27986
|
+
upgradable ? `Upgraded to ${global.cliVersion ?? CLI_VERSION}.` : "Installed the CLI and the session runner."
|
|
27987
|
+
);
|
|
27948
27988
|
}
|
|
27949
27989
|
if (!global.runnerDir) {
|
|
27950
27990
|
if (!npm) {
|
|
@@ -28863,12 +28903,28 @@ registerSetupCommand(
|
|
|
28863
28903
|
const candidate = join6(root, "@jentrix", name);
|
|
28864
28904
|
return existsSync6(join6(candidate, "package.json")) ? candidate : null;
|
|
28865
28905
|
};
|
|
28906
|
+
const cliDir = dir("cli");
|
|
28907
|
+
const versionOf = (packageDir) => {
|
|
28908
|
+
if (!packageDir) return null;
|
|
28909
|
+
try {
|
|
28910
|
+
const raw = readFileSync7(join6(packageDir, "package.json"), "utf8");
|
|
28911
|
+
const parsed = JSON.parse(raw);
|
|
28912
|
+
const value = typeof parsed === "object" && parsed !== null ? parsed.version : void 0;
|
|
28913
|
+
return typeof value === "string" ? value : null;
|
|
28914
|
+
} catch {
|
|
28915
|
+
return null;
|
|
28916
|
+
}
|
|
28917
|
+
};
|
|
28866
28918
|
return {
|
|
28867
|
-
cliDir
|
|
28919
|
+
cliDir,
|
|
28920
|
+
cliVersion: versionOf(cliDir),
|
|
28868
28921
|
runnerDir: dir("runner"),
|
|
28869
28922
|
binDir,
|
|
28870
28923
|
binDirOnPath: Boolean(
|
|
28871
28924
|
binDir && (process.env.PATH ?? "").split(delimiter2).some((entry) => entry && resolve4(entry) === resolve4(binDir))
|
|
28925
|
+
),
|
|
28926
|
+
runningFromGlobal: Boolean(
|
|
28927
|
+
cliDir && resolve4(cliDir) === resolve4(PACKAGE_ROOT)
|
|
28872
28928
|
)
|
|
28873
28929
|
};
|
|
28874
28930
|
},
|