@rhseung/ps-cli 1.2.1 → 1.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.
@@ -6,23 +6,22 @@ import {
6
6
  detectProblemIdFromPath,
7
7
  getProblemDirPath,
8
8
  getProblemId
9
- } from "../chunk-3TMQ74SA.js";
9
+ } from "../chunk-BM3ZMA4K.js";
10
10
  import {
11
11
  detectLanguageFromFile,
12
12
  getSupportedLanguages,
13
13
  getSupportedLanguagesString
14
14
  } from "../chunk-TQXMB7XV.js";
15
- import {
16
- LoadingSpinner
17
- } from "../chunk-IJLJBKLK.js";
18
- import "../chunk-63CK6URL.js";
15
+ import "../chunk-CIG2LEJC.js";
19
16
  import "../chunk-FYS2JH42.js";
20
17
 
21
18
  // src/commands/run.tsx
22
19
  import { useEffect, useState } from "react";
23
20
  import { render, Box, Text } from "ink";
21
+ import { StatusMessage, Alert } from "@inkjs/ui";
24
22
  import { readdir } from "fs/promises";
25
23
  import { join } from "path";
24
+ import { Spinner } from "@inkjs/ui";
26
25
  import { jsx, jsxs } from "react/jsx-runtime";
27
26
  function RunCommand({
28
27
  problemDir,
@@ -57,16 +56,13 @@ function RunCommand({
57
56
  });
58
57
  }, [problemDir, language, inputFile, onComplete]);
59
58
  if (status === "loading") {
60
- return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
61
- /* @__PURE__ */ jsx(Text, { children: "\uCF54\uB4DC \uC2E4\uD589 \uC911..." }),
62
- /* @__PURE__ */ jsx(LoadingSpinner, {})
63
- ] });
59
+ return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsx(Spinner, { label: "\uCF54\uB4DC \uC2E4\uD589 \uC911..." }) });
64
60
  }
65
61
  if (status === "error") {
66
- return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
67
- /* @__PURE__ */ jsx(Text, { color: "red", children: "\u2717 \uC2E4\uD589 \uC2E4\uD328" }),
68
- error && /* @__PURE__ */ jsx(Text, { color: "gray", children: error })
69
- ] });
62
+ return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsxs(Alert, { variant: "error", children: [
63
+ "\uC2E4\uD589 \uC2E4\uD328",
64
+ error ? `: ${error}` : ""
65
+ ] }) });
70
66
  }
71
67
  if (result) {
72
68
  return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
@@ -80,11 +76,11 @@ function RunCommand({
80
76
  ] })
81
77
  ] }),
82
78
  /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
