@spencer-kit/coder-studio 0.3.0 → 0.3.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 +6 -0
- package/dist/esm/bin.mjs +46 -63
- package/dist/esm/bin.mjs.map +4 -4
- package/package.json +1 -1
- package/src/bin.test.ts +1 -1
- package/src/bin.ts +6 -379
- package/src/cli.ts +355 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#21](https://github.com/spencerkit/coder-studio/pull/21) [`ce9607d`](https://github.com/spencerkit/coder-studio/commit/ce9607daba95019a4a5cdf2a2df8b78fbbf38b53) Thanks [@pallyoung](https://github.com/pallyoung)! - Refactor the CLI entry structure so the executable wrapper only launches the command entrypoint, while the reusable CLI logic lives in a separate module. This fixes cases where globally installed `coder-studio` commands could fail to print output because the entry module was misdetected.
|
|
8
|
+
|
|
3
9
|
## 0.3.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/dist/esm/bin.mjs
CHANGED
|
@@ -4032,7 +4032,7 @@ import { mkdir as mkdir3, mkdtemp, rm as rm4, writeFile as writeFile3 } from "fs
|
|
|
4032
4032
|
import os2 from "os";
|
|
4033
4033
|
import path4 from "path";
|
|
4034
4034
|
async function runGit(cwd, args, options = {}) {
|
|
4035
|
-
return new Promise((
|
|
4035
|
+
return new Promise((resolve3, reject) => {
|
|
4036
4036
|
const gitArgs = [
|
|
4037
4037
|
...options.config?.flatMap(([key, value]) => ["-c", `${key}=${value}`]) ?? [],
|
|
4038
4038
|
...args
|
|
@@ -4058,7 +4058,7 @@ async function runGit(cwd, args, options = {}) {
|
|
|
4058
4058
|
if (err) {
|
|
4059
4059
|
reject(new GitError(err.message, stderr));
|
|
4060
4060
|
} else {
|
|
4061
|
-
|
|
4061
|
+
resolve3({ stdout, stderr });
|
|
4062
4062
|
}
|
|
4063
4063
|
}
|
|
4064
4064
|
);
|
|
@@ -4745,13 +4745,13 @@ function ensureNodePtySpawnHelperExecutable(deps = {}) {
|
|
|
4745
4745
|
return;
|
|
4746
4746
|
}
|
|
4747
4747
|
const arch = deps.arch ?? process.arch;
|
|
4748
|
-
const
|
|
4748
|
+
const resolve3 = deps.resolve ?? ((id) => require2.resolve(id));
|
|
4749
4749
|
const fileExists = deps.existsSync ?? existsSync3;
|
|
4750
4750
|
const stat7 = deps.statSync ?? statSync;
|
|
4751
4751
|
const chmod = deps.chmodSync ?? chmodSync;
|
|
4752
4752
|
let packageJsonPath;
|
|
4753
4753
|
try {
|
|
4754
|
-
packageJsonPath =
|
|
4754
|
+
packageJsonPath = resolve3(NODE_PTY_PKG);
|
|
4755
4755
|
} catch {
|
|
4756
4756
|
return;
|
|
4757
4757
|
}
|
|
@@ -4816,7 +4816,7 @@ async function escalateKillWithPolling(pid, signal, options) {
|
|
|
4816
4816
|
const startTime = Date.now();
|
|
4817
4817
|
const deadline = startTime + timeoutMs;
|
|
4818
4818
|
while (Date.now() < deadline) {
|
|
4819
|
-
await new Promise((
|
|
4819
|
+
await new Promise((resolve3) => setTimeout(resolve3, pollIntervalMs));
|
|
4820
4820
|
if (!isProcessAlive(pid)) {
|
|
4821
4821
|
return true;
|
|
4822
4822
|
}
|
|
@@ -4940,7 +4940,7 @@ async function runCommand(command, timeoutMs, options = {}) {
|
|
|
4940
4940
|
if (options.signal?.aborted) {
|
|
4941
4941
|
throw createSupervisorEvalAbortedError();
|
|
4942
4942
|
}
|
|
4943
|
-
return await new Promise((
|
|
4943
|
+
return await new Promise((resolve3, reject) => {
|
|
4944
4944
|
const child = spawn(command.argv[0], command.argv.slice(1), {
|
|
4945
4945
|
cwd: command.cwd,
|
|
4946
4946
|
detached: process.platform !== "win32",
|
|
@@ -4969,7 +4969,7 @@ async function runCommand(command, timeoutMs, options = {}) {
|
|
|
4969
4969
|
}
|
|
4970
4970
|
settled = true;
|
|
4971
4971
|
cleanup();
|
|
4972
|
-
|
|
4972
|
+
resolve3(value);
|
|
4973
4973
|
};
|
|
4974
4974
|
const terminate = (error) => {
|
|
4975
4975
|
if (terminationError) {
|
|
@@ -5356,12 +5356,12 @@ var init_scheduler = __esm({
|
|
|
5356
5356
|
|
|
5357
5357
|
// packages/server/src/supervisor/manager.ts
|
|
5358
5358
|
function createDeferredCompletion() {
|
|
5359
|
-
let
|
|
5359
|
+
let resolve3 = () => {
|
|
5360
5360
|
};
|
|
5361
5361
|
const promise = new Promise((innerResolve) => {
|
|
5362
|
-
|
|
5362
|
+
resolve3 = innerResolve;
|
|
5363
5363
|
});
|
|
5364
|
-
return { promise, resolve:
|
|
5364
|
+
return { promise, resolve: resolve3 };
|
|
5365
5365
|
}
|
|
5366
5366
|
function generateSupervisorId() {
|
|
5367
5367
|
return `sup_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
|
|
@@ -6300,8 +6300,8 @@ var init_terminal_snapshot_buffer = __esm({
|
|
|
6300
6300
|
if (this.pendingWriteCount === 0) {
|
|
6301
6301
|
return Promise.resolve();
|
|
6302
6302
|
}
|
|
6303
|
-
return new Promise((
|
|
6304
|
-
this.drainResolvers.push(
|
|
6303
|
+
return new Promise((resolve3) => {
|
|
6304
|
+
this.drainResolvers.push(resolve3);
|
|
6305
6305
|
});
|
|
6306
6306
|
}
|
|
6307
6307
|
resolveDrainIfIdle() {
|
|
@@ -6310,8 +6310,8 @@ var init_terminal_snapshot_buffer = __esm({
|
|
|
6310
6310
|
}
|
|
6311
6311
|
const resolvers = this.drainResolvers;
|
|
6312
6312
|
this.drainResolvers = [];
|
|
6313
|
-
for (const
|
|
6314
|
-
|
|
6313
|
+
for (const resolve3 of resolvers) {
|
|
6314
|
+
resolve3();
|
|
6315
6315
|
}
|
|
6316
6316
|
}
|
|
6317
6317
|
requireTerminal() {
|
|
@@ -6630,10 +6630,10 @@ var init_manager3 = __esm({
|
|
|
6630
6630
|
}
|
|
6631
6631
|
return existing.promise;
|
|
6632
6632
|
}
|
|
6633
|
-
let
|
|
6633
|
+
let resolve3 = () => {
|
|
6634
6634
|
};
|
|
6635
6635
|
const promise = new Promise((innerResolve) => {
|
|
6636
|
-
|
|
6636
|
+
resolve3 = innerResolve;
|
|
6637
6637
|
});
|
|
6638
6638
|
let markKillCompleted = () => {
|
|
6639
6639
|
};
|
|
@@ -6646,7 +6646,7 @@ var init_manager3 = __esm({
|
|
|
6646
6646
|
markKillCompleted,
|
|
6647
6647
|
finalized: false,
|
|
6648
6648
|
promise,
|
|
6649
|
-
resolve:
|
|
6649
|
+
resolve: resolve3
|
|
6650
6650
|
});
|
|
6651
6651
|
void terminal.pty.kill(signal).finally(() => {
|
|
6652
6652
|
const waiter = this.explicitCloseWaiters.get(terminalId);
|
|
@@ -7342,16 +7342,16 @@ async function debounce(key, op, windowMs) {
|
|
|
7342
7342
|
clearTimeout(entry.timer);
|
|
7343
7343
|
entry.op = op;
|
|
7344
7344
|
} else {
|
|
7345
|
-
let
|
|
7345
|
+
let resolve3;
|
|
7346
7346
|
let reject;
|
|
7347
7347
|
const promise = new Promise((res, rej) => {
|
|
7348
|
-
|
|
7348
|
+
resolve3 = res;
|
|
7349
7349
|
reject = rej;
|
|
7350
7350
|
});
|
|
7351
7351
|
entry = {
|
|
7352
7352
|
timer: void 0,
|
|
7353
7353
|
promise,
|
|
7354
|
-
resolve:
|
|
7354
|
+
resolve: resolve3,
|
|
7355
7355
|
reject,
|
|
7356
7356
|
op
|
|
7357
7357
|
};
|
|
@@ -8228,7 +8228,7 @@ var init_hub = __esm({
|
|
|
8228
8228
|
}
|
|
8229
8229
|
}
|
|
8230
8230
|
awaitBinaryPayload(clientId) {
|
|
8231
|
-
return new Promise((
|
|
8231
|
+
return new Promise((resolve3, reject) => {
|
|
8232
8232
|
const timer = setTimeout(() => {
|
|
8233
8233
|
const waiters = this.pendingBinaryWaiters.get(clientId);
|
|
8234
8234
|
if (!waiters) return;
|
|
@@ -8240,7 +8240,7 @@ var init_hub = __esm({
|
|
|
8240
8240
|
}
|
|
8241
8241
|
reject(new Error("Timeout waiting for terminal input binary payload"));
|
|
8242
8242
|
}, BINARY_PAYLOAD_TIMEOUT_MS);
|
|
8243
|
-
const waiter = { resolve:
|
|
8243
|
+
const waiter = { resolve: resolve3, reject, timer };
|
|
8244
8244
|
const queue = this.pendingBinaryWaiters.get(clientId);
|
|
8245
8245
|
if (queue) {
|
|
8246
8246
|
queue.push(waiter);
|
|
@@ -10591,9 +10591,9 @@ var init_src3 = __esm({
|
|
|
10591
10591
|
}
|
|
10592
10592
|
});
|
|
10593
10593
|
|
|
10594
|
-
// packages/cli/src/
|
|
10594
|
+
// packages/cli/src/cli.ts
|
|
10595
10595
|
import { existsSync as existsSync9, readFileSync as readFileSync7 } from "fs";
|
|
10596
|
-
import { dirname as dirname6, join as join10
|
|
10596
|
+
import { dirname as dirname6, join as join10 } from "path";
|
|
10597
10597
|
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
10598
10598
|
|
|
10599
10599
|
// packages/cli/src/auth-control.ts
|
|
@@ -10692,7 +10692,7 @@ function getOpenCommand(url) {
|
|
|
10692
10692
|
}
|
|
10693
10693
|
async function openBrowser(url) {
|
|
10694
10694
|
const { command, args } = getOpenCommand(url);
|
|
10695
|
-
await new Promise((
|
|
10695
|
+
await new Promise((resolve3, reject) => {
|
|
10696
10696
|
const child = spawn2(command, args, {
|
|
10697
10697
|
detached: true,
|
|
10698
10698
|
stdio: "ignore"
|
|
@@ -10700,7 +10700,7 @@ async function openBrowser(url) {
|
|
|
10700
10700
|
child.once("error", reject);
|
|
10701
10701
|
child.once("spawn", () => {
|
|
10702
10702
|
child.unref();
|
|
10703
|
-
|
|
10703
|
+
resolve3();
|
|
10704
10704
|
});
|
|
10705
10705
|
});
|
|
10706
10706
|
}
|
|
@@ -11046,18 +11046,18 @@ async function loadPm2() {
|
|
|
11046
11046
|
}
|
|
11047
11047
|
var connectPm2 = async () => {
|
|
11048
11048
|
const pm2 = await loadPm2();
|
|
11049
|
-
return new Promise((
|
|
11049
|
+
return new Promise((resolve3, reject) => {
|
|
11050
11050
|
pm2.connect((error) => {
|
|
11051
11051
|
if (error) {
|
|
11052
11052
|
reject(error);
|
|
11053
11053
|
return;
|
|
11054
11054
|
}
|
|
11055
|
-
|
|
11055
|
+
resolve3();
|
|
11056
11056
|
});
|
|
11057
11057
|
});
|
|
11058
11058
|
};
|
|
11059
|
-
var sleep = async (ms) => new Promise((
|
|
11060
|
-
setTimeout(
|
|
11059
|
+
var sleep = async (ms) => new Promise((resolve3) => {
|
|
11060
|
+
setTimeout(resolve3, ms);
|
|
11061
11061
|
});
|
|
11062
11062
|
var disconnectPm2 = async () => {
|
|
11063
11063
|
const pm2 = await loadPm2();
|
|
@@ -11065,33 +11065,33 @@ var disconnectPm2 = async () => {
|
|
|
11065
11065
|
};
|
|
11066
11066
|
var describeManagedServer = async () => {
|
|
11067
11067
|
const pm2 = await loadPm2();
|
|
11068
|
-
return new Promise((
|
|
11068
|
+
return new Promise((resolve3, reject) => {
|
|
11069
11069
|
pm2.describe(MANAGED_SERVER_NAME, (error, result) => {
|
|
11070
11070
|
if (error) {
|
|
11071
11071
|
reject(error);
|
|
11072
11072
|
return;
|
|
11073
11073
|
}
|
|
11074
|
-
|
|
11074
|
+
resolve3(result ?? []);
|
|
11075
11075
|
});
|
|
11076
11076
|
});
|
|
11077
11077
|
};
|
|
11078
11078
|
var removeManagedServer = async () => {
|
|
11079
11079
|
const pm2 = await loadPm2();
|
|
11080
|
-
return new Promise((
|
|
11080
|
+
return new Promise((resolve3, reject) => {
|
|
11081
11081
|
pm2.delete(MANAGED_SERVER_NAME, (error) => {
|
|
11082
11082
|
if (error) {
|
|
11083
11083
|
reject(error);
|
|
11084
11084
|
return;
|
|
11085
11085
|
}
|
|
11086
|
-
|
|
11086
|
+
resolve3();
|
|
11087
11087
|
});
|
|
11088
11088
|
});
|
|
11089
11089
|
};
|
|
11090
11090
|
var killPm2Daemon = async () => {
|
|
11091
11091
|
const pm2 = await loadPm2();
|
|
11092
|
-
return new Promise((
|
|
11092
|
+
return new Promise((resolve3) => {
|
|
11093
11093
|
pm2.kill(() => {
|
|
11094
|
-
|
|
11094
|
+
resolve3();
|
|
11095
11095
|
});
|
|
11096
11096
|
});
|
|
11097
11097
|
};
|
|
@@ -11227,7 +11227,7 @@ var startManagedServer = async ({
|
|
|
11227
11227
|
const pm2 = await loadPm2();
|
|
11228
11228
|
await withPm2Connection(async () => {
|
|
11229
11229
|
const logOffsets = captureStartupLogOffsets();
|
|
11230
|
-
await new Promise((
|
|
11230
|
+
await new Promise((resolve3, reject) => {
|
|
11231
11231
|
pm2.start(
|
|
11232
11232
|
{
|
|
11233
11233
|
name: MANAGED_SERVER_NAME,
|
|
@@ -11250,7 +11250,7 @@ var startManagedServer = async ({
|
|
|
11250
11250
|
reject(error);
|
|
11251
11251
|
return;
|
|
11252
11252
|
}
|
|
11253
|
-
|
|
11253
|
+
resolve3();
|
|
11254
11254
|
}
|
|
11255
11255
|
);
|
|
11256
11256
|
});
|
|
@@ -11451,7 +11451,7 @@ function getBrowserUrl(status) {
|
|
|
11451
11451
|
return `http://${host}:${status.port}`;
|
|
11452
11452
|
}
|
|
11453
11453
|
|
|
11454
|
-
// packages/cli/src/
|
|
11454
|
+
// packages/cli/src/cli.ts
|
|
11455
11455
|
var MANAGED_SERVER_WAIT_MS = 5e3;
|
|
11456
11456
|
var DEFAULT_LOG_TAIL_LINES = 40;
|
|
11457
11457
|
function formatConfig(config) {
|
|
@@ -11590,20 +11590,6 @@ function resolveManagedScriptPath() {
|
|
|
11590
11590
|
}
|
|
11591
11591
|
return scriptPath;
|
|
11592
11592
|
}
|
|
11593
|
-
function isCliEntrypoint() {
|
|
11594
|
-
if (process.argv[1] === void 0) {
|
|
11595
|
-
return false;
|
|
11596
|
-
}
|
|
11597
|
-
const currentFile = fileURLToPath3(import.meta.url);
|
|
11598
|
-
const currentDir = dirname6(currentFile);
|
|
11599
|
-
const entryScript = resolve3(process.argv[1]);
|
|
11600
|
-
const entryCandidates = /* @__PURE__ */ new Set([
|
|
11601
|
-
currentFile,
|
|
11602
|
-
join10(currentDir, "../bin.js"),
|
|
11603
|
-
join10(currentDir, "../dist/bin.js")
|
|
11604
|
-
]);
|
|
11605
|
-
return entryCandidates.has(entryScript);
|
|
11606
|
-
}
|
|
11607
11593
|
function isRunningStatus(status) {
|
|
11608
11594
|
return status.status === "running" || status.status === "starting";
|
|
11609
11595
|
}
|
|
@@ -11746,14 +11732,11 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
11746
11732
|
console.log("Coder Studio server started in background.");
|
|
11747
11733
|
console.log("Run `coder-studio status` to inspect the server.");
|
|
11748
11734
|
}
|
|
11749
|
-
|
|
11750
|
-
|
|
11751
|
-
|
|
11752
|
-
|
|
11753
|
-
|
|
11754
|
-
|
|
11755
|
-
}
|
|
11756
|
-
export {
|
|
11757
|
-
main
|
|
11758
|
-
};
|
|
11735
|
+
|
|
11736
|
+
// packages/cli/src/bin.ts
|
|
11737
|
+
void main().catch((error) => {
|
|
11738
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
11739
|
+
console.error("CLI error:", message);
|
|
11740
|
+
process.exit(1);
|
|
11741
|
+
});
|
|
11759
11742
|
//# sourceMappingURL=bin.mjs.map
|