init: set up new branch with refactor to typescript - #2
Conversation
| test.js | ||
| test.txt No newline at end of file | ||
| test.txt | ||
| node_modules No newline at end of file |
There was a problem hiding this comment.
| node_modules | |
| node_modules/ |
| await fn(args); | ||
| } catch (cause) { | ||
| } catch (error) { | ||
| // @ts-ignore |
There was a problem hiding this comment.
Чтобы тут избежать ts-ignore тебе нужно внятно описать тип твоего сервиса. Помимо Promise он так же должен возвращать Error(), который ты обрабатываешь внутри своих команд. Как следствие - try catch на этом уровне будет резолвить error как Error
| root: string; | ||
| } | ||
|
|
||
| export const getTruePath = async (inputPath: string): Promise<string> => { |
There was a problem hiding this comment.
В чем смысл этой функции и чем это отличается от той, что ты назвал стором?
There was a problem hiding this comment.
Смысл в том, чтобы отображать путь к файлам в оригинальном регистре.
There was a problem hiding this comment.
store.currentDir даёт доступ всем службам к текущему пути каким бы он ни был в настоящий момент времени.
There was a problem hiding this comment.
т.e. это повторяет функционал того, что ты используешь для получения полного пути к файлу в mkdir, например?
There was a problem hiding this comment.
Я это к чему - стремись создавать меньше дубликатов. Если ты видишь, что функционал схож - создавай common функцию, которая будет отвечать за правильный путь до файла, например. Тогда это будет один источник правда и в случае внесения изменений ты отредактируешь только его
There was a problem hiding this comment.
т.e. это повторяет функционал того, что ты используешь для получения полного пути к файлу в mkdir, например?
Не, это другое. Но я суть уловил.
|
|
||
| export const logGoodbyeMsg = (username) => { | ||
| export const logGoodbyeMsg = (username: string) => { | ||
| console.log('\r' + MESSAGE_GOODBYE, getColorizedMsg({ msg: username }) + ', goodbye!'); |
There was a problem hiding this comment.
Проще реализовать свой логгер, который под капотом будет делать что нужно с getColorizedMsg.
Типа:
Logger.error(), Logger.warn(), которые будут принимать текст и сами вызывать getColorizedMsg с нужными параметрами. Тогда ты сможешь свой логгер по всему проекту использовать как общее решение
| @@ -0,0 +1,7 @@ | |||
| export type ServiceArgs = string[]; | |||
|
|
|||
| export type ServiceCommand<T extends ServiceArgs = ServiceArgs> = (args: T) => Promise<void>; | |||
There was a problem hiding this comment.
Вот этот тип должен быть не только Promise, но и Promise какой-нибудь, чтобы грамотно обрабатывать ошибки
| */ | ||
| export async function handleCommand(inputString) { | ||
| export async function handleCommand(inputString: string) { | ||
| const inputTokens = inputString.split(/\s+/); |
There was a problem hiding this comment.
Можно сделать нормально и забыть про анонимные массивы. Ты можешь заюзать что-нибудь из серии https://www.npmjs.com/package/minimist или https://www.npmjs.com/package/yargs, которые позволять тебе грамотно парсить команду и аргументы. Далее, это все в типы можно обернуть и вместо arg[0] в mkdir ты будешь использовать dirName
|
|
||
| const fn = services[command.toLowerCase()]; | ||
|
|
||
| if (typeof fn !== 'function') { |
There was a problem hiding this comment.
Вот эта проверка немного лишена смысла, потому что ты уже попытался присвоить fn какой-то объект не зная есть ли он там на самом деле.
Я бы делал что-то типа:
if (!Object.keys(services).includes(command) || !services[command]) {
return logInvalidInputErr();
}
const fn = services[command.toLowerCase()];
No description provided.