83
- result.timedOut ? /* @__PURE__ */ jsx(Text, { color: "yellow", children: "\u23F1 \uC2E4\uD589 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4." }) : result.exitCode !== 0 ? /* @__PURE__ */ jsxs(Text, { color: "red", children: [
84
- "\u2717 \uD504\uB85C\uADF8\uB7A8\uC774 \uBE44\uC815\uC0C1 \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4 (exit code: ",
79
+ result.timedOut ? /* @__PURE__ */ jsx(StatusMessage, { variant: "warning", children: "\uC2E4\uD589 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4." }) : result.exitCode !== 0 ? /* @__PURE__ */ jsxs(StatusMessage, { variant: "error", children: [
80
+ "\uD504\uB85C\uADF8\uB7A8\uC774 \uBE44\uC815\uC0C1 \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4 (exit code: ",
85
81
  result.exitCode,
86
82
  ")"
87
- ] }) : /* @__PURE__ */ jsx(Text, { color: "green", children: "\u2713 \uC2E4\uD589 \uC644\uB8CC" }),
83
+ ] }) : /* @__PURE__ */ jsx(StatusMessage, { variant: "success", children: "\uC2E4\uD589 \uC644\uB8CC" }),
88
84
  result.stdout && /* @__PURE__ */ jsxs(Box, { marginTop: 1, flexDirection: "column", children: [
89
85
  /* @__PURE__ */ jsx(Text, { color: "gray", dimColor: true, children: "\uCD9C\uB825:" }),
90
86
  /* @__PURE__ */ jsx(Text, { children: result.stdout })
@@ -5,17 +5,16 @@ import {
5
5
  getUserStats,
6
6
  source_default
7
7
  } from "../chunk-2E4VSP6O.js";
8
- import {
9
- LoadingSpinner
10
- } from "../chunk-IJLJBKLK.js";
11
8
  import {
12
9
  getSolvedAcHandle
13
- } from "../chunk-63CK6URL.js";
10
+ } from "../chunk-CIG2LEJC.js";
14
11
  import "../chunk-FYS2JH42.js";
15
12
 
16
13
  // src/commands/stats.tsx
17
14
  import { useEffect, useState } from "react";
18
15
  import { render, Box, Text } from "ink";
16
+ import { Alert } from "@inkjs/ui";
17
+ import { Spinner } from "@inkjs/ui";
19
18
  import gradient from "gradient-string";
20
19
  import { jsx, jsxs } from "react/jsx-runtime";
21
20
  function StatsCommand({ handle, onComplete }) {
@@ -40,11 +39,11 @@ function StatsCommand({ handle, onComplete }) {
40
39
  });
41
40
  }, [handle, onComplete]);
42
41
  if (status === "loading") {
43
- return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsx(LoadingSpinner, { message: "\uD1B5\uACC4\uB97C \uBD88\uB7EC\uC624\uB294 \uC911..." }) });
42
+ return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsx(Spinner, { label: "\uD1B5\uACC4\uB97C \uBD88\uB7EC\uC624\uB294 \uC911..." }) });
44
43
  }
45
44
  if (status === "error") {
46
- return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsxs(Text, { color: "red", children: [
47
- "\u2717 \uD1B5\uACC4\uB97C \uBD88\uB7EC\uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ",
45
+ return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsxs(Alert, { variant: "error", children: [
46
+ "\uD1B5\uACC4\uB97C \uBD88\uB7EC\uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ",
48
47
  error
49
48
  ] }) });
50
49
  }
@@ -60,11 +59,6 @@ function StatsCommand({ handle, onComplete }) {
60
59
  "\u2728 ",
61
60
  user.handle
62
61
  ] }) }),
63
- /* @__PURE__ */ jsx(Box, { marginBottom: 1, children: /* @__PURE__ */ jsxs(Text, { children: [
64
- tierDisplay,
65
- " ",
66
- /* @__PURE__ */ jsx(Text, { bold: true, children: user.rating.toLocaleString() })
67
- ] }) }),
68
62
  /* @__PURE__ */ jsx(
69
63
  Box,
70
64
  {
@@ -73,6 +67,11 @@ function StatsCommand({ handle, onComplete }) {
73
67
  borderColor: "gray",
74
68
  alignSelf: "flex-start",
75
69
  children: /* @__PURE__ */ jsxs(Box, { paddingX: 1, paddingY: 0, flexDirection: "column", children: [
70
+ /* @__PURE__ */ jsxs(Text, { children: [
71
+ tierDisplay,
72
+ " ",
73
+ /* @__PURE__ */ jsx(Text, { bold: true, children: user.rating.toLocaleString() })
74
+ ] }),
76
75
  /* @__PURE__ */ jsxs(Text, { children: [
77
76
  "\uD574\uACB0\uD55C \uBB38\uC81C:",
78
77
  " ",
@@ -3,25 +3,23 @@ import {
3
3
  detectProblemIdFromPath,
4
4
  getProblemDirPath,
5
5
  getProblemId
6
- } from "../chunk-3TMQ74SA.js";
6
+ } from "../chunk-BM3ZMA4K.js";
7
7
  import {
8
8
  detectLanguageFromFile,
9
9
  getLanguageConfig,
10
10
  getSupportedLanguages,
11
11
  getSupportedLanguagesString
12
12
  } from "../chunk-TQXMB7XV.js";
13
- import {
14
- LoadingSpinner
15
- } from "../chunk-IJLJBKLK.js";
16
13
  import {
17
14
  getBojSessionCookie,
18
15
  getCodeOpen
19
- } from "../chunk-63CK6URL.js";
16
+ } from "../chunk-CIG2LEJC.js";
20
17
  import "../chunk-FYS2JH42.js";
21
18
 
22
19
  // src/commands/submit.tsx
23
20
  import { useState, useEffect } from "react";
24
21
  import { render, Text, Box } from "ink";
22
+ import { Badge, StatusMessage, Alert } from "@inkjs/ui";
25
23
  import { readdir } from "fs/promises";
26
24
  import { join } from "path";
27
25
  import { readFile } from "fs/promises";
@@ -308,6 +306,7 @@ async function submitSolution({
308
306
  }
309
307
 
310
308
  // src/commands/submit.tsx
309
+ import { Spinner } from "@inkjs/ui";
311
310
  import { jsx, jsxs } from "react/jsx-runtime";
312
311
  function SubmitCommand({
313
312
  problemId,
@@ -355,46 +354,28 @@ function SubmitCommand({
355
354
  submit();
356
355
  }, [problemId, language, sourcePath, dryRun, onComplete]);
357
356
  if (status === "loading") {
358
- return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsx(LoadingSpinner, { message }) });
357
+ return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsx(Spinner, { label: message }) });
359
358
  }
360
359
  if (status === "error") {
361
- return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsxs(Text, { color: "red", children: [
362
- "\u2717 \uC81C\uCD9C \uC2E4\uD328: ",
360
+ return /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: /* @__PURE__ */ jsxs(Alert, { variant: "error", children: [
361
+ "\uC81C\uCD9C \uC2E4\uD328: ",
363
362
  error
364
363
  ] }) });
365
364
  }
366
365
  if (result) {
367
- const statusColor = result.status === "AC" ? "green" : result.status === "WA" || result.status === "CE" || result.status === "RE" ? "red" : result.status === "TLE" || result.status === "MLE" ? "yellow" : "cyan";
366
+ const badgeColor = result.status === "AC" ? "green" : result.status === "WA" || result.status === "CE" || result.status === "RE" ? "red" : result.status === "TLE" || result.status === "MLE" ? "yellow" : "blue";
367
+ const statusVariant = result.status === "AC" ? "success" : result.status === "WA" || result.status === "CE" || result.status === "RE" ? "error" : result.status === "TLE" || result.status === "MLE" ? "warning" : "info";
368
+ const resultDetails = [
369
+ `\uBB38\uC81C: ${result.problemId}`,
370
+ `\uC5B8\uC5B4: ${result.language}`,
371
+ result.time !== null && result.time !== void 0 ? `\uC2DC\uAC04: ${result.time}ms` : null,
372
+ result.memory !== null && result.memory !== void 0 ? `\uBA54\uBAA8\uB9AC: ${result.memory}KB` : null
373
+ ].filter(Boolean).join(" | ");
368
374
  return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
369
375
  /* @__PURE__ */ jsx(Box, { marginBottom: 1, children: /* @__PURE__ */ jsx(Text, { color: "cyan", bold: true, children: "\uC81C\uCD9C \uACB0\uACFC" }) }),
370
376
  /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
371
- /* @__PURE__ */ jsxs(Text, { children: [
372
- "\uBB38\uC81C: ",
373
- /* @__PURE__ */ jsx(Text, { bold: true, children: result.problemId })
374
- ] }),
375
- /* @__PURE__ */ jsxs(Text, { children: [
376
- "\uC5B8\uC5B4: ",
377
- /* @__PURE__ */ jsx(Text, { bold: true, children: result.language })
378
- ] }),
379
- /* @__PURE__ */ jsxs(Text, { children: [
380
- "\uC0C1\uD0DC:",
381
- " ",
382
- /* @__PURE__ */ jsx(Text, { color: statusColor, bold: true, children: result.status })
383
- ] }),
384
- result.time !== null && result.time !== void 0 && /* @__PURE__ */ jsxs(Text, { children: [
385
- "\uC2DC\uAC04: ",
386
- /* @__PURE__ */ jsxs(Text, { bold: true, children: [
387
- result.time,
388
- "ms"
389
- ] })
390
- ] }),
391
- result.memory !== null && result.memory !== void 0 && /* @__PURE__ */ jsxs(Text, { children: [
392
- "\uBA54\uBAA8\uB9AC: ",
393
- /* @__PURE__ */ jsxs(Text, { bold: true, children: [
394
- result.memory,
395
- "KB"
396
- ] })
397
- ] }),
377
+ /* @__PURE__ */ jsx(Box, { marginBottom: 1, children: /* @__PURE__ */ jsx(Badge, { color: badgeColor, children: result.status }) }),
378
+ /* @__PURE__ */ jsx(StatusMessage, { variant: statusVariant, children: resultDetails }),
398
379
  result.message && /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { color: "gray", children: result.message }) })
399
380
  ] })
400
381
  ] });
@@ -6,21 +6,19 @@ import {
6
6
  detectProblemIdFromPath,
7
7
  getProblemDirPath,
8
8
  getProblemId
9
- } from "../chunk-3TMQ74SA.js";
9
+ } from "../chunk-BM3ZMA4K.js";
10
10
  import {
11
11
  detectLanguageFromFile,
12
12
  getSupportedLanguages,
13
13
  getSupportedLanguagesString
14
14
  } from "../chunk-TQXMB7XV.js";
15
- import {
16
- LoadingSpinner
17
- } from "../chunk-IJLJBKLK.js";
18
- import "../chunk-63CK6URL.js";
15
+ import "../chunk-CIG2LEJC.js";
19
16
  import "../chunk-FYS2JH42.js";
20
17
 
21
18
  // src/commands/test.tsx
22
19
  import { useEffect, useState } from "react";
23
20
  import { render, Box as Box2, Text as Text2 } from "ink";
21
+ import { Alert } from "@inkjs/ui";
24
22
  import chokidar from "chokidar";
25
23
  import { readdir as readdir2 } from "fs/promises";
26
24
  import { join as join2 } from "path";
@@ -136,8 +134,12 @@ async function runAllTests({
136
134
  return { results, summary: buildSummary(results) };
137
135
  }
138
136
 
137
+ // src/commands/test.tsx
138
+ import { Spinner } from "@inkjs/ui";
139
+
139
140
  // src/components/test-result.tsx
140
141
  import { Box, Text } from "ink";
142
+ import { Badge, StatusMessage } from "@inkjs/ui";
141
143
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
142
144
  function truncate(text = "", max = 200) {
143
145
  return text.length > max ? `${text.slice(0, max)}...` : text;
@@ -147,14 +149,11 @@ function formatDuration(ms) {
147
149
  return `${(ms / 1e3).toFixed(2)}s`;
148
150
  }
149
151
  function ResultRow({ result }) {
150
- const statusIcon = result.status === "pass" ? "\u2713" : result.status === "fail" ? "\u2717" : "!";
151
- const statusColor = result.status === "pass" ? "green" : result.status === "fail" ? "red" : "yellow";
152
+ const badgeColor = result.status === "pass" ? "green" : result.status === "fail" ? "red" : "yellow";
152
153
  const statusText = result.status === "pass" ? "PASS" : result.status === "fail" ? "FAIL" : "ERROR";
153
154
  return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
154
155
  /* @__PURE__ */ jsxs(Box, { children: [
155
- /* @__PURE__ */ jsx(Text, { color: statusColor, bold: true, children: statusIcon }),
156
- /* @__PURE__ */ jsx(Text, { children: " " }),
157
- /* @__PURE__ */ jsx(Text, { color: statusColor, bold: true, children: statusText }),
156
+ /* @__PURE__ */ jsx(Badge, { color: badgeColor, children: statusText }),
158
157
  /* @__PURE__ */ jsx(Text, { children: " " }),
159
158
  /* @__PURE__ */ jsxs(Text, { children: [
160
159
  "\uCF00\uC774\uC2A4 ",
@@ -187,47 +186,13 @@ function ResultRow({ result }) {
187
186
  }
188
187
  function TestResultView({ summary, results }) {
189
188
  const allPassed = summary.failed === 0 && summary.errored === 0;
190
- const summaryColor = allPassed ? "green" : "red";
189
+ const summaryVariant = allPassed ? "success" : "error";
190
+ const summaryText = `\uCD1D ${summary.total}\uAC1C | Pass ${summary.passed}${summary.failed > 0 ? ` | Fail ${summary.failed}` : ""}${summary.errored > 0 ? ` | Error ${summary.errored}` : ""}`;
191
191
  return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
192
- /* @__PURE__ */ jsxs(
193
- Box,
194
- {
195
- borderStyle: "round",
196
- borderColor: summaryColor,
197
- paddingX: 1,
198
- alignSelf: "flex-start",
199
- flexDirection: "column",
200
- children: [
201
- /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { bold: true, children: "\uD14C\uC2A4\uD2B8 \uACB0\uACFC" }) }),
202
- /* @__PURE__ */ jsxs(Box, { marginTop: 1, children: [
203
- /* @__PURE__ */ jsxs(Text, { children: [
204
- "\uCD1D ",
205
- /* @__PURE__ */ jsx(Text, { bold: true, children: summary.total }),
206
- "\uAC1C"
207
- ] }),
208
- /* @__PURE__ */ jsx(Text, { children: " | " }),
209
- /* @__PURE__ */ jsxs(Text, { color: "green", children: [
210
- "Pass ",
211
- /* @__PURE__ */ jsx(Text, { bold: true, children: summary.passed })
212
- ] }),
213
- summary.failed > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
214
- /* @__PURE__ */ jsx(Text, { children: " | " }),
215
- /* @__PURE__ */ jsxs(Text, { color: "red", children: [
216
- "Fail ",
217
- /* @__PURE__ */ jsx(Text, { bold: true, children: summary.failed })
218
- ] })
219
- ] }),
220
- summary.errored > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
221
- /* @__PURE__ */ jsx(Text, { children: " | " }),
222
- /* @__PURE__ */ jsxs(Text, { color: "yellow", children: [
223
- "Error ",
224
- /* @__PURE__ */ jsx(Text, { bold: true, children: summary.errored })
225
- ] })
226
- ] })
227
- ] })
228
- ]
229
- }
230
- ),
192
+ /* @__PURE__ */ jsxs(StatusMessage, { variant: summaryVariant, children: [
193
+ "\uD14C\uC2A4\uD2B8 \uACB0\uACFC: ",
194
+ summaryText
195
+ ] }),
231
196
  /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children: results.map((r) => /* @__PURE__ */ jsx(ResultRow, { result: r }, r.caseId)) })
232
197
  ] });
233
198
  }
@@ -298,16 +263,13 @@ function TestCommand({
298
263
  return void 0;
299
264
  }, [status, watch, onComplete]);
300
265
  if (status === "loading") {
301
- return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
302
- /* @__PURE__ */ jsx2(Text2, { children: "\uD14C\uC2A4\uD2B8 \uC2E4\uD589 \uC911..." }),
303
- /* @__PURE__ */ jsx2(LoadingSpinner, {})
304
- ] });
266
+ return /* @__PURE__ */ jsx2(Box2, { flexDirection: "column", children: /* @__PURE__ */ jsx2(Spinner, { label: "\uD14C\uC2A4\uD2B8 \uC2E4\uD589 \uC911..." }) });
305
267
  }
306
268
  if (status === "error") {
307
- return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
308
- /* @__PURE__ */ jsx2(Text2, { color: "red", children: "\u2717 \uD14C\uC2A4\uD2B8 \uC2E4\uD589 \uC2E4\uD328" }),
309
- error && /* @__PURE__ */ jsx2(Text2, { color: "gray", children: error })
310
- ] });
269
+ return /* @__PURE__ */ jsx2(Box2, { flexDirection: "column", children: /* @__PURE__ */ jsxs2(Alert, { variant: "error", children: [
270
+ "\uD14C\uC2A4\uD2B8 \uC2E4\uD589 \uC2E4\uD328",
271
+ error ? `: ${error}` : ""
272
+ ] }) });
311
273
  }
312
274
  return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
313
275
  /* @__PURE__ */ jsxs2(Box2, { marginBottom: 1, children: [
package/dist/index.js CHANGED
@@ -9359,6 +9359,7 @@ var meow = (helpText, options = {}) => {
9359
9359
  import { readdir } from "fs/promises";
9360
9360
  import { join, dirname } from "path";
9361
9361
  import { fileURLToPath as fileURLToPath3 } from "url";
9362
+ import { existsSync } from "fs";
9362
9363
  function getCommandsDir() {
9363
9364
  const __filename = fileURLToPath3(import.meta.url);
9364
9365
  const __dirname = dirname(__filename);
@@ -9495,6 +9496,30 @@ async function main() {
9495
9496
  process.exit(1);
9496
9497
  return;
9497
9498
  }
9499
+ if (command !== "init") {
9500
+ let currentDir = process.cwd();
9501
+ let found = false;
9502
+ const rootPath = process.platform === "win32" ? currentDir.split("\\")[0] + "\\" : "/";
9503
+ while (currentDir !== rootPath && !found) {
9504
+ const projectConfigPath = join(currentDir, ".ps-cli.json");
9505
+ if (existsSync(projectConfigPath)) {
9506
+ found = true;
9507
+ break;
9508
+ }
9509
+ const parentDir = dirname(currentDir);
9510
+ if (parentDir === currentDir) {
9511
+ break;
9512
+ }
9513
+ currentDir = parentDir;
9514
+ }
9515
+ if (!found) {
9516
+ console.error("\uC624\uB958: \uD604\uC7AC \uB514\uB809\uD1A0\uB9AC\uAC00 ps-cli \uD504\uB85C\uC81D\uD2B8\uAC00 \uC544\uB2D9\uB2C8\uB2E4.");
9517
+ console.error("\uD504\uB85C\uC81D\uD2B8\uB97C \uCD08\uAE30\uD654\uD558\uB824\uBA74 \uB2E4\uC74C \uBA85\uB839\uC5B4\uB97C \uC2E4\uD589\uD558\uC138\uC694:");
9518
+ console.error(" $ ps init");
9519
+ process.exit(1);
9520
+ return;
9521
+ }
9522
+ }
9498
9523
  await commandDef.execute(args, cli.flags);
9499
9524
  }
9500
9525
  main().catch((error) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rhseung/ps-cli",
3
- "version": "1.2.1",
3
+ "version": "1.3.1",
4
4
  "description": "백준(BOJ) 문제 해결을 위한 통합 CLI 도구",
5
5
  "type": "module",
6
6
  "bin": {
@@ -44,9 +44,7 @@
44
44
  "execa": "^9.4.0",
45
45
  "gradient-string": "^2.0.2",
46
46
  "ink": "^5.0.1",
47
- "ink-select-input": "^5.0.0",
48
- "ink-spinner": "^5.0.0",
49
- "ink-text-input": "^6.0.0",
47
+ "@inkjs/ui": "^2.0.0",
50
48
  "meow": "^14.0.0",
51
49
  "react": "^18.3.1"
52
50
  },