@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.
- package/dist/{chunk-3TMQ74SA.js → chunk-BM3ZMA4K.js} +1 -1
- package/dist/{chunk-63CK6URL.js → chunk-CIG2LEJC.js} +1 -33
- package/dist/commands/config.js +324 -131
- package/dist/commands/fetch.js +9 -10
- package/dist/commands/init.js +98 -1295
- package/dist/commands/run.js +12 -16
- package/dist/commands/stats.js +11 -12
- package/dist/commands/submit.js +17 -36
- package/dist/commands/test.js +20 -58
- package/dist/index.js +25 -0
- package/package.json +2 -4
- package/dist/chunk-IJLJBKLK.js +0 -1689
|
@@ -9931,9 +9931,6 @@ function getBojSessionCookie() {
|
|
|
9931
9931
|
}
|
|
9932
9932
|
return config.get("bojSessionCookie");
|
|
9933
9933
|
}
|
|
9934
|
-
function setBojSessionCookie(cookie) {
|
|
9935
|
-
config.set("bojSessionCookie", cookie);
|
|
9936
|
-
}
|
|
9937
9934
|
function getDefaultLanguage() {
|
|
9938
9935
|
const projectConfig = getProjectConfigSync();
|
|
9939
9936
|
if (projectConfig?.defaultLanguage) {
|
|
@@ -9941,15 +9938,9 @@ function getDefaultLanguage() {
|
|
|
9941
9938
|
}
|
|
9942
9939
|
return config.get("defaultLanguage") ?? "python";
|
|
9943
9940
|
}
|
|
9944
|
-
function setDefaultLanguage(language) {
|
|
9945
|
-
config.set("defaultLanguage", language);
|
|
9946
|
-
}
|
|
9947
9941
|
function getCodeOpen() {
|
|
9948
9942
|
return config.get("codeOpen") ?? false;
|
|
9949
9943
|
}
|
|
9950
|
-
function setCodeOpen(open) {
|
|
9951
|
-
config.set("codeOpen", open);
|
|
9952
|
-
}
|
|
9953
9944
|
function getEditor() {
|
|
9954
9945
|
const projectConfig = getProjectConfigSync();
|
|
9955
9946
|
if (projectConfig?.editor) {
|
|
@@ -9957,9 +9948,6 @@ function getEditor() {
|
|
|
9957
9948
|
}
|
|
9958
9949
|
return config.get("editor") ?? "code";
|
|
9959
9950
|
}
|
|
9960
|
-
function setEditor(editor) {
|
|
9961
|
-
config.set("editor", editor);
|
|
9962
|
-
}
|
|
9963
9951
|
function getAutoOpenEditor() {
|
|
9964
9952
|
const projectConfig = getProjectConfigSync();
|
|
9965
9953
|
if (projectConfig?.autoOpenEditor !== void 0) {
|
|
@@ -9967,9 +9955,6 @@ function getAutoOpenEditor() {
|
|
|
9967
9955
|
}
|
|
9968
9956
|
return config.get("autoOpenEditor") ?? false;
|
|
9969
9957
|
}
|
|
9970
|
-
function setAutoOpenEditor(enabled) {
|
|
9971
|
-
config.set("autoOpenEditor", enabled);
|
|
9972
|
-
}
|
|
9973
9958
|
function getSolvedAcHandle() {
|
|
9974
9959
|
const projectConfig = getProjectConfigSync();
|
|
9975
9960
|
if (projectConfig?.solvedAcHandle) {
|
|
@@ -9977,9 +9962,6 @@ function getSolvedAcHandle() {
|
|
|
9977
9962
|
}
|
|
9978
9963
|
return config.get("solvedAcHandle");
|
|
9979
9964
|
}
|
|
9980
|
-
function setSolvedAcHandle(handle) {
|
|
9981
|
-
config.set("solvedAcHandle", handle);
|
|
9982
|
-
}
|
|
9983
9965
|
function getProblemDir() {
|
|
9984
9966
|
const projectConfig = getProjectConfigSync();
|
|
9985
9967
|
if (projectConfig?.problemDir !== void 0) {
|
|
@@ -9987,27 +9969,13 @@ function getProblemDir() {
|
|
|
9987
9969
|
}
|
|
9988
9970
|
return config.get("problemDir") ?? "problems";
|
|
9989
9971
|
}
|
|
9990
|
-
function setProblemDir(dir) {
|
|
9991
|
-
config.set("problemDir", dir);
|
|
9992
|
-
}
|
|
9993
|
-
function clearConfig() {
|
|
9994
|
-
config.clear();
|
|
9995
|
-
}
|
|
9996
9972
|
|
|
9997
9973
|
export {
|
|
9998
9974
|
getBojSessionCookie,
|
|
9999
|
-
setBojSessionCookie,
|
|
10000
9975
|
getDefaultLanguage,
|
|
10001
|
-
setDefaultLanguage,
|
|
10002
9976
|
getCodeOpen,
|
|
10003
|
-
setCodeOpen,
|
|
10004
9977
|
getEditor,
|
|
10005
|
-
setEditor,
|
|
10006
9978
|
getAutoOpenEditor,
|
|
10007
|
-
setAutoOpenEditor,
|
|
10008
9979
|
getSolvedAcHandle,
|
|
10009
|
-
|
|
10010
|
-
getProblemDir,
|
|
10011
|
-
setProblemDir,
|
|
10012
|
-
clearConfig
|
|
9980
|
+
getProblemDir
|
|
10013
9981
|
};
|
package/dist/commands/config.js
CHANGED
|
@@ -4,63 +4,76 @@ import {
|
|
|
4
4
|
getSupportedLanguagesString
|
|
5
5
|
} from "../chunk-TQXMB7XV.js";
|
|
6
6
|
import {
|
|
7
|
-
clearConfig,
|
|
8
7
|
getAutoOpenEditor,
|
|
9
|
-
getBojSessionCookie,
|
|
10
|
-
getCodeOpen,
|
|
11
8
|
getDefaultLanguage,
|
|
12
9
|
getEditor,
|
|
13
10
|
getProblemDir,
|
|
14
|
-
getSolvedAcHandle
|
|
15
|
-
|
|
16
|
-
setBojSessionCookie,
|
|
17
|
-
setCodeOpen,
|
|
18
|
-
setDefaultLanguage,
|
|
19
|
-
setEditor,
|
|
20
|
-
setProblemDir,
|
|
21
|
-
setSolvedAcHandle
|
|
22
|
-
} from "../chunk-63CK6URL.js";
|
|
11
|
+
getSolvedAcHandle
|
|
12
|
+
} from "../chunk-CIG2LEJC.js";
|
|
23
13
|
import "../chunk-FYS2JH42.js";
|
|
24
14
|
|
|
25
15
|
// src/commands/config.tsx
|
|
16
|
+
import React from "react";
|
|
26
17
|
import { render, Text, Box } from "ink";
|
|
18
|
+
import { StatusMessage, Select, TextInput, Alert } from "@inkjs/ui";
|
|
19
|
+
import { readFile, writeFile, unlink } from "fs/promises";
|
|
20
|
+
import { join } from "path";
|
|
21
|
+
import { existsSync } from "fs";
|
|
27
22
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
23
|
+
function getProjectConfigPath() {
|
|
24
|
+
return join(process.cwd(), ".ps-cli.json");
|
|
25
|
+
}
|
|
26
|
+
async function readProjectConfig() {
|
|
27
|
+
const configPath = getProjectConfigPath();
|
|
28
|
+
if (!existsSync(configPath)) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const content = await readFile(configPath, "utf-8");
|
|
33
|
+
return JSON.parse(content);
|
|
34
|
+
} catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function writeProjectConfig(config) {
|
|
39
|
+
const configPath = getProjectConfigPath();
|
|
40
|
+
await writeFile(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
41
|
+
}
|
|
28
42
|
function getConfigHelp() {
|
|
29
43
|
return `
|
|
30
44
|
\uC0AC\uC6A9\uBC95:
|
|
31
|
-
$ ps config
|
|
32
|
-
$ ps config
|
|
33
|
-
$ ps config
|
|
45
|
+
$ ps config get [\uD0A4]
|
|
46
|
+
$ ps config set [\uD0A4]
|
|
47
|
+
$ ps config list
|
|
34
48
|
$ ps config clear
|
|
35
49
|
|
|
36
50
|
\uC124\uBA85:
|
|
37
|
-
\
|
|
38
|
-
\uC124\uC815\uC740
|
|
51
|
+
\uD504\uB85C\uC81D\uD2B8 \uC124\uC815 \uD30C\uC77C(.ps-cli.json)\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4.
|
|
52
|
+
\uC124\uC815\uC740 \uD604\uC7AC \uD504\uB85C\uC81D\uD2B8\uC758 .ps-cli.json \uD30C\uC77C\uC5D0 \uC800\uC7A5\uB429\uB2C8\uB2E4.
|
|
53
|
+
|
|
54
|
+
\uBA85\uB839\uC5B4:
|
|
55
|
+
get [\uD0A4] \uC124\uC815 \uAC12 \uC870\uD68C (\uD0A4 \uC5C6\uC73C\uBA74 \uB300\uD654\uD615 \uC120\uD0DD)
|
|
56
|
+
set [\uD0A4] \uC124\uC815 \uAC12 \uC124\uC815 (\uD0A4 \uC5C6\uC73C\uBA74 \uB300\uD654\uD615 \uC120\uD0DD)
|
|
57
|
+
list \uBAA8\uB4E0 \uC124\uC815 \uC870\uD68C
|
|
58
|
+
clear .ps-cli.json \uD30C\uC77C \uC0AD\uC81C
|
|
39
59
|
|
|
40
60
|
\uC124\uC815 \uD0A4:
|
|
41
|
-
boj-session-cookie BOJ \uC138\uC158 \uCFE0\uD0A4
|
|
42
61
|
default-language \uAE30\uBCF8 \uC5B8\uC5B4 (${getSupportedLanguagesString()})
|
|
43
|
-
code-open \uCF54\uB4DC \uACF5\uAC1C \uC5EC\uBD80 (true/false)
|
|
44
62
|
editor \uC5D0\uB514\uD130 \uBA85\uB839\uC5B4 (\uC608: code, vim, nano)
|
|
45
63
|
auto-open-editor fetch \uD6C4 \uC790\uB3D9\uC73C\uB85C \uC5D0\uB514\uD130 \uC5F4\uAE30 (true/false)
|
|
46
64
|
solved-ac-handle Solved.ac \uD578\uB4E4 (stats \uBA85\uB839\uC5B4\uC6A9)
|
|
47
65
|
problem-dir \uBB38\uC81C \uB514\uB809\uD1A0\uB9AC \uACBD\uB85C (\uAE30\uBCF8\uAC12: problems, "." \uB610\uB294 ""\uB294 \uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8)
|
|
48
66
|
|
|
49
67
|
\uC635\uC158:
|
|
50
|
-
--get \uC124\uC815 \uAC12 \uC870\uD68C
|
|
51
|
-
--list \uBAA8\uB4E0 \uC124\uC815 \uC870\uD68C
|
|
52
|
-
clear \uBAA8\uB4E0 \uC124\uC815 \uCD08\uAE30\uD654
|
|
53
68
|
--help, -h \uB3C4\uC6C0\uB9D0 \uD45C\uC2DC
|
|
54
69
|
|
|
55
70
|
\uC608\uC81C:
|
|
56
|
-
$ ps config
|
|
57
|
-
$ ps config default-language
|
|
58
|
-
$ ps config
|
|
59
|
-
$ ps config
|
|
60
|
-
$ ps config
|
|
61
|
-
$ ps config
|
|
62
|
-
$ ps config --list
|
|
63
|
-
$ ps config clear # \uBAA8\uB4E0 \uC124\uC815 \uCD08\uAE30\uD654
|
|
71
|
+
$ ps config get # \uB300\uD654\uD615\uC73C\uB85C \uD0A4 \uC120\uD0DD \uD6C4 \uAC12 \uC870\uD68C
|
|
72
|
+
$ ps config get default-language # default-language \uAC12 \uC870\uD68C
|
|
73
|
+
$ ps config set # \uB300\uD654\uD615\uC73C\uB85C \uD0A4 \uC120\uD0DD \uD6C4 \uAC12 \uC124\uC815
|
|
74
|
+
$ ps config set editor cursor # editor\uB97C cursor\uB85C \uC124\uC815
|
|
75
|
+
$ ps config list # \uBAA8\uB4E0 \uC124\uC815 \uC870\uD68C
|
|
76
|
+
$ ps config clear # .ps-cli.json \uD30C\uC77C \uC0AD\uC81C
|
|
64
77
|
`;
|
|
65
78
|
}
|
|
66
79
|
var configHelp = getConfigHelp();
|
|
@@ -72,48 +85,110 @@ function ConfigCommand({
|
|
|
72
85
|
clear,
|
|
73
86
|
onComplete
|
|
74
87
|
}) {
|
|
88
|
+
const [config, setConfig] = React.useState(null);
|
|
89
|
+
const [loading, setLoading] = React.useState(true);
|
|
90
|
+
const [cleared, setCleared] = React.useState(false);
|
|
91
|
+
const [saved, setSaved] = React.useState(false);
|
|
92
|
+
React.useEffect(() => {
|
|
93
|
+
async function loadConfig() {
|
|
94
|
+
const projectConfig = await readProjectConfig();
|
|
95
|
+
setConfig(projectConfig);
|
|
96
|
+
setLoading(false);
|
|
97
|
+
}
|
|
98
|
+
void loadConfig();
|
|
99
|
+
}, []);
|
|
100
|
+
React.useEffect(() => {
|
|
101
|
+
if (clear && !cleared) {
|
|
102
|
+
void (async () => {
|
|
103
|
+
const configPath = getProjectConfigPath();
|
|
104
|
+
if (existsSync(configPath)) {
|
|
105
|
+
await unlink(configPath);
|
|
106
|
+
}
|
|
107
|
+
setCleared(true);
|
|
108
|
+
})();
|
|
109
|
+
}
|
|
110
|
+
}, [clear, cleared]);
|
|
111
|
+
React.useEffect(() => {
|
|
112
|
+
if (configKey && value !== void 0 && !saved) {
|
|
113
|
+
void (async () => {
|
|
114
|
+
const currentConfig = await readProjectConfig() ?? {};
|
|
115
|
+
let updatedConfig = { ...currentConfig };
|
|
116
|
+
switch (configKey) {
|
|
117
|
+
case "default-language": {
|
|
118
|
+
const supportedLanguages = getSupportedLanguages();
|
|
119
|
+
if (!supportedLanguages.includes(value)) {
|
|
120
|
+
console.error(
|
|
121
|
+
`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC5B8\uC5B4\uC785\uB2C8\uB2E4: ${value}
|
|
122
|
+
\uC9C0\uC6D0 \uC5B8\uC5B4: ${getSupportedLanguagesString()}`
|
|
123
|
+
);
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
updatedConfig.defaultLanguage = value;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
case "editor":
|
|
130
|
+
updatedConfig.editor = value;
|
|
131
|
+
break;
|
|
132
|
+
case "auto-open-editor":
|
|
133
|
+
updatedConfig.autoOpenEditor = value === "true";
|
|
134
|
+
break;
|
|
135
|
+
case "solved-ac-handle":
|
|
136
|
+
updatedConfig.solvedAcHandle = value;
|
|
137
|
+
break;
|
|
138
|
+
case "problem-dir":
|
|
139
|
+
updatedConfig.problemDir = value;
|
|
140
|
+
break;
|
|
141
|
+
default:
|
|
142
|
+
console.error(`\uC54C \uC218 \uC5C6\uB294 \uC124\uC815 \uD0A4: ${configKey}`);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
await writeProjectConfig(updatedConfig);
|
|
146
|
+
setSaved(true);
|
|
147
|
+
})();
|
|
148
|
+
}
|
|
149
|
+
}, [configKey, value, saved]);
|
|
150
|
+
if (loading) {
|
|
151
|
+
return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(StatusMessage, { variant: "info", children: "\uC124\uC815\uC744 \uBD88\uB7EC\uC624\uB294 \uC911..." }) });
|
|
152
|
+
}
|
|
75
153
|
if (clear) {
|
|
76
|
-
|
|
77
|
-
|
|
154
|
+
if (!cleared) {
|
|
155
|
+
return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(StatusMessage, { variant: "info", children: ".ps-cli.json \uD30C\uC77C\uC744 \uC0AD\uC81C\uD558\uB294 \uC911..." }) });
|
|
156
|
+
}
|
|
157
|
+
return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Alert, { variant: "success", children: ".ps-cli.json \uD30C\uC77C\uC774 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4." }) });
|
|
78
158
|
}
|
|
79
159
|
if (list) {
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
const
|
|
84
|
-
const
|
|
85
|
-
const handle = getSolvedAcHandle();
|
|
160
|
+
const defaultLang = config?.defaultLanguage ?? getDefaultLanguage();
|
|
161
|
+
const editor = config?.editor ?? getEditor();
|
|
162
|
+
const autoOpen = config?.autoOpenEditor ?? getAutoOpenEditor();
|
|
163
|
+
const handle = config?.solvedAcHandle ?? getSolvedAcHandle();
|
|
164
|
+
const problemDir = config?.problemDir ?? getProblemDir();
|
|
86
165
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
87
|
-
/* @__PURE__ */ jsx(Box, { marginBottom: 1, children: /* @__PURE__ */ jsx(Text, { bold: true, children: "\uD604\uC7AC \uC124\uC815
|
|
88
|
-
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
89
|
-
/* @__PURE__ */ jsxs(
|
|
90
|
-
"
|
|
91
|
-
" ",
|
|
92
|
-
/* @__PURE__ */ jsx(Text, { color: bojCookie ? "green" : "gray", children: bojCookie ? "\uC124\uC815\uB428" : "\uC124\uC815 \uC548 \uB428" })
|
|
93
|
-
] }),
|
|
94
|
-
/* @__PURE__ */ jsxs(Text, { children: [
|
|
95
|
-
"default-language: ",
|
|
166
|
+
/* @__PURE__ */ jsx(Box, { marginBottom: 1, children: /* @__PURE__ */ jsx(Text, { color: "cyan", bold: true, children: "\u2699\uFE0F \uD604\uC7AC \uC124\uC815 (.ps-cli.json)" }) }),
|
|
167
|
+
/* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
|
|
168
|
+
/* @__PURE__ */ jsxs(Box, { marginBottom: 1, children: [
|
|
169
|
+
/* @__PURE__ */ jsx(Text, { color: "gray", children: "default-language:" }),
|
|
170
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
96
171
|
/* @__PURE__ */ jsx(Text, { bold: true, children: defaultLang })
|
|
97
172
|
] }),
|
|
98
|
-
/* @__PURE__ */ jsxs(
|
|
99
|
-
"
|
|
100
|
-
/* @__PURE__ */ jsx(Text, {
|
|
101
|
-
] }),
|
|
102
|
-
/* @__PURE__ */ jsxs(Text, { children: [
|
|
103
|
-
"editor: ",
|
|
173
|
+
/* @__PURE__ */ jsxs(Box, { marginBottom: 1, children: [
|
|
174
|
+
/* @__PURE__ */ jsx(Text, { color: "gray", children: "editor:" }),
|
|
175
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
104
176
|
/* @__PURE__ */ jsx(Text, { bold: true, children: editor })
|
|
105
177
|
] }),
|
|
106
|
-
/* @__PURE__ */ jsxs(
|
|
107
|
-
"auto-open-editor:
|
|
108
|
-
/* @__PURE__ */ jsx(Text, {
|
|
178
|
+
/* @__PURE__ */ jsxs(Box, { marginBottom: 1, children: [
|
|
179
|
+
/* @__PURE__ */ jsx(Text, { color: "gray", children: "auto-open-editor:" }),
|
|
180
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
181
|
+
/* @__PURE__ */ jsx(Text, { bold: true, color: autoOpen ? "green" : "gray", children: autoOpen ? "true" : "false" })
|
|
109
182
|
] }),
|
|
110
|
-
/* @__PURE__ */ jsxs(
|
|
111
|
-
"solved-ac-handle:
|
|
112
|
-
/* @__PURE__ */ jsx(Text, {
|
|
183
|
+
/* @__PURE__ */ jsxs(Box, { marginBottom: 1, children: [
|
|
184
|
+
/* @__PURE__ */ jsx(Text, { color: "gray", children: "solved-ac-handle:" }),
|
|
185
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
186
|
+
/* @__PURE__ */ jsx(Text, { bold: true, color: handle ? "cyan" : "gray", children: handle || "\uC124\uC815 \uC548 \uB428" })
|
|
113
187
|
] }),
|
|
114
|
-
/* @__PURE__ */ jsxs(
|
|
115
|
-
"problem-dir:
|
|
116
|
-
/* @__PURE__ */ jsx(Text, {
|
|
188
|
+
/* @__PURE__ */ jsxs(Box, { marginBottom: 1, children: [
|
|
189
|
+
/* @__PURE__ */ jsx(Text, { color: "gray", children: "problem-dir:" }),
|
|
190
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
191
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: problemDir })
|
|
117
192
|
] })
|
|
118
193
|
] })
|
|
119
194
|
] });
|
|
@@ -121,74 +196,42 @@ function ConfigCommand({
|
|
|
121
196
|
if (get && configKey) {
|
|
122
197
|
let configValue;
|
|
123
198
|
switch (configKey) {
|
|
124
|
-
case "boj-session-cookie":
|
|
125
|
-
configValue = getBojSessionCookie();
|
|
126
|
-
break;
|
|
127
199
|
case "default-language":
|
|
128
|
-
configValue = getDefaultLanguage();
|
|
129
|
-
break;
|
|
130
|
-
case "code-open":
|
|
131
|
-
configValue = getCodeOpen() ? "true" : "false";
|
|
200
|
+
configValue = config?.defaultLanguage ?? getDefaultLanguage();
|
|
132
201
|
break;
|
|
133
202
|
case "editor":
|
|
134
|
-
configValue = getEditor();
|
|
203
|
+
configValue = config?.editor ?? getEditor();
|
|
135
204
|
break;
|
|
136
205
|
case "auto-open-editor":
|
|
137
|
-
configValue =
|
|
206
|
+
configValue = config?.autoOpenEditor !== void 0 ? String(config.autoOpenEditor) : String(getAutoOpenEditor());
|
|
138
207
|
break;
|
|
139
208
|
case "solved-ac-handle":
|
|
140
|
-
configValue = getSolvedAcHandle();
|
|
209
|
+
configValue = config?.solvedAcHandle ?? getSolvedAcHandle();
|
|
141
210
|
break;
|
|
142
211
|
case "problem-dir":
|
|
143
|
-
configValue = getProblemDir();
|
|
212
|
+
configValue = config?.problemDir ?? getProblemDir();
|
|
144
213
|
break;
|
|
145
214
|
default:
|
|
146
215
|
console.error(`\uC54C \uC218 \uC5C6\uB294 \uC124\uC815 \uD0A4: ${configKey}`);
|
|
147
216
|
process.exit(1);
|
|
148
217
|
}
|
|
149
|
-
return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */
|
|
218
|
+
return /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: 1, children: /* @__PURE__ */ jsxs(Box, { children: [
|
|
219
|
+
/* @__PURE__ */ jsxs(Text, { color: "gray", children: [
|
|
220
|
+
configKey,
|
|
221
|
+
":"
|
|
222
|
+
] }),
|
|
223
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
224
|
+
/* @__PURE__ */ jsx(Text, { bold: true, color: configValue ? "cyan" : "gray", children: configValue || "(\uC124\uC815 \uC548 \uB428)" })
|
|
225
|
+
] }) });
|
|
150
226
|
}
|
|
151
227
|
if (configKey && value !== void 0) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
setBojSessionCookie(value);
|
|
155
|
-
break;
|
|
156
|
-
case "default-language":
|
|
157
|
-
const supportedLanguages = getSupportedLanguages();
|
|
158
|
-
if (!supportedLanguages.includes(value)) {
|
|
159
|
-
console.error(
|
|
160
|
-
`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC5B8\uC5B4\uC785\uB2C8\uB2E4: ${value}
|
|
161
|
-
\uC9C0\uC6D0 \uC5B8\uC5B4: ${getSupportedLanguagesString()}`
|
|
162
|
-
);
|
|
163
|
-
process.exit(1);
|
|
164
|
-
}
|
|
165
|
-
setDefaultLanguage(value);
|
|
166
|
-
break;
|
|
167
|
-
case "code-open":
|
|
168
|
-
setCodeOpen(value === "true");
|
|
169
|
-
break;
|
|
170
|
-
case "editor":
|
|
171
|
-
setEditor(value);
|
|
172
|
-
break;
|
|
173
|
-
case "auto-open-editor":
|
|
174
|
-
setAutoOpenEditor(value === "true");
|
|
175
|
-
break;
|
|
176
|
-
case "solved-ac-handle":
|
|
177
|
-
setSolvedAcHandle(value);
|
|
178
|
-
break;
|
|
179
|
-
case "problem-dir":
|
|
180
|
-
setProblemDir(value);
|
|
181
|
-
break;
|
|
182
|
-
default:
|
|
183
|
-
console.error(`\uC54C \uC218 \uC5C6\uB294 \uC124\uC815 \uD0A4: ${configKey}`);
|
|
184
|
-
process.exit(1);
|
|
228
|
+
if (!saved) {
|
|
229
|
+
return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(StatusMessage, { variant: "info", children: "\uC124\uC815\uC744 \uC800\uC7A5\uD558\uB294 \uC911..." }) });
|
|
185
230
|
}
|
|
186
|
-
return /* @__PURE__ */
|
|
187
|
-
"
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
value
|
|
191
|
-
] }) });
|
|
231
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
232
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Alert, { variant: "success", children: "\uC124\uC815\uC774 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4" }) }),
|
|
233
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { bold: true, children: value }) })
|
|
234
|
+
] });
|
|
192
235
|
}
|
|
193
236
|
return null;
|
|
194
237
|
}
|
|
@@ -216,39 +259,189 @@ async function configCommand(configKey, value, get, list, clear) {
|
|
|
216
259
|
}, 100);
|
|
217
260
|
});
|
|
218
261
|
}
|
|
262
|
+
var CONFIG_KEYS = [
|
|
263
|
+
{ label: "default-language", value: "default-language" },
|
|
264
|
+
{ label: "editor", value: "editor" },
|
|
265
|
+
{ label: "auto-open-editor", value: "auto-open-editor" },
|
|
266
|
+
{ label: "solved-ac-handle", value: "solved-ac-handle" },
|
|
267
|
+
{ label: "problem-dir", value: "problem-dir" }
|
|
268
|
+
];
|
|
269
|
+
function ConfigKeySelector({ onSelect }) {
|
|
270
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
271
|
+
/* @__PURE__ */ jsx(Box, { marginBottom: 1, children: /* @__PURE__ */ jsx(Text, { color: "cyan", bold: true, children: "\u2699\uFE0F \uC124\uC815 \uAD00\uB9AC" }) }),
|
|
272
|
+
/* @__PURE__ */ jsx(Alert, { variant: "info", children: "\uC124\uC815 \uD0A4\uB97C \uC120\uD0DD\uD558\uC138\uC694" }),
|
|
273
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(
|
|
274
|
+
Select,
|
|
275
|
+
{
|
|
276
|
+
options: CONFIG_KEYS,
|
|
277
|
+
onChange: (value) => {
|
|
278
|
+
onSelect(value);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
) })
|
|
282
|
+
] });
|
|
283
|
+
}
|
|
284
|
+
async function selectConfigKey() {
|
|
285
|
+
return new Promise((resolve) => {
|
|
286
|
+
const { unmount } = render(
|
|
287
|
+
/* @__PURE__ */ jsx(
|
|
288
|
+
ConfigKeySelector,
|
|
289
|
+
{
|
|
290
|
+
onSelect: (key) => {
|
|
291
|
+
unmount();
|
|
292
|
+
resolve(key);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
)
|
|
296
|
+
);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
function ConfigValueInput({
|
|
300
|
+
configKey,
|
|
301
|
+
onSubmit
|
|
302
|
+
}) {
|
|
303
|
+
const getPlaceholder = () => {
|
|
304
|
+
switch (configKey) {
|
|
305
|
+
case "default-language":
|
|
306
|
+
return `\uC5B8\uC5B4 \uC785\uB825 (${getSupportedLanguagesString()})`;
|
|
307
|
+
case "editor":
|
|
308
|
+
return "\uC5D0\uB514\uD130 \uBA85\uB839\uC5B4 \uC785\uB825";
|
|
309
|
+
case "auto-open-editor":
|
|
310
|
+
return "true \uB610\uB294 false \uC785\uB825";
|
|
311
|
+
case "solved-ac-handle":
|
|
312
|
+
return "Solved.ac \uD578\uB4E4 \uC785\uB825";
|
|
313
|
+
case "problem-dir":
|
|
314
|
+
return "\uBB38\uC81C \uB514\uB809\uD1A0\uB9AC \uACBD\uB85C \uC785\uB825";
|
|
315
|
+
default:
|
|
316
|
+
return "\uAC12 \uC785\uB825";
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
const getDescription = () => {
|
|
320
|
+
switch (configKey) {
|
|
321
|
+
case "default-language":
|
|
322
|
+
return `\uC9C0\uC6D0 \uC5B8\uC5B4: ${getSupportedLanguagesString()}`;
|
|
323
|
+
case "editor":
|
|
324
|
+
return "\uC608: code, cursor, vim, nano";
|
|
325
|
+
case "auto-open-editor":
|
|
326
|
+
return "fetch \uD6C4 \uC790\uB3D9\uC73C\uB85C \uC5D0\uB514\uD130\uB97C \uC5F4\uC9C0 \uC5EC\uBD80";
|
|
327
|
+
case "solved-ac-handle":
|
|
328
|
+
return "Solved.ac \uC0AC\uC6A9\uC790 \uD578\uB4E4";
|
|
329
|
+
case "problem-dir":
|
|
330
|
+
return '\uBB38\uC81C \uB514\uB809\uD1A0\uB9AC \uACBD\uB85C (\uAE30\uBCF8\uAC12: "problems", \uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8: ".")';
|
|
331
|
+
default:
|
|
332
|
+
return "";
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
const getSuggestions = () => {
|
|
336
|
+
switch (configKey) {
|
|
337
|
+
case "default-language":
|
|
338
|
+
return getSupportedLanguages();
|
|
339
|
+
case "editor":
|
|
340
|
+
return ["code", "cursor", "vim", "nano"];
|
|
341
|
+
case "auto-open-editor":
|
|
342
|
+
return ["true", "false"];
|
|
343
|
+
case "problem-dir":
|
|
344
|
+
return ["problems", ".", ""];
|
|
345
|
+
default:
|
|
346
|
+
return [];
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
350
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Alert, { variant: "info", children: "\uAC12\uC744 \uC785\uB825\uD558\uC138\uC694" }) }),
|
|
351
|
+
getDescription() && /* @__PURE__ */ jsx(Box, { marginTop: 1, marginBottom: 0, children: /* @__PURE__ */ jsx(Text, { color: "gray", dimColor: true, children: getDescription() }) }),
|
|
352
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 0, children: /* @__PURE__ */ jsx(
|
|
353
|
+
TextInput,
|
|
354
|
+
{
|
|
355
|
+
placeholder: getPlaceholder(),
|
|
356
|
+
suggestions: getSuggestions(),
|
|
357
|
+
onSubmit: (value) => {
|
|
358
|
+
onSubmit(value);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
) })
|
|
362
|
+
] });
|
|
363
|
+
}
|
|
364
|
+
async function inputConfigValue(configKey) {
|
|
365
|
+
return new Promise((resolve) => {
|
|
366
|
+
const { unmount } = render(
|
|
367
|
+
/* @__PURE__ */ jsx(
|
|
368
|
+
ConfigValueInput,
|
|
369
|
+
{
|
|
370
|
+
configKey,
|
|
371
|
+
onSubmit: (value) => {
|
|
372
|
+
unmount();
|
|
373
|
+
resolve(value);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
)
|
|
377
|
+
);
|
|
378
|
+
});
|
|
379
|
+
}
|
|
219
380
|
async function configExecute(args, flags) {
|
|
220
381
|
if (flags.help) {
|
|
221
382
|
console.log(getConfigHelp().trim());
|
|
222
383
|
process.exit(0);
|
|
223
384
|
return;
|
|
224
385
|
}
|
|
225
|
-
|
|
386
|
+
const command = args[0];
|
|
387
|
+
if (command === "clear") {
|
|
226
388
|
await configCommand(void 0, void 0, false, false, true);
|
|
227
389
|
return;
|
|
228
390
|
}
|
|
229
|
-
if (flags.list) {
|
|
391
|
+
if (command === "list" || flags.list) {
|
|
230
392
|
await configCommand(void 0, void 0, false, true);
|
|
231
393
|
return;
|
|
232
394
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
395
|
+
if (command === "get") {
|
|
396
|
+
const key = args[1];
|
|
397
|
+
if (key) {
|
|
398
|
+
await configCommand(key, void 0, true, false);
|
|
399
|
+
} else {
|
|
400
|
+
const selectedKey = await selectConfigKey();
|
|
401
|
+
if (!selectedKey) {
|
|
402
|
+
process.exit(0);
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
await configCommand(selectedKey, void 0, true, false);
|
|
406
|
+
}
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
if (command === "set") {
|
|
410
|
+
const key = args[1];
|
|
411
|
+
if (key) {
|
|
412
|
+
const inputValue = await inputConfigValue(key);
|
|
413
|
+
if (!inputValue) {
|
|
414
|
+
process.exit(0);
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
await configCommand(key, inputValue, false, false);
|
|
418
|
+
} else {
|
|
419
|
+
const selectedKey = await selectConfigKey();
|
|
420
|
+
if (!selectedKey) {
|
|
421
|
+
process.exit(0);
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
const inputValue = await inputConfigValue(selectedKey);
|
|
425
|
+
if (!inputValue) {
|
|
426
|
+
process.exit(0);
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
await configCommand(selectedKey, inputValue, false, false);
|
|
430
|
+
}
|
|
431
|
+
return;
|
|
241
432
|
}
|
|
242
|
-
if (
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
console.error("\uC624\uB958: \uC124\uC815 \uAC12\uC744 \uC785\uB825\uD558\uAC70\uB098 --get \uC635\uC158\uC744 \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694.");
|
|
248
|
-
console.error(`\uC0AC\uC6A9\uBC95: ps config <\uD0A4> <\uAC12>`);
|
|
249
|
-
console.error(`\uC0AC\uC6A9\uBC95: ps config <\uD0A4> --get`);
|
|
433
|
+
if (!command) {
|
|
434
|
+
console.error("\uC624\uB958: \uBA85\uB839\uC5B4\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.");
|
|
435
|
+
console.error("\uC0AC\uC6A9\uBC95: ps config <\uBA85\uB839\uC5B4>");
|
|
436
|
+
console.error("\uBA85\uB839\uC5B4: get, set, list, clear");
|
|
437
|
+
console.error("\uB3C4\uC6C0\uB9D0: ps config --help");
|
|
250
438
|
process.exit(1);
|
|
439
|
+
return;
|
|
251
440
|
}
|
|
441
|
+
console.error(`\uC624\uB958: \uC54C \uC218 \uC5C6\uB294 \uBA85\uB839\uC5B4: ${command}`);
|
|
442
|
+
console.error("\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uBA85\uB839\uC5B4: get, set, list, clear");
|
|
443
|
+
console.error("\uB3C4\uC6C0\uB9D0: ps config --help");
|
|
444
|
+
process.exit(1);
|
|
252
445
|
}
|
|
253
446
|
var configCommandDef = {
|
|
254
447
|
name: "config",
|