@keystrokehq/cli 0.0.161 → 0.0.162
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/discovery-DV7FkTRA-JYiC_9cY.mjs +71 -0
- package/dist/discovery-DV7FkTRA-JYiC_9cY.mjs.map +1 -0
- package/dist/{dist-BtAPGWUl.mjs → dist-DaxU7U68.mjs} +4 -4
- package/dist/{dist-BtAPGWUl.mjs.map → dist-DaxU7U68.mjs.map} +1 -1
- package/dist/{dist-QTvT7Ltb.mjs → dist-DlKPt1x2.mjs} +4 -3
- package/dist/{dist-QTvT7Ltb.mjs.map → dist-DlKPt1x2.mjs.map} +1 -1
- package/dist/{dist-C12M6Kul.mjs → dist-VxvEaDUL.mjs} +2 -2
- package/dist/{dist-C12M6Kul.mjs.map → dist-VxvEaDUL.mjs.map} +1 -1
- package/dist/index.mjs +10 -87
- package/dist/index.mjs.map +1 -1
- package/dist/maybe-auto-update-0abXnfw7.mjs +408 -0
- package/dist/maybe-auto-update-0abXnfw7.mjs.map +1 -0
- package/dist/{discovery-DV7FkTRA-BFmtZG9u.mjs → schemas-Bq8SXmZk.mjs} +2 -69
- package/dist/schemas-Bq8SXmZk.mjs.map +1 -0
- package/dist/{version-DESgLEkE.mjs → version-MB0r46Z4.mjs} +81 -2
- package/dist/version-MB0r46Z4.mjs.map +1 -0
- package/dist/{walk-project-171B4cvO-DJy3qZKd.mjs → walk-project-171B4cvO-DKtupJ6Z.mjs} +2 -2
- package/dist/{walk-project-171B4cvO-DJy3qZKd.mjs.map → walk-project-171B4cvO-DKtupJ6Z.mjs.map} +1 -1
- package/package.json +4 -4
- package/dist/discovery-DV7FkTRA-BFmtZG9u.mjs.map +0 -1
- package/dist/maybe-auto-update-DCsPT080.mjs +0 -247
- package/dist/maybe-auto-update-DCsPT080.mjs.map +0 -1
- package/dist/version-DESgLEkE.mjs.map +0 -1
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { r as detectPackageManager, s as resolveCliRoot, t as readCliVersion } from "./version-DESgLEkE.mjs";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
|
-
import { existsSync, realpathSync } from "node:fs";
|
|
5
|
-
import { spawnSync } from "node:child_process";
|
|
6
|
-
//#region src/update/build-update-command.ts
|
|
7
|
-
const PACKAGE_NAME = "@keystrokehq/cli@latest";
|
|
8
|
-
function buildUpdateCommand(install) {
|
|
9
|
-
const { kind, packageManager } = install;
|
|
10
|
-
if (kind === "global") switch (packageManager) {
|
|
11
|
-
case "pnpm": return {
|
|
12
|
-
command: "pnpm",
|
|
13
|
-
args: [
|
|
14
|
-
"add",
|
|
15
|
-
"-g",
|
|
16
|
-
PACKAGE_NAME
|
|
17
|
-
]
|
|
18
|
-
};
|
|
19
|
-
case "yarn": return {
|
|
20
|
-
command: "yarn",
|
|
21
|
-
args: [
|
|
22
|
-
"global",
|
|
23
|
-
"add",
|
|
24
|
-
PACKAGE_NAME
|
|
25
|
-
]
|
|
26
|
-
};
|
|
27
|
-
case "bun": return {
|
|
28
|
-
command: "bun",
|
|
29
|
-
args: [
|
|
30
|
-
"add",
|
|
31
|
-
"-g",
|
|
32
|
-
PACKAGE_NAME
|
|
33
|
-
]
|
|
34
|
-
};
|
|
35
|
-
default: return {
|
|
36
|
-
command: "npm",
|
|
37
|
-
args: [
|
|
38
|
-
"install",
|
|
39
|
-
"-g",
|
|
40
|
-
PACKAGE_NAME
|
|
41
|
-
]
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
const cwd = install.projectRoot;
|
|
45
|
-
switch (packageManager) {
|
|
46
|
-
case "pnpm": return {
|
|
47
|
-
command: "pnpm",
|
|
48
|
-
args: [
|
|
49
|
-
"add",
|
|
50
|
-
"-D",
|
|
51
|
-
PACKAGE_NAME
|
|
52
|
-
],
|
|
53
|
-
cwd
|
|
54
|
-
};
|
|
55
|
-
case "yarn": return {
|
|
56
|
-
command: "yarn",
|
|
57
|
-
args: [
|
|
58
|
-
"add",
|
|
59
|
-
"-D",
|
|
60
|
-
PACKAGE_NAME
|
|
61
|
-
],
|
|
62
|
-
cwd
|
|
63
|
-
};
|
|
64
|
-
case "bun": return {
|
|
65
|
-
command: "bun",
|
|
66
|
-
args: [
|
|
67
|
-
"add",
|
|
68
|
-
"-D",
|
|
69
|
-
PACKAGE_NAME
|
|
70
|
-
],
|
|
71
|
-
cwd
|
|
72
|
-
};
|
|
73
|
-
default: return {
|
|
74
|
-
command: "npm",
|
|
75
|
-
args: [
|
|
76
|
-
"install",
|
|
77
|
-
"-D",
|
|
78
|
-
PACKAGE_NAME
|
|
79
|
-
],
|
|
80
|
-
cwd
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
//#endregion
|
|
85
|
-
//#region src/update/compare-version.ts
|
|
86
|
-
function parseVersion(version) {
|
|
87
|
-
const [major = 0, minor = 0, patch = 0] = (version.trim().replace(/^v/, "").split("-")[0] ?? "").split(".").map((part) => {
|
|
88
|
-
const value = Number.parseInt(part, 10);
|
|
89
|
-
return Number.isFinite(value) ? value : 0;
|
|
90
|
-
});
|
|
91
|
-
return [
|
|
92
|
-
major,
|
|
93
|
-
minor,
|
|
94
|
-
patch
|
|
95
|
-
];
|
|
96
|
-
}
|
|
97
|
-
function isNewerVersion(latest, current) {
|
|
98
|
-
const [latestMajor, latestMinor, latestPatch] = parseVersion(latest);
|
|
99
|
-
const [currentMajor, currentMinor, currentPatch] = parseVersion(current);
|
|
100
|
-
if (latestMajor !== currentMajor) return latestMajor > currentMajor;
|
|
101
|
-
if (latestMinor !== currentMinor) return latestMinor > currentMinor;
|
|
102
|
-
return latestPatch > currentPatch;
|
|
103
|
-
}
|
|
104
|
-
//#endregion
|
|
105
|
-
//#region src/update/detect-cli-install.ts
|
|
106
|
-
function realpathSafe(path) {
|
|
107
|
-
try {
|
|
108
|
-
return realpathSync(path);
|
|
109
|
-
} catch {
|
|
110
|
-
return path;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
function detectManagerFromLockfile(dir) {
|
|
114
|
-
if (existsSync(join(dir, "pnpm-lock.yaml"))) return "pnpm";
|
|
115
|
-
if (existsSync(join(dir, "bun.lockb")) || existsSync(join(dir, "bun.lock"))) return "bun";
|
|
116
|
-
if (existsSync(join(dir, "yarn.lock"))) return "yarn";
|
|
117
|
-
if (existsSync(join(dir, "package-lock.json"))) return "npm";
|
|
118
|
-
}
|
|
119
|
-
function findLocalProjectRoot(packageRoot) {
|
|
120
|
-
const normalizedRoot = realpathSafe(packageRoot);
|
|
121
|
-
let dir = dirname(packageRoot);
|
|
122
|
-
while (dir !== dirname(dir)) {
|
|
123
|
-
const installedCliPath = join(dir, "node_modules", "@keystrokehq", "cli");
|
|
124
|
-
if (existsSync(join(dir, "package.json")) && realpathSafe(installedCliPath) === normalizedRoot) return dir;
|
|
125
|
-
dir = dirname(dir);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
function globalRootForManager(manager) {
|
|
129
|
-
const { command, args } = {
|
|
130
|
-
pnpm: {
|
|
131
|
-
command: "pnpm",
|
|
132
|
-
args: ["root", "-g"]
|
|
133
|
-
},
|
|
134
|
-
npm: {
|
|
135
|
-
command: "npm",
|
|
136
|
-
args: ["root", "-g"]
|
|
137
|
-
},
|
|
138
|
-
yarn: {
|
|
139
|
-
command: "yarn",
|
|
140
|
-
args: ["global", "dir"]
|
|
141
|
-
},
|
|
142
|
-
bun: {
|
|
143
|
-
command: "bun",
|
|
144
|
-
args: ["pm", "bin"]
|
|
145
|
-
}
|
|
146
|
-
}[manager];
|
|
147
|
-
const result = spawnSync(command, args, { encoding: "utf8" });
|
|
148
|
-
if (result.status !== 0) return;
|
|
149
|
-
const root = result.stdout.trim();
|
|
150
|
-
return root ? realpathSafe(root) : void 0;
|
|
151
|
-
}
|
|
152
|
-
function detectGlobalManager(packageRoot) {
|
|
153
|
-
const normalizedRoot = realpathSafe(packageRoot);
|
|
154
|
-
if (normalizedRoot.includes(`${join("", ".pnpm")}`)) return "pnpm";
|
|
155
|
-
for (const manager of [
|
|
156
|
-
"pnpm",
|
|
157
|
-
"npm",
|
|
158
|
-
"yarn",
|
|
159
|
-
"bun"
|
|
160
|
-
]) {
|
|
161
|
-
const globalRoot = globalRootForManager(manager);
|
|
162
|
-
if (globalRoot && normalizedRoot.startsWith(globalRoot)) return manager;
|
|
163
|
-
}
|
|
164
|
-
if (process.env.PNPM_HOME) return "pnpm";
|
|
165
|
-
return detectPackageManager();
|
|
166
|
-
}
|
|
167
|
-
function detectCliInstall(packageRoot) {
|
|
168
|
-
const normalizedRoot = realpathSafe(packageRoot);
|
|
169
|
-
const projectRoot = findLocalProjectRoot(normalizedRoot);
|
|
170
|
-
if (projectRoot) return {
|
|
171
|
-
kind: "local",
|
|
172
|
-
packageManager: detectManagerFromLockfile(projectRoot) ?? detectPackageManager(),
|
|
173
|
-
packageRoot: normalizedRoot,
|
|
174
|
-
projectRoot
|
|
175
|
-
};
|
|
176
|
-
return {
|
|
177
|
-
kind: "global",
|
|
178
|
-
packageManager: detectGlobalManager(normalizedRoot),
|
|
179
|
-
packageRoot: normalizedRoot
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
//#endregion
|
|
183
|
-
//#region src/update/fetch-latest-version.ts
|
|
184
|
-
const REGISTRY_URL = "https://registry.npmjs.org/@keystrokehq%2Fcli";
|
|
185
|
-
const REQUEST_TIMEOUT_MS = 3e3;
|
|
186
|
-
async function fetchLatestCliVersion() {
|
|
187
|
-
const controller = new AbortController();
|
|
188
|
-
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
189
|
-
try {
|
|
190
|
-
const response = await fetch(REGISTRY_URL, {
|
|
191
|
-
signal: controller.signal,
|
|
192
|
-
headers: { Accept: "application/json" }
|
|
193
|
-
});
|
|
194
|
-
if (!response.ok) return;
|
|
195
|
-
return (await response.json())["dist-tags"]?.latest?.trim() || void 0;
|
|
196
|
-
} catch {
|
|
197
|
-
return;
|
|
198
|
-
} finally {
|
|
199
|
-
clearTimeout(timeout);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
//#endregion
|
|
203
|
-
//#region src/update/maybe-auto-update.ts
|
|
204
|
-
function shouldSkipAutoUpdate(argv) {
|
|
205
|
-
if (process.env.KEYSTROKE_DEV || process.env.KEYSTROKE_SKIP_UPDATE || process.env.KEYSTROKE_UPDATING) return true;
|
|
206
|
-
if (process.env.CI === "true" || process.env.CI === "1") return true;
|
|
207
|
-
const args = argv.slice(2);
|
|
208
|
-
if (args.length === 0) return false;
|
|
209
|
-
return args.every((arg) => arg === "-V" || arg === "--version" || arg === "-h" || arg === "--help" || arg.startsWith("-V"));
|
|
210
|
-
}
|
|
211
|
-
function runUpdate(install) {
|
|
212
|
-
if (!install) return false;
|
|
213
|
-
const { command, args, cwd } = buildUpdateCommand(install);
|
|
214
|
-
return spawnSync(command, args, {
|
|
215
|
-
cwd,
|
|
216
|
-
stdio: "inherit",
|
|
217
|
-
env: process.env
|
|
218
|
-
}).status === 0;
|
|
219
|
-
}
|
|
220
|
-
function reexecCli(argv) {
|
|
221
|
-
const result = spawnSync(process.execPath, argv.slice(1), {
|
|
222
|
-
stdio: "inherit",
|
|
223
|
-
env: {
|
|
224
|
-
...process.env,
|
|
225
|
-
KEYSTROKE_UPDATING: "1"
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
process.exit(result.status ?? 1);
|
|
229
|
-
}
|
|
230
|
-
async function maybeAutoUpdate(argv) {
|
|
231
|
-
if (shouldSkipAutoUpdate(argv)) return;
|
|
232
|
-
const install = detectCliInstall(resolveCliRoot(import.meta.url));
|
|
233
|
-
if (!install || install.kind === "local" && !install.projectRoot) return;
|
|
234
|
-
const currentVersion = readCliVersion();
|
|
235
|
-
const latestVersion = await fetchLatestCliVersion();
|
|
236
|
-
if (!latestVersion || !isNewerVersion(latestVersion, currentVersion)) return;
|
|
237
|
-
process.stderr.write(`Updating @keystrokehq/cli ${currentVersion} -> ${latestVersion} via ${install.packageManager}...\n`);
|
|
238
|
-
if (!runUpdate(install)) {
|
|
239
|
-
process.stderr.write("Auto-update failed; continuing with the current version.\n");
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
reexecCli(argv);
|
|
243
|
-
}
|
|
244
|
-
//#endregion
|
|
245
|
-
export { maybeAutoUpdate };
|
|
246
|
-
|
|
247
|
-
//# sourceMappingURL=maybe-auto-update-DCsPT080.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"maybe-auto-update-DCsPT080.mjs","names":[],"sources":["../src/update/build-update-command.ts","../src/update/compare-version.ts","../src/update/detect-cli-install.ts","../src/update/fetch-latest-version.ts","../src/update/maybe-auto-update.ts"],"sourcesContent":["import type { CliInstallInfo } from \"./detect-cli-install\";\n\nconst PACKAGE_NAME = \"@keystrokehq/cli@latest\";\n\nexport function buildUpdateCommand(install: CliInstallInfo): {\n command: string;\n args: string[];\n cwd?: string;\n} {\n const { kind, packageManager } = install;\n\n if (kind === \"global\") {\n switch (packageManager) {\n case \"pnpm\":\n return { command: \"pnpm\", args: [\"add\", \"-g\", PACKAGE_NAME] };\n case \"yarn\":\n return { command: \"yarn\", args: [\"global\", \"add\", PACKAGE_NAME] };\n case \"bun\":\n return { command: \"bun\", args: [\"add\", \"-g\", PACKAGE_NAME] };\n case \"npm\":\n default:\n return { command: \"npm\", args: [\"install\", \"-g\", PACKAGE_NAME] };\n }\n }\n\n const cwd = install.projectRoot;\n switch (packageManager) {\n case \"pnpm\":\n return { command: \"pnpm\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n case \"yarn\":\n return { command: \"yarn\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n case \"bun\":\n return { command: \"bun\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n case \"npm\":\n default:\n return { command: \"npm\", args: [\"install\", \"-D\", PACKAGE_NAME], cwd };\n }\n}\n","function parseVersion(version: string): [number, number, number] {\n const normalized = version.trim().replace(/^v/, \"\").split(\"-\")[0] ?? \"\";\n const [major = 0, minor = 0, patch = 0] = normalized.split(\".\").map((part) => {\n const value = Number.parseInt(part, 10);\n return Number.isFinite(value) ? value : 0;\n });\n\n return [major, minor, patch];\n}\n\nexport function isNewerVersion(latest: string, current: string): boolean {\n const [latestMajor, latestMinor, latestPatch] = parseVersion(latest);\n const [currentMajor, currentMinor, currentPatch] = parseVersion(current);\n\n if (latestMajor !== currentMajor) {\n return latestMajor > currentMajor;\n }\n\n if (latestMinor !== currentMinor) {\n return latestMinor > currentMinor;\n }\n\n return latestPatch > currentPatch;\n}\n","import { existsSync, realpathSync } from \"node:fs\";\nimport { spawnSync } from \"node:child_process\";\nimport { dirname, join } from \"node:path\";\n\nimport { detectPackageManager, type PackageManager } from \"../init/package-manager\";\n\nexport type CliInstallKind = \"global\" | \"local\";\n\nexport type CliInstallInfo = {\n kind: CliInstallKind;\n packageManager: PackageManager;\n packageRoot: string;\n projectRoot?: string;\n};\n\nfunction realpathSafe(path: string): string {\n try {\n return realpathSync(path);\n } catch {\n return path;\n }\n}\n\nfunction detectManagerFromLockfile(dir: string): PackageManager | undefined {\n if (existsSync(join(dir, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n }\n\n if (existsSync(join(dir, \"bun.lockb\")) || existsSync(join(dir, \"bun.lock\"))) {\n return \"bun\";\n }\n\n if (existsSync(join(dir, \"yarn.lock\"))) {\n return \"yarn\";\n }\n\n if (existsSync(join(dir, \"package-lock.json\"))) {\n return \"npm\";\n }\n\n return undefined;\n}\n\nfunction findLocalProjectRoot(packageRoot: string): string | undefined {\n const normalizedRoot = realpathSafe(packageRoot);\n let dir = dirname(packageRoot);\n\n while (dir !== dirname(dir)) {\n const installedCliPath = join(dir, \"node_modules\", \"@keystrokehq\", \"cli\");\n if (\n existsSync(join(dir, \"package.json\")) &&\n realpathSafe(installedCliPath) === normalizedRoot\n ) {\n return dir;\n }\n\n dir = dirname(dir);\n }\n\n return undefined;\n}\n\nfunction globalRootForManager(manager: PackageManager): string | undefined {\n const commands: Record<PackageManager, { command: string; args: string[] }> = {\n pnpm: { command: \"pnpm\", args: [\"root\", \"-g\"] },\n npm: { command: \"npm\", args: [\"root\", \"-g\"] },\n yarn: { command: \"yarn\", args: [\"global\", \"dir\"] },\n bun: { command: \"bun\", args: [\"pm\", \"bin\"] },\n };\n\n const { command, args } = commands[manager];\n const result = spawnSync(command, args, { encoding: \"utf8\" });\n\n if (result.status !== 0) {\n return undefined;\n }\n\n const root = result.stdout.trim();\n return root ? realpathSafe(root) : undefined;\n}\n\nfunction detectGlobalManager(packageRoot: string): PackageManager {\n const normalizedRoot = realpathSafe(packageRoot);\n\n if (normalizedRoot.includes(`${join(\"\", \".pnpm\")}`)) {\n return \"pnpm\";\n }\n\n for (const manager of [\"pnpm\", \"npm\", \"yarn\", \"bun\"] as const) {\n const globalRoot = globalRootForManager(manager);\n if (globalRoot && normalizedRoot.startsWith(globalRoot)) {\n return manager;\n }\n }\n\n if (process.env.PNPM_HOME) {\n return \"pnpm\";\n }\n\n return detectPackageManager();\n}\n\nexport function detectCliInstall(packageRoot: string): CliInstallInfo | undefined {\n const normalizedRoot = realpathSafe(packageRoot);\n const projectRoot = findLocalProjectRoot(normalizedRoot);\n\n if (projectRoot) {\n const packageManager = detectManagerFromLockfile(projectRoot) ?? detectPackageManager();\n\n return {\n kind: \"local\",\n packageManager,\n packageRoot: normalizedRoot,\n projectRoot,\n };\n }\n\n return {\n kind: \"global\",\n packageManager: detectGlobalManager(normalizedRoot),\n packageRoot: normalizedRoot,\n };\n}\n","const REGISTRY_URL = \"https://registry.npmjs.org/@keystrokehq%2Fcli\";\nconst REQUEST_TIMEOUT_MS = 3_000;\n\ntype RegistryPackage = {\n \"dist-tags\"?: {\n latest?: string;\n };\n};\n\nexport async function fetchLatestCliVersion(): Promise<string | undefined> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n try {\n const response = await fetch(REGISTRY_URL, {\n signal: controller.signal,\n headers: {\n Accept: \"application/json\",\n },\n });\n\n if (!response.ok) {\n return undefined;\n }\n\n const payload = (await response.json()) as RegistryPackage;\n const latest = payload[\"dist-tags\"]?.latest?.trim();\n return latest || undefined;\n } catch {\n return undefined;\n } finally {\n clearTimeout(timeout);\n }\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { readCliVersion } from \"../version\";\nimport { buildUpdateCommand } from \"./build-update-command\";\nimport { isNewerVersion } from \"./compare-version\";\nimport { detectCliInstall } from \"./detect-cli-install\";\nimport { fetchLatestCliVersion } from \"./fetch-latest-version\";\n\nfunction shouldSkipAutoUpdate(argv: string[]): boolean {\n if (\n process.env.KEYSTROKE_DEV ||\n process.env.KEYSTROKE_SKIP_UPDATE ||\n process.env.KEYSTROKE_UPDATING\n ) {\n return true;\n }\n\n if (process.env.CI === \"true\" || process.env.CI === \"1\") {\n return true;\n }\n\n const args = argv.slice(2);\n if (args.length === 0) {\n return false;\n }\n\n return args.every(\n (arg) =>\n arg === \"-V\" ||\n arg === \"--version\" ||\n arg === \"-h\" ||\n arg === \"--help\" ||\n arg.startsWith(\"-V\"),\n );\n}\n\nfunction runUpdate(install: ReturnType<typeof detectCliInstall>): boolean {\n if (!install) {\n return false;\n }\n\n const { command, args, cwd } = buildUpdateCommand(install);\n const result = spawnSync(command, args, {\n cwd,\n stdio: \"inherit\",\n env: process.env,\n });\n\n return result.status === 0;\n}\n\nfunction reexecCli(argv: string[]): never {\n const result = spawnSync(process.execPath, argv.slice(1), {\n stdio: \"inherit\",\n env: {\n ...process.env,\n KEYSTROKE_UPDATING: \"1\",\n },\n });\n\n process.exit(result.status ?? 1);\n}\n\nexport async function maybeAutoUpdate(argv: string[]): Promise<void> {\n if (shouldSkipAutoUpdate(argv)) {\n return;\n }\n\n const install = detectCliInstall(resolveCliRoot(import.meta.url));\n if (!install || (install.kind === \"local\" && !install.projectRoot)) {\n return;\n }\n\n const currentVersion = readCliVersion();\n const latestVersion = await fetchLatestCliVersion();\n\n if (!latestVersion || !isNewerVersion(latestVersion, currentVersion)) {\n return;\n }\n\n process.stderr.write(\n `Updating @keystrokehq/cli ${currentVersion} -> ${latestVersion} via ${install.packageManager}...\\n`,\n );\n\n if (!runUpdate(install)) {\n process.stderr.write(\"Auto-update failed; continuing with the current version.\\n\");\n return;\n }\n\n reexecCli(argv);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version-DESgLEkE.mjs","names":[],"sources":["../src/project/resolve-cli-root.ts","../src/init/package-manager.ts","../src/version.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction isCliPackage(dir: string): boolean {\n const packageJsonPath = join(dir, \"package.json\");\n if (!existsSync(packageJsonPath)) {\n return false;\n }\n\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { name?: string };\n return pkg.name === \"@keystrokehq/cli\";\n}\n\nexport function resolveCliRoot(fromModuleUrl: string): string {\n let dir = dirname(fileURLToPath(fromModuleUrl));\n\n while (dir !== dirname(dir)) {\n if (isCliPackage(dir)) {\n return dir;\n }\n\n dir = dirname(dir);\n }\n\n throw new Error(\"Could not resolve keystroke CLI package root\");\n}\n","import { spawnSync } from \"node:child_process\";\n\nexport type PackageManager = \"npm\" | \"pnpm\" | \"yarn\" | \"bun\";\n\nconst MANAGERS: PackageManager[] = [\"pnpm\", \"npm\", \"yarn\", \"bun\"];\n\nexport function detectPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? \"\";\n\n for (const manager of MANAGERS) {\n if (userAgent.startsWith(manager)) {\n return manager;\n }\n }\n\n if (process.env.PNPM_HOME) {\n return \"pnpm\";\n }\n\n return \"npm\";\n}\n\nexport function resolvePackageManager(explicit?: string): PackageManager {\n if (!explicit) {\n return detectPackageManager();\n }\n\n const normalized = explicit.trim().toLowerCase();\n if (!MANAGERS.includes(normalized as PackageManager)) {\n throw new Error(`Unsupported package manager \"${explicit}\". Use npm, pnpm, yarn, or bun.`);\n }\n\n return normalized as PackageManager;\n}\n\n/** Resolve GitHub Packages auth for @keystrokehq/* when NODE_AUTH_TOKEN is unset. */\nexport function resolveGithubPackagesToken(): string | undefined {\n if (process.env.NODE_AUTH_TOKEN) {\n return process.env.NODE_AUTH_TOKEN;\n }\n\n for (const key of [\"GITHUB_TOKEN\", \"GH_TOKEN\"] as const) {\n const value = process.env[key];\n if (value) {\n return value;\n }\n }\n\n const gh = spawnSync(\"gh\", [\"auth\", \"token\"], { encoding: \"utf8\" });\n if (gh.status === 0) {\n const token = gh.stdout.trim();\n if (token) {\n return token;\n }\n }\n\n return undefined;\n}\n\nexport function installDependencies(cwd: string, manager: PackageManager): void {\n const token = resolveGithubPackagesToken();\n const env = token ? { ...process.env, NODE_AUTH_TOKEN: token } : process.env;\n\n const result = spawnSync(manager, [\"install\"], {\n cwd,\n stdio: \"inherit\",\n env,\n });\n\n if (result.status !== 0) {\n throw new Error(`${manager} install failed`);\n }\n}\n\nexport function installPlaygroundDependencies(cwd: string): void {\n const result = spawnSync(\"pnpm\", [\"install\", \"--ignore-workspace\"], {\n cwd,\n stdio: \"inherit\",\n env: process.env,\n });\n\n if (result.status !== 0) {\n throw new Error(\"pnpm install failed\");\n }\n}\n\n/**\n * Build every workspace package so the playground's `link:` deps resolve to\n * compiled `dist/`. Without this, `keystroke dev` fails with\n * `ERR_MODULE_NOT_FOUND` against whichever package was never built. Turbo\n * caches, so this is only slow on the first run.\n */\nexport function buildPlaygroundWorkspace(monorepoRoot: string): void {\n // Build with a clean Node env: the `keystroke-dev` wrapper sets\n // NODE_OPTIONS=--conditions=development, which would make tsdown/turbo resolve\n // their own deps to src/ and fail. Dropping NODE_OPTIONS builds to dist/ normally.\n const { NODE_OPTIONS: _drop, ...buildEnv } = process.env;\n const result = spawnSync(\"pnpm\", [\"run\", \"build\"], {\n cwd: monorepoRoot,\n stdio: \"inherit\",\n env: buildEnv,\n });\n\n if (result.status !== 0) {\n throw new Error(\"workspace build failed (pnpm run build)\");\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { resolveCliRoot } from \"./project/resolve-cli-root\";\n\nexport function readCliVersion(): string {\n const packageJsonPath = join(resolveCliRoot(import.meta.url), \"package.json\");\n const pkg = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { version?: string };\n return pkg.version ?? \"0.0.0\";\n}\n"],"mappings":";;;;;;AAIA,SAAS,aAAa,KAAsB;CAC1C,MAAM,kBAAkB,KAAK,KAAK,cAAc;CAChD,IAAI,CAAC,WAAW,eAAe,GAC7B,OAAO;CAIT,OADY,KAAK,MAAM,aAAa,iBAAiB,MAAM,CAClD,EAAE,SAAS;AACtB;AAEA,SAAgB,eAAe,eAA+B;CAC5D,IAAI,MAAM,QAAQ,cAAc,aAAa,CAAC;CAE9C,OAAO,QAAQ,QAAQ,GAAG,GAAG;EAC3B,IAAI,aAAa,GAAG,GAClB,OAAO;EAGT,MAAM,QAAQ,GAAG;CACnB;CAEA,MAAM,IAAI,MAAM,8CAA8C;AAChE;;;ACtBA,MAAM,WAA6B;CAAC;CAAQ;CAAO;CAAQ;AAAK;AAEhE,SAAgB,uBAAuC;CACrD,MAAM,YAAY,QAAQ,IAAI,yBAAyB;CAEvD,KAAK,MAAM,WAAW,UACpB,IAAI,UAAU,WAAW,OAAO,GAC9B,OAAO;CAIX,IAAI,QAAQ,IAAI,WACd,OAAO;CAGT,OAAO;AACT;AAEA,SAAgB,sBAAsB,UAAmC;CACvE,IAAI,CAAC,UACH,OAAO,qBAAqB;CAG9B,MAAM,aAAa,SAAS,KAAK,EAAE,YAAY;CAC/C,IAAI,CAAC,SAAS,SAAS,UAA4B,GACjD,MAAM,IAAI,MAAM,gCAAgC,SAAS,gCAAgC;CAG3F,OAAO;AACT;;AAGA,SAAgB,6BAAiD;CAC/D,IAAI,QAAQ,IAAI,iBACd,OAAO,QAAQ,IAAI;CAGrB,KAAK,MAAM,OAAO,CAAC,gBAAgB,UAAU,GAAY;EACvD,MAAM,QAAQ,QAAQ,IAAI;EAC1B,IAAI,OACF,OAAO;CAEX;CAEA,MAAM,KAAK,UAAU,MAAM,CAAC,QAAQ,OAAO,GAAG,EAAE,UAAU,OAAO,CAAC;CAClE,IAAI,GAAG,WAAW,GAAG;EACnB,MAAM,QAAQ,GAAG,OAAO,KAAK;EAC7B,IAAI,OACF,OAAO;CAEX;AAGF;AAEA,SAAgB,oBAAoB,KAAa,SAA+B;CAC9E,MAAM,QAAQ,2BAA2B;CASzC,IANe,UAAU,SAAS,CAAC,SAAS,GAAG;EAC7C;EACA,OAAO;EACP,KALU,QAAQ;GAAE,GAAG,QAAQ;GAAK,iBAAiB;EAAM,IAAI,QAAQ;CAMzE,CAES,EAAE,WAAW,GACpB,MAAM,IAAI,MAAM,GAAG,QAAQ,gBAAgB;AAE/C;AAEA,SAAgB,8BAA8B,KAAmB;CAO/D,IANe,UAAU,QAAQ,CAAC,WAAW,oBAAoB,GAAG;EAClE;EACA,OAAO;EACP,KAAK,QAAQ;CACf,CAES,EAAE,WAAW,GACpB,MAAM,IAAI,MAAM,qBAAqB;AAEzC;;;;;;;AAQA,SAAgB,yBAAyB,cAA4B;CAInE,MAAM,EAAE,cAAc,OAAO,GAAG,aAAa,QAAQ;CAOrD,IANe,UAAU,QAAQ,CAAC,OAAO,OAAO,GAAG;EACjD,KAAK;EACL,OAAO;EACP,KAAK;CACP,CAES,EAAE,WAAW,GACpB,MAAM,IAAI,MAAM,yCAAyC;AAE7D;;;ACtGA,SAAgB,iBAAyB;CACvC,MAAM,kBAAkB,KAAK,eAAe,OAAO,KAAK,GAAG,GAAG,cAAc;CAE5E,OADY,KAAK,MAAM,aAAa,iBAAiB,MAAM,CAClD,EAAE,WAAW;AACxB"}
|