@rhseung/ps-cli 1.5.0 → 1.6.0
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-HDNNR5OY.js → chunk-ASMT3CRD.js} +1 -202
- package/dist/chunk-NH36IFWR.js +255 -0
- package/dist/{chunk-7SVCS23X.js → chunk-RVD22OUQ.js} +53 -25
- package/dist/commands/config.js +1 -1
- package/dist/commands/fetch.js +12 -15
- package/dist/commands/init.js +77 -22
- package/dist/commands/open.js +1 -1
- package/dist/commands/run.js +1 -1
- package/dist/commands/search.js +366 -102
- package/dist/commands/solve.js +163 -0
- package/dist/commands/stats.js +5 -5
- package/dist/commands/submit.js +1 -1
- package/dist/commands/test.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-A6STXEAE.js +0 -54
package/dist/commands/init.js
CHANGED
|
@@ -7,8 +7,9 @@ import {
|
|
|
7
7
|
getDefaultLanguage,
|
|
8
8
|
getEditor,
|
|
9
9
|
getProblemDir,
|
|
10
|
-
getSolvedAcHandle
|
|
11
|
-
|
|
10
|
+
getSolvedAcHandle,
|
|
11
|
+
getSolvingDir
|
|
12
|
+
} from "../chunk-RVD22OUQ.js";
|
|
12
13
|
import {
|
|
13
14
|
__decorateClass,
|
|
14
15
|
getSupportedLanguages
|
|
@@ -35,6 +36,7 @@ function useInit({ onComplete }) {
|
|
|
35
36
|
const [confirmExit, setConfirmExit] = useState(false);
|
|
36
37
|
const [initialized, setInitialized] = useState(false);
|
|
37
38
|
const [problemDir, setProblemDirValue] = useState(getProblemDir());
|
|
39
|
+
const [solvingDir, setSolvingDirValue] = useState(getSolvingDir());
|
|
38
40
|
const [language, setLanguage] = useState(getDefaultLanguage());
|
|
39
41
|
const [editor, setEditorValue] = useState(getEditor());
|
|
40
42
|
const [autoOpen, setAutoOpen] = useState(getAutoOpenEditor());
|
|
@@ -69,6 +71,8 @@ function useInit({ onComplete }) {
|
|
|
69
71
|
const projectConfig = JSON.parse(configContent);
|
|
70
72
|
if (projectConfig.problemDir)
|
|
71
73
|
setProblemDirValue(projectConfig.problemDir);
|
|
74
|
+
if (projectConfig.solvingDir)
|
|
75
|
+
setSolvingDirValue(projectConfig.solvingDir);
|
|
72
76
|
if (projectConfig.defaultLanguage)
|
|
73
77
|
setLanguage(projectConfig.defaultLanguage);
|
|
74
78
|
if (projectConfig.editor) setEditorValue(projectConfig.editor);
|
|
@@ -86,7 +90,9 @@ function useInit({ onComplete }) {
|
|
|
86
90
|
const getStepLabel = useCallback((step) => {
|
|
87
91
|
switch (step) {
|
|
88
92
|
case "problem-dir":
|
|
89
|
-
return "\uBB38\uC81C \uB514\uB809\uD1A0\uB9AC \uC124\uC815";
|
|
93
|
+
return "\uBB38\uC81C \uB514\uB809\uD1A0\uB9AC \uC124\uC815 (\uC544\uCE74\uC774\uBE0C\uB41C \uBB38\uC81C)";
|
|
94
|
+
case "solving-dir":
|
|
95
|
+
return "Solving \uB514\uB809\uD1A0\uB9AC \uC124\uC815 (\uD478\uB294 \uC911\uC778 \uBB38\uC81C)";
|
|
90
96
|
case "language":
|
|
91
97
|
return "\uAE30\uBCF8 \uC5B8\uC5B4 \uC124\uC815";
|
|
92
98
|
case "editor":
|
|
@@ -104,6 +110,8 @@ function useInit({ onComplete }) {
|
|
|
104
110
|
switch (step) {
|
|
105
111
|
case "problem-dir":
|
|
106
112
|
return problemDir === "." ? "\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8" : problemDir;
|
|
113
|
+
case "solving-dir":
|
|
114
|
+
return solvingDir === "." ? "\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8" : solvingDir;
|
|
107
115
|
case "language":
|
|
108
116
|
return language;
|
|
109
117
|
case "editor":
|
|
@@ -116,7 +124,7 @@ function useInit({ onComplete }) {
|
|
|
116
124
|
return "";
|
|
117
125
|
}
|
|
118
126
|
},
|
|
119
|
-
[problemDir, language, editor, autoOpen, handle]
|
|
127
|
+
[problemDir, solvingDir, language, editor, autoOpen, handle]
|
|
120
128
|
);
|
|
121
129
|
const executeInit = useCallback(async () => {
|
|
122
130
|
try {
|
|
@@ -124,6 +132,7 @@ function useInit({ onComplete }) {
|
|
|
124
132
|
const projectConfigPath = join(cwd, ".ps-cli.json");
|
|
125
133
|
const projectConfig = {
|
|
126
134
|
problemDir,
|
|
135
|
+
solvingDir,
|
|
127
136
|
defaultLanguage: language,
|
|
128
137
|
editor,
|
|
129
138
|
autoOpenEditor: autoOpen,
|
|
@@ -146,28 +155,50 @@ function useInit({ onComplete }) {
|
|
|
146
155
|
throw err;
|
|
147
156
|
}
|
|
148
157
|
}
|
|
149
|
-
|
|
150
|
-
|
|
158
|
+
}
|
|
159
|
+
if (solvingDir !== "." && solvingDir !== "") {
|
|
160
|
+
const solvingDirPath = join(cwd, solvingDir);
|
|
161
|
+
try {
|
|
162
|
+
await mkdir(solvingDirPath, { recursive: true });
|
|
163
|
+
setCreated((prev) => [...prev, `${solvingDir}/`]);
|
|
164
|
+
} catch (err) {
|
|
165
|
+
const error = err;
|
|
166
|
+
if (error.code !== "EEXIST") {
|
|
167
|
+
throw err;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const gitignorePath = join(cwd, ".gitignore");
|
|
172
|
+
const gitignorePatterns = [];
|
|
173
|
+
if (problemDir !== "." && problemDir !== "") {
|
|
174
|
+
gitignorePatterns.push(`${problemDir}/`);
|
|
175
|
+
}
|
|
176
|
+
if (solvingDir !== "." && solvingDir !== "") {
|
|
177
|
+
gitignorePatterns.push(`${solvingDir}/`);
|
|
178
|
+
}
|
|
179
|
+
if (gitignorePatterns.length > 0) {
|
|
151
180
|
try {
|
|
152
181
|
const gitignoreContent = await readFile(gitignorePath, "utf-8");
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
182
|
+
let updatedContent = gitignoreContent.trim();
|
|
183
|
+
let hasChanges = false;
|
|
184
|
+
for (const pattern of gitignorePatterns) {
|
|
185
|
+
if (!gitignoreContent.includes(pattern)) {
|
|
186
|
+
updatedContent += (updatedContent ? "\n" : "") + `# ps-cli \uBB38\uC81C \uB514\uB809\uD1A0\uB9AC
|
|
187
|
+
${pattern}`;
|
|
188
|
+
hasChanges = true;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (hasChanges) {
|
|
192
|
+
await writeFile(gitignorePath, updatedContent + "\n", "utf-8");
|
|
159
193
|
setCreated((prev) => [...prev, ".gitignore \uC5C5\uB370\uC774\uD2B8"]);
|
|
160
194
|
}
|
|
161
195
|
} catch (err) {
|
|
162
196
|
const error = err;
|
|
163
197
|
if (error.code === "ENOENT") {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
`,
|
|
169
|
-
"utf-8"
|
|
170
|
-
);
|
|
198
|
+
const content = `# ps-cli \uBB38\uC81C \uB514\uB809\uD1A0\uB9AC
|
|
199
|
+
${gitignorePatterns.join("\n")}
|
|
200
|
+
`;
|
|
201
|
+
await writeFile(gitignorePath, content, "utf-8");
|
|
171
202
|
setCreated((prev) => [...prev, ".gitignore \uC0DD\uC131"]);
|
|
172
203
|
} else {
|
|
173
204
|
console.warn(".gitignore \uC5C5\uB370\uC774\uD2B8 \uC2E4\uD328:", error.message);
|
|
@@ -187,9 +218,9 @@ ${gitignorePattern}
|
|
|
187
218
|
setCreated((prev) => [...prev, "Git \uC800\uC7A5\uC18C \uCD08\uAE30\uD654"]);
|
|
188
219
|
}
|
|
189
220
|
const filesToAdd = [".ps-cli.json"];
|
|
190
|
-
const
|
|
221
|
+
const gitignorePath2 = join(cwd, ".gitignore");
|
|
191
222
|
try {
|
|
192
|
-
await access(
|
|
223
|
+
await access(gitignorePath2);
|
|
193
224
|
filesToAdd.push(".gitignore");
|
|
194
225
|
} catch {
|
|
195
226
|
}
|
|
@@ -222,7 +253,7 @@ ${gitignorePattern}
|
|
|
222
253
|
onComplete();
|
|
223
254
|
}, 2e3);
|
|
224
255
|
}
|
|
225
|
-
}, [problemDir, language, editor, autoOpen, handle, onComplete]);
|
|
256
|
+
}, [problemDir, solvingDir, language, editor, autoOpen, handle, onComplete]);
|
|
226
257
|
const moveToNextStep = useCallback(
|
|
227
258
|
(selectedValue, stepLabel) => {
|
|
228
259
|
setCompletedSteps((prev) => [
|
|
@@ -231,6 +262,7 @@ ${gitignorePattern}
|
|
|
231
262
|
]);
|
|
232
263
|
const stepOrder = [
|
|
233
264
|
"problem-dir",
|
|
265
|
+
"solving-dir",
|
|
234
266
|
"language",
|
|
235
267
|
"editor",
|
|
236
268
|
"auto-open",
|
|
@@ -254,6 +286,7 @@ ${gitignorePattern}
|
|
|
254
286
|
confirmExit,
|
|
255
287
|
initialized,
|
|
256
288
|
problemDir,
|
|
289
|
+
solvingDir,
|
|
257
290
|
language,
|
|
258
291
|
editor,
|
|
259
292
|
autoOpen,
|
|
@@ -262,6 +295,7 @@ ${gitignorePattern}
|
|
|
262
295
|
created,
|
|
263
296
|
cancelled,
|
|
264
297
|
setProblemDirValue,
|
|
298
|
+
setSolvingDirValue,
|
|
265
299
|
setLanguage,
|
|
266
300
|
setEditorValue,
|
|
267
301
|
setAutoOpen,
|
|
@@ -288,6 +322,7 @@ function InitView({ onComplete }) {
|
|
|
288
322
|
created,
|
|
289
323
|
cancelled,
|
|
290
324
|
setProblemDirValue,
|
|
325
|
+
setSolvingDirValue,
|
|
291
326
|
setLanguage,
|
|
292
327
|
setEditorValue,
|
|
293
328
|
setAutoOpen,
|
|
@@ -352,6 +387,26 @@ function InitView({ onComplete }) {
|
|
|
352
387
|
)
|
|
353
388
|
);
|
|
354
389
|
}
|
|
390
|
+
case "solving-dir": {
|
|
391
|
+
const options = [
|
|
392
|
+
{ label: "solving", value: "solving" },
|
|
393
|
+
{ label: ". (\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8)", value: "." }
|
|
394
|
+
];
|
|
395
|
+
return renderQuestionCard(
|
|
396
|
+
getStepLabel(currentStep),
|
|
397
|
+
/* @__PURE__ */ jsx(
|
|
398
|
+
Select,
|
|
399
|
+
{
|
|
400
|
+
options,
|
|
401
|
+
onChange: (value) => {
|
|
402
|
+
setSolvingDirValue(value);
|
|
403
|
+
const displayValue = value === "." ? "\uD504\uB85C\uC81D\uD2B8 \uB8E8\uD2B8" : value;
|
|
404
|
+
moveToNextStep(displayValue, getStepLabel(currentStep));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
)
|
|
408
|
+
);
|
|
409
|
+
}
|
|
355
410
|
case "language": {
|
|
356
411
|
const supportedLanguages = getSupportedLanguages();
|
|
357
412
|
const options = supportedLanguages.map((lang) => ({
|
package/dist/commands/open.js
CHANGED