From 4c37420f044dc59873625b76f7798448d64091d5 Mon Sep 17 00:00:00 2001 From: Aviv Ben Shahar Date: Thu, 18 Apr 2024 16:51:09 +0300 Subject: [PATCH 1/2] chore: formatter improvements, install `@trivago/prettier-plugin-sort-imports` --- .eslintrc.js | 2 + .prettierrc | 14 +++++- package-lock.json | 125 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 4 files changed, 140 insertions(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index a8f5143b..815dc305 100755 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -28,8 +28,10 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': 'off', '@typescript-eslint/consistent-type-imports': 'error', 'no-unused-vars': 'off', + 'no-constant-condition': 'off', 'prettier/prettier': [ 'error', { diff --git a/.prettierrc b/.prettierrc index bec1f4a9..52600ad6 100755 --- a/.prettierrc +++ b/.prettierrc @@ -1,10 +1,20 @@ { + "$schema": "https://json.schemastore.org/prettierrc", "tabWidth": 4, "singleQuote": true, "trailingComma": "all", "semi": false, - "printWidth": 100, + "printWidth": 120, "importOrder": ["^@.*/(.*)$", "^[./]"], "importOrderSeparation": false, - "importOrderSortSpecifiers": true + "importOrderSortSpecifiers": true, + "plugins": ["@trivago/prettier-plugin-sort-imports"], + "overrides": [ + { + "files": ["*.ts"], + "options": { + "importOrderParserPlugins": ["typescript", "decorators-legacy"] + } + } + ] } diff --git a/package-lock.json b/package-lock.json index 824d4543..478518e3 100755 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,7 @@ "@semantic-release/git": "^10.0.1", "@semantic-release/github": "^10.0.3", "@semantic-release/release-notes-generator": "^13.0.0", + "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/express": "^4.17.21", "@types/inquirer": "^8.2.6", "@types/jest": "^29.5.12", @@ -3319,6 +3320,124 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@trivago/prettier-plugin-sort-imports": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz", + "integrity": "sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==", + "dev": true, + "dependencies": { + "@babel/generator": "7.17.7", + "@babel/parser": "^7.20.5", + "@babel/traverse": "7.23.2", + "@babel/types": "7.17.0", + "javascript-natural-sort": "0.7.1", + "lodash": "^4.17.21" + }, + "peerDependencies": { + "@vue/compiler-sfc": "3.x", + "prettier": "2.x - 3.x" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + } + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/generator": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/traverse/node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -8573,6 +8692,12 @@ "node": ">= 0.6.0" } }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true + }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", diff --git a/package.json b/package.json index b47f9127..503d27d4 100755 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "@semantic-release/git": "^10.0.1", "@semantic-release/github": "^10.0.3", "@semantic-release/release-notes-generator": "^13.0.0", + "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/express": "^4.17.21", "@types/inquirer": "^8.2.6", "@types/jest": "^29.5.12", From 3c405ea5d1f232df2a2ce11f2a5ccd356268d6d2 Mon Sep 17 00:00:00 2001 From: Aviv Ben Shahar Date: Thu, 18 Apr 2024 16:51:26 +0300 Subject: [PATCH 2/2] chore(format): format all project --- src/commands/assets/assets.command.ts | 10 ++----- src/commands/assets/config/inputs.config.ts | 1 + .../template-handle/replace-in-template.ts | 2 +- src/commands/external/external.command.ts | 2 +- .../sub-commands/delete.sub-command.ts | 4 +-- .../sub-commands/install.sub-command.spec.ts | 13 ++++----- .../sub-commands/install.sub-command.ts | 8 ++---- .../external/sub-commands/list.sub-command.ts | 4 +-- .../init-script/init-script.command.ts | 2 +- src/commands/init/init.command.ts | 15 ++++------ .../install/config/apps-groups/cli-apps.ts | 6 +--- .../install/config/apps-groups/node.ts | 3 +- .../install/config/apps-groups/terminal.ts | 12 ++------ src/commands/install/config/apps.config.ts | 15 +++------- .../install/config/common-commands.ts | 9 ++---- .../config/multi-select-apps.config.ts | 15 ++++++---- src/commands/install/install.command.ts | 6 ++-- .../config/multi-select-modules.config.ts | 28 +++++++++++-------- .../shell/config/shell-modules.config.ts | 15 ++++------ src/commands/shell/shell.command.ts | 27 ++++++------------ .../update/config/update-script.config.ts | 3 +- src/commands/update/update.command.spec.ts | 4 +-- src/commands/update/update.command.ts | 11 ++++---- src/common/constants.ts | 3 +- src/common/utils.ts | 11 ++------ src/main.ts | 2 +- src/services/check-update.service.ts | 22 +++++++-------- src/services/logger.service.ts | 6 ++-- 28 files changed, 102 insertions(+), 157 deletions(-) diff --git a/src/commands/assets/assets.command.ts b/src/commands/assets/assets.command.ts index b50a26f3..44845e45 100755 --- a/src/commands/assets/assets.command.ts +++ b/src/commands/assets/assets.command.ts @@ -1,14 +1,10 @@ +import { Command, CommandRunner } from 'nest-commander' +import { mkdir, readdir, writeFile } from 'node:fs/promises' import { execPromise } from '@common/utils' import { CheckUpdateService } from '@services/check-update.service' import { LoggerService } from '@services/logger.service' -import { Command, CommandRunner } from 'nest-commander' -import { mkdir, readdir, writeFile } from 'node:fs/promises' import type { AvailableActionIds } from './config/ constants.config' -import { - GIT_PROFILES_TARGET, - HELP_BOX_MESSAGE, - NPM_PROFILES_TARGET, -} from './config/ constants.config' +import { GIT_PROFILES_TARGET, HELP_BOX_MESSAGE, NPM_PROFILES_TARGET } from './config/ constants.config' import { ASK_FOR_ARTIFACTORY_KEY_PROMPT, ASK_FOR_CUSTOM_REGISTRY_AUTH_PROMPT, diff --git a/src/commands/assets/config/inputs.config.ts b/src/commands/assets/config/inputs.config.ts index 6dc4e102..1ec36ba3 100755 --- a/src/commands/assets/config/inputs.config.ts +++ b/src/commands/assets/config/inputs.config.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-useless-escape */ import { inquirer } from '@common/inquirer' import type { AvailableActionIds } from './ constants.config' import { AVAILABLE_ACTIONS } from './ constants.config' diff --git a/src/commands/assets/template-handle/replace-in-template.ts b/src/commands/assets/template-handle/replace-in-template.ts index 96b33c57..1a63c6cd 100755 --- a/src/commands/assets/template-handle/replace-in-template.ts +++ b/src/commands/assets/template-handle/replace-in-template.ts @@ -1,5 +1,5 @@ -import { resolveBundledAsset } from '@common/utils' import { readFile } from 'node:fs/promises' +import { resolveBundledAsset } from '@common/utils' import type { ReplacementTemplate } from './models/replacement.enum' export async function replaceInTemplate( diff --git a/src/commands/external/external.command.ts b/src/commands/external/external.command.ts index c02f8f1f..efab8e4f 100755 --- a/src/commands/external/external.command.ts +++ b/src/commands/external/external.command.ts @@ -1,5 +1,5 @@ -import { CheckUpdateService } from '@services/check-update.service' import { Command, CommandRunner } from 'nest-commander' +import { CheckUpdateService } from '@services/check-update.service' import { DeleteSubCommand, InstallSubCommand, ListSubCommand } from './sub-commands' @Command({ diff --git a/src/commands/external/sub-commands/delete.sub-command.ts b/src/commands/external/sub-commands/delete.sub-command.ts index 41e73f10..5cfc3285 100755 --- a/src/commands/external/sub-commands/delete.sub-command.ts +++ b/src/commands/external/sub-commands/delete.sub-command.ts @@ -1,7 +1,7 @@ -import { CheckUpdateService } from '@services/check-update.service' -import { LoggerService } from '@services/logger.service' import { CommandRunner, SubCommand } from 'nest-commander' import { readdir, rm } from 'node:fs/promises' +import { CheckUpdateService } from '@services/check-update.service' +import { LoggerService } from '@services/logger.service' import { EXTERNAL_REGISTRY_DIR_PATH } from '../config/constants' @SubCommand({ diff --git a/src/commands/external/sub-commands/install.sub-command.spec.ts b/src/commands/external/sub-commands/install.sub-command.spec.ts index 81319e2b..48b301d0 100755 --- a/src/commands/external/sub-commands/install.sub-command.spec.ts +++ b/src/commands/external/sub-commands/install.sub-command.spec.ts @@ -38,13 +38,10 @@ describe('InstallSubCommand', () => { { input: 'test.sh-shell.sh', expRes: 'test.sh-shell.sh' }, { input: 'test.sh-shell', expRes: 'test.sh-shell.sh' }, { input: 'test-shell', expRes: 'test-shell.sh' }, - ])( - 'should grab the name of the external with the extension of .sh', - ({ input, expRes }) => { - // @ts-expect-error - const res = service.parseExternalName(input) - expect(res).toEqual(expRes) - }, - ) + ])('should grab the name of the external with the extension of .sh', ({ input, expRes }) => { + // @ts-expect-error + const res = service.parseExternalName(input) + expect(res).toEqual(expRes) + }) }) }) diff --git a/src/commands/external/sub-commands/install.sub-command.ts b/src/commands/external/sub-commands/install.sub-command.ts index f79ec626..65b4b314 100755 --- a/src/commands/external/sub-commands/install.sub-command.ts +++ b/src/commands/external/sub-commands/install.sub-command.ts @@ -1,8 +1,8 @@ -import { LoggerService } from '@services/logger.service' import { CommandRunner, SubCommand } from 'nest-commander' import { existsSync } from 'node:fs' -import { CheckUpdateService } from '@services/check-update.service' import { copyFile, readdir } from 'node:fs/promises' +import { CheckUpdateService } from '@services/check-update.service' +import { LoggerService } from '@services/logger.service' import { EXTERNAL_REGISTRY_DIR_PATH } from '../config/constants' @SubCommand({ @@ -53,9 +53,7 @@ export class InstallSubCommand extends CommandRunner { await copyFile(filePath, `${EXTERNAL_REGISTRY_DIR_PATH}/${parsedExternalName}`) - this.logger.log( - `Installed external shell with name '${parsedExternalName}' successfully`, - ) + this.logger.log(`Installed external shell with name '${parsedExternalName}' successfully`) } catch (error) { this.logger.error(`Error InstallCommand, error: ${error.stack}`) } diff --git a/src/commands/external/sub-commands/list.sub-command.ts b/src/commands/external/sub-commands/list.sub-command.ts index 71a688ce..d77f1bb2 100755 --- a/src/commands/external/sub-commands/list.sub-command.ts +++ b/src/commands/external/sub-commands/list.sub-command.ts @@ -1,7 +1,7 @@ -import { CheckUpdateService } from '@services/check-update.service' -import { LoggerService } from '@services/logger.service' import { CommandRunner, SubCommand } from 'nest-commander' import { readdir } from 'node:fs/promises' +import { CheckUpdateService } from '@services/check-update.service' +import { LoggerService } from '@services/logger.service' import { EXTERNAL_REGISTRY_DIR_PATH } from '../config/constants' @SubCommand({ diff --git a/src/commands/init-script/init-script.command.ts b/src/commands/init-script/init-script.command.ts index a2e64a8e..d273906a 100755 --- a/src/commands/init-script/init-script.command.ts +++ b/src/commands/init-script/init-script.command.ts @@ -1,6 +1,6 @@ -import { BASE_PATH } from '@common/constants' import { access } from 'fs/promises' import { Command, CommandRunner } from 'nest-commander' +import { BASE_PATH } from '@common/constants' import { INIT_DYNAMIC_SCRIPT, OPEN_TERMINAL } from './config/init-script.config' @Command({ diff --git a/src/commands/init/init.command.ts b/src/commands/init/init.command.ts index 805608af..f44e36b8 100755 --- a/src/commands/init/init.command.ts +++ b/src/commands/init/init.command.ts @@ -1,13 +1,13 @@ -import { BASE_PATH } from '@common/constants' -import { copyBundledAsset, execPromise, resolveBundledAsset } from '@common/utils' -import { CheckUpdateService } from '@services/check-update.service' -import { LoggerService } from '@services/logger.service' import { Command, CommandRunner } from 'nest-commander' import { existsSync } from 'node:fs' import { appendFile, chmod, copyFile, mkdir, readFile, readdir, rename, rm } from 'node:fs/promises' import { homedir } from 'node:os' import { resolve } from 'node:path' import ora from 'ora' +import { BASE_PATH } from '@common/constants' +import { copyBundledAsset, execPromise, resolveBundledAsset } from '@common/utils' +import { CheckUpdateService } from '@services/check-update.service' +import { LoggerService } from '@services/logger.service' import { BREW_DIRECTORY, BREW_INSTALLATION_COMMAND, @@ -129,8 +129,7 @@ export class InitCommand extends CommandRunner { try { this.logger.debug(`Unpacking bundled assets to ${BASE_PATH}`) - const disabledExtendsFilesMap: Record = - await this.getCurrentExtendsDirDisabledFilesMap() + const disabledExtendsFilesMap: Record = await this.getCurrentExtendsDirDisabledFilesMap() await mkdir(`${BASE_PATH}/zsh`, { recursive: true }).catch(() => {}) await rm(`${BASE_PATH}/zsh/extends`, { recursive: true, force: true }).catch(() => {}) @@ -310,9 +309,7 @@ export class InitCommand extends CommandRunner { try { const extendsFiles: string[] = await this.getExtendsFiles() - const disabledFiles = extendsFiles.filter((fileName: string) => - fileName.endsWith('.disabled'), - ) + const disabledFiles = extendsFiles.filter((fileName: string) => fileName.endsWith('.disabled')) const disabledFilesMap: Record = disabledFiles.reduce((acc, curr) => { const originalName = curr.replace('.disabled', '') diff --git a/src/commands/install/config/apps-groups/cli-apps.ts b/src/commands/install/config/apps-groups/cli-apps.ts index 1f302d36..c1a926d1 100755 --- a/src/commands/install/config/apps-groups/cli-apps.ts +++ b/src/commands/install/config/apps-groups/cli-apps.ts @@ -62,11 +62,7 @@ export const CLI_APPS: Readonly = [ group: 'cli-apps', description: 'MongoDB Community Edition server', tags: ['engineering', 'devops'], - commands: () => [ - BREW_TAP('mongodb/brew'), - BREW_INSTALL('mongodb-community@6.0'), - 'mkdir -p "$HOME/mongodb"', - ], + commands: () => [BREW_TAP('mongodb/brew'), BREW_INSTALL('mongodb-community@6.0'), 'mkdir -p "$HOME/mongodb"'], fallbackCommands: () => [ BROW_TAP('mongodb/brew'), BROW_INSTALL('mongodb-community@6.0'), diff --git a/src/commands/install/config/apps-groups/node.ts b/src/commands/install/config/apps-groups/node.ts index 125d4fda..7f13158c 100755 --- a/src/commands/install/config/apps-groups/node.ts +++ b/src/commands/install/config/apps-groups/node.ts @@ -65,8 +65,7 @@ export const NODE_APPS: Readonly = [ }, { name: 'DPDM', - description: - 'A robust static dependency analyzer for your JavaScript and TypeScript projects', + description: 'A robust static dependency analyzer for your JavaScript and TypeScript projects', group: 'node', tags: ['engineering'], commands: () => [NODE_GLOBAL('dpdm')], diff --git a/src/commands/install/config/apps-groups/terminal.ts b/src/commands/install/config/apps-groups/terminal.ts index c045e035..5f909aec 100755 --- a/src/commands/install/config/apps-groups/terminal.ts +++ b/src/commands/install/config/apps-groups/terminal.ts @@ -1,12 +1,5 @@ import type { IAppSetup } from '@models/app-setup.model' -import { - BREW_CASK, - BREW_INSTALL, - BREW_TAP, - BROW_ALIAS, - BROW_INSTALL, - BROW_TAP, -} from '../common-commands' +import { BREW_CASK, BREW_INSTALL, BREW_TAP, BROW_ALIAS, BROW_INSTALL, BROW_TAP } from '../common-commands' export const TERMINAL_APPS: Readonly = [ { @@ -29,8 +22,7 @@ export const TERMINAL_APPS: Readonly = [ }, { name: 'Mcfly', - description: - 'Search & execute through your shell history, with context-aware suggestions and neural network.', + description: 'Search & execute through your shell history, with context-aware suggestions and neural network.', group: 'terminal', tags: ['engineering', 'devops', 'productivity'], commands: () => [BREW_TAP('cantino/mcfly'), BREW_INSTALL('cantino/mcfly/mcfly')], diff --git a/src/commands/install/config/apps.config.ts b/src/commands/install/config/apps.config.ts index b53100f2..f99ce281 100755 --- a/src/commands/install/config/apps.config.ts +++ b/src/commands/install/config/apps.config.ts @@ -1,14 +1,14 @@ import type { IAppSetup } from '@models/app-setup.model' import { APPS, + BROWSERS, CLI_APPS, + ENGINEERING_APPS, + IDES, MACOS, NODE_APPS, PYTHON, TERMINAL_APPS, - BROWSERS, - ENGINEERING_APPS, - IDES, } from './apps-groups' import { GIT_APPS } from './apps-groups/git' @@ -25,11 +25,4 @@ export const APPS_CONFIG: Readonly = [ ...MACOS, ] as const -export const AVAILABLE_TAGS = [ - 'engineering', - 'devops', - 'ui-ux', - 'productivity', - 'work', - 'personal', -] as const +export const AVAILABLE_TAGS = ['engineering', 'devops', 'ui-ux', 'productivity', 'work', 'personal'] as const diff --git a/src/commands/install/config/common-commands.ts b/src/commands/install/config/common-commands.ts index 7d87dcd4..976c2cec 100755 --- a/src/commands/install/config/common-commands.ts +++ b/src/commands/install/config/common-commands.ts @@ -4,20 +4,17 @@ const ARCH_FLAG = (arch?: Arch): '' | `arch -${Arch}` => (arch ? `arch -${arch}` export const BROW_ALIAS = `arch --x86_64 /usr/local/Homebrew/bin/brew` // BREW -export const BREW_CASK = (app: string) => - `yes | HOMEBREW_NO_AUTO_UPDATE=1 NONINTERACTIVE=1 brew install --cask ${app}` +export const BREW_CASK = (app: string) => `yes | HOMEBREW_NO_AUTO_UPDATE=1 NONINTERACTIVE=1 brew install --cask ${app}` export const BREW_INSTALL = (formula: string) => `yes | HOMEBREW_NO_AUTO_UPDATE=1 NONINTERACTIVE=1 brew install ${formula}` -export const BREW_TAP = (tapTo: string) => - `yes | HOMEBREW_NO_AUTO_UPDATE=1 NONINTERACTIVE=1 brew tap ${tapTo}` +export const BREW_TAP = (tapTo: string) => `yes | HOMEBREW_NO_AUTO_UPDATE=1 NONINTERACTIVE=1 brew tap ${tapTo}` // BROW export const BROW_CASK = (app: string) => `yes | HOMEBREW_NO_AUTO_UPDATE=1 NONINTERACTIVE=1 ${BROW_ALIAS} install --cask ${app}` export const BROW_INSTALL = (formula: string) => `yes | HOMEBREW_NO_AUTO_UPDATE=1 NONINTERACTIVE=1 ${BROW_ALIAS} install ${formula}` -export const BROW_TAP = (tapTo: string) => - `yes | HOMEBREW_NO_AUTO_UPDATE=1 NONINTERACTIVE=1 ${BROW_ALIAS} tap ${tapTo}` +export const BROW_TAP = (tapTo: string) => `yes | HOMEBREW_NO_AUTO_UPDATE=1 NONINTERACTIVE=1 ${BROW_ALIAS} tap ${tapTo}` // NODE export const NODE_GLOBAL = (packageName: string) => diff --git a/src/commands/install/config/multi-select-apps.config.ts b/src/commands/install/config/multi-select-apps.config.ts index 4c608112..209f06f7 100755 --- a/src/commands/install/config/multi-select-apps.config.ts +++ b/src/commands/install/config/multi-select-apps.config.ts @@ -10,13 +10,16 @@ export const MULTI_SELECT_APPS_PROMPT = async (tags: ITag[]): Promise = APPS_CONFIG.reduce((acc, app) => { - const { group } = app - acc[group] ??= [] - acc[group].push(app) + const groups: Record = APPS_CONFIG.reduce( + (acc, app) => { + const { group } = app + acc[group] ??= [] + acc[group].push(app) - return acc - }, {} as Record) + return acc + }, + {} as Record, + ) const choices = Object.entries(groups).flatMap(([groupName, group]) => { const value = group.map((app) => { diff --git a/src/commands/install/install.command.ts b/src/commands/install/install.command.ts index 16b9b580..6037dc57 100755 --- a/src/commands/install/install.command.ts +++ b/src/commands/install/install.command.ts @@ -1,10 +1,10 @@ +import { Command, CommandRunner } from 'nest-commander' +import { arch as ARCH } from 'node:process' +import ora from 'ora' import { execPromise } from '@common/utils' import type { IAppSetup } from '@models/app-setup.model' import { CheckUpdateService } from '@services/check-update.service' import { LoggerService } from '@services/logger.service' -import { Command, CommandRunner } from 'nest-commander' -import { arch as ARCH } from 'node:process' -import ora from 'ora' import { MULTI_SELECT_APPS_PROMPT } from './config/multi-select-apps.config' import { USER_TAGS_PROMPT } from './config/user-tags.config' diff --git a/src/commands/shell/config/multi-select-modules.config.ts b/src/commands/shell/config/multi-select-modules.config.ts index 040c9d60..164206c7 100755 --- a/src/commands/shell/config/multi-select-modules.config.ts +++ b/src/commands/shell/config/multi-select-modules.config.ts @@ -2,15 +2,16 @@ import { inquirer } from '@common/inquirer' import type { IShellModule } from '@models/shell-module.model' import { EXTENDS_MODULES_DIR_PATH, SHELL_MODULES_OPTIONS } from './shell-modules.config' -export const MULTI_SELECT_MODULES_PROMPT = async ( - currentConfig: string[], -): Promise => { +export const MULTI_SELECT_MODULES_PROMPT = async (currentConfig: string[]): Promise => { // map of all modules by their workspace file path - const currentConfigMap: Record = currentConfig.reduce((acc, module) => { - const workspaceFilePath = `${EXTENDS_MODULES_DIR_PATH}/${module}` - acc[workspaceFilePath] = true - return acc - }, {} satisfies Record) + const currentConfigMap: Record = currentConfig.reduce( + (acc, module) => { + const workspaceFilePath = `${EXTENDS_MODULES_DIR_PATH}/${module}` + acc[workspaceFilePath] = true + return acc + }, + {} satisfies Record, + ) const choices = SHELL_MODULES_OPTIONS.map((module) => { const { name, description, path } = module @@ -32,10 +33,13 @@ export const MULTI_SELECT_MODULES_PROMPT = async ( choices, pageSize: 10, filter: (input: IShellModule[]) => { - const modulesMap: Record = input.reduce((acc, module) => { - acc[module.name] = true - return acc - }, {} satisfies Record) + const modulesMap: Record = input.reduce( + (acc, module) => { + acc[module.name] = true + return acc + }, + {} satisfies Record, + ) const toDisable = SHELL_MODULES_OPTIONS.filter((module) => { const { name } = module diff --git a/src/commands/shell/config/shell-modules.config.ts b/src/commands/shell/config/shell-modules.config.ts index 6d00bdd7..1a01b6b8 100755 --- a/src/commands/shell/config/shell-modules.config.ts +++ b/src/commands/shell/config/shell-modules.config.ts @@ -1,6 +1,6 @@ +import { resolve } from 'node:path' import { BASE_PATH } from '@common/constants' import type { IShellModule } from '@models/shell-module.model' -import { resolve } from 'node:path' export const EXTENDS_MODULES_DIR_PATH = 'zsh/extends' export const LOCAL_MODULES_DIR_PATH = resolve(BASE_PATH, EXTENDS_MODULES_DIR_PATH) @@ -53,12 +53,9 @@ export const SHELL_MODULES_OPTIONS: IShellModule[] = [ }, ] -export const MODULES_MAP: Record = SHELL_MODULES_OPTIONS.reduce( - (acc, module) => { - const { path } = module - acc[path] = module +export const MODULES_MAP: Record = SHELL_MODULES_OPTIONS.reduce((acc, module) => { + const { path } = module + acc[path] = module - return acc - }, - {}, -) + return acc +}, {}) diff --git a/src/commands/shell/shell.command.ts b/src/commands/shell/shell.command.ts index 3dd48aaa..29cb1c7a 100755 --- a/src/commands/shell/shell.command.ts +++ b/src/commands/shell/shell.command.ts @@ -1,16 +1,12 @@ +import { Command, CommandRunner } from 'nest-commander' +import { readdir, rename } from 'node:fs/promises' +import { resolve } from 'node:path' import { BASE_PATH } from '@common/constants' import type { IShellModule } from '@models/shell-module.model' import { CheckUpdateService } from '@services/check-update.service' import { LoggerService } from '@services/logger.service' -import { Command, CommandRunner } from 'nest-commander' -import { readdir, rename } from 'node:fs/promises' -import { resolve } from 'node:path' import { MULTI_SELECT_MODULES_PROMPT } from './config/multi-select-modules.config' -import { - EXTENDS_MODULES_DIR_PATH, - LOCAL_MODULES_DIR_PATH, - MODULES_MAP, -} from './config/shell-modules.config' +import { EXTENDS_MODULES_DIR_PATH, LOCAL_MODULES_DIR_PATH, MODULES_MAP } from './config/shell-modules.config' @Command({ name: 'shell', @@ -31,13 +27,9 @@ export class ShellCommand extends CommandRunner { try { const currentConfig = await readdir(LOCAL_MODULES_DIR_PATH) - const modulesToDisable: IShellModule[] = await MULTI_SELECT_MODULES_PROMPT( - currentConfig, - ) + const modulesToDisable: IShellModule[] = await MULTI_SELECT_MODULES_PROMPT(currentConfig) - this.logger.debug( - `Modules to disable: ${modulesToDisable.map((module) => module.name).join(', ')}`, - ) + this.logger.debug(`Modules to disable: ${modulesToDisable.map((module) => module.name).join(', ')}`) await this.enableAllModules() @@ -57,14 +49,11 @@ export class ShellCommand extends CommandRunner { ) const allDisabledModules: IShellModule[] = allDisabledModulesPaths.map((modulePath) => { - const relativePath = - `${EXTENDS_MODULES_DIR_PATH}/` + modulePath.replace('.disabled', '') + const relativePath = `${EXTENDS_MODULES_DIR_PATH}/` + modulePath.replace('.disabled', '') return MODULES_MAP[relativePath] }) - this.logger.debug( - `Modules to enable: ${allDisabledModules.map((module) => module.name).join(', ')}`, - ) + this.logger.debug(`Modules to enable: ${allDisabledModules.map((module) => module.name).join(', ')}`) for (const module of allDisabledModules) { await this.enableModule(module) diff --git a/src/commands/update/config/update-script.config.ts b/src/commands/update/config/update-script.config.ts index e8e3cf75..f38dc241 100755 --- a/src/commands/update/config/update-script.config.ts +++ b/src/commands/update/config/update-script.config.ts @@ -32,8 +32,7 @@ rm "${BASE_PATH}/downloads/cli-update.zip" rm -rf "${BASE_PATH}/downloads/bin" ` -export const DOWNLOAD_FILE_PATH = (filename: string) => - `${BASE_PATH}/downloads/${filename.replace(/\n/g, '')}` +export const DOWNLOAD_FILE_PATH = (filename: string) => `${BASE_PATH}/downloads/${filename.replace(/\n/g, '')}` export const MIGRATE_SCRIPT = (filename: string) => ` ln -f "${DOWNLOAD_FILE_PATH(filename)}" "${BASE_PATH}/executable/shell-config" diff --git a/src/commands/update/update.command.spec.ts b/src/commands/update/update.command.spec.ts index 7c3e7c8f..c1424729 100755 --- a/src/commands/update/update.command.spec.ts +++ b/src/commands/update/update.command.spec.ts @@ -1,9 +1,9 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ import type { TestingModule } from '@nestjs/testing' import { Test } from '@nestjs/testing' -import { UpdateCommand } from './update.command' -import { LoggerService } from '@services/logger.service' import { CheckUpdateService } from '@services/check-update.service' +import { LoggerService } from '@services/logger.service' +import { UpdateCommand } from './update.command' describe('UpdateCommand', () => { let service: UpdateCommand diff --git a/src/commands/update/update.command.ts b/src/commands/update/update.command.ts index 58ead059..f1e22571 100755 --- a/src/commands/update/update.command.ts +++ b/src/commands/update/update.command.ts @@ -1,10 +1,11 @@ -import { execPromise } from '@common/utils' -import { CheckUpdateService } from '@services/check-update.service' -import { LoggerService } from '@services/logger.service' +/* eslint-disable no-useless-escape */ import { Command, CommandRunner, Option } from 'nest-commander' import { existsSync } from 'node:fs' import { env } from 'node:process' import ora from 'ora' +import { execPromise } from '@common/utils' +import { CheckUpdateService } from '@services/check-update.service' +import { LoggerService } from '@services/logger.service' import { DOWNLOAD_FILE_PATH, DOWNLOAD_SCRIPT_CUSTOM, @@ -82,9 +83,7 @@ export class UpdateCommand extends CommandRunner { const isExists: boolean = existsSync(downloadPath) if (!isExists) { - this.logger.error( - `Error while trying to migrate to the new version.\nTry again later.`, - ) + this.logger.error(`Error while trying to migrate to the new version.\nTry again later.`) spinner.fail('Failed to update') return } diff --git a/src/common/constants.ts b/src/common/constants.ts index 75fcf4e0..06473e1d 100755 --- a/src/common/constants.ts +++ b/src/common/constants.ts @@ -2,8 +2,7 @@ import { randomUUID } from 'node:crypto' import { homedir } from 'node:os' export const GITHUB_REPO = 'Avivbens/shell-config' as const -export const GITHUB_RELEASES_API_URL = - `https://api.github.com/repos/${GITHUB_REPO}/releases` as const +export const GITHUB_RELEASES_API_URL = `https://api.github.com/repos/${GITHUB_REPO}/releases` as const export const BASE_PATH = `${homedir()}/shell-config` as const export const BOOTSTRAP_UUID = randomUUID().slice(0, 8) diff --git a/src/common/utils.ts b/src/common/utils.ts index b085c06c..11ed694a 100755 --- a/src/common/utils.ts +++ b/src/common/utils.ts @@ -23,12 +23,7 @@ export const resolveBundledAsset = (currentDirectory: string, assetPath: string) * @param path - path to asset relative to this project root, use {@link resolveBundledAsset} * @param target - path to copy asset to */ -export async function copyBundledAsset( - path: string, - target: string, - logger: LoggerService, - round = 0, -) { +export async function copyBundledAsset(path: string, target: string, logger: LoggerService, round = 0) { try { const isDir = (await stat(path)).isDirectory() if (!isDir) { @@ -39,9 +34,7 @@ export async function copyBundledAsset( await mkdir(target, { recursive: true }).catch(() => {}) const children = await readdir(path) await Promise.all( - children.map((child) => - copyBundledAsset(resolve(path, child), resolve(target, child), logger, round + 1), - ), + children.map((child) => copyBundledAsset(resolve(path, child), resolve(target, child), logger, round + 1)), ) } catch (error) { round === 0 && logger.error(`Failed copyBundledAsset, error: ${error.stack}`) diff --git a/src/main.ts b/src/main.ts index bb6af0dc..e0d20f8e 100755 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,7 @@ import { CommandFactory } from 'nest-commander' +import packageJson from '../package.json' import { AppModule } from './app.module' -import packageJson from '../package.json' ;(async () => { const cliCommand = 'shell-config' const cliExecutable = '$HOME/shell-config/executable/shell-config' diff --git a/src/services/check-update.service.ts b/src/services/check-update.service.ts index a9bd6cd8..655ca160 100755 --- a/src/services/check-update.service.ts +++ b/src/services/check-update.service.ts @@ -1,17 +1,19 @@ +import boxen from 'boxen' +import { lastValueFrom } from 'rxjs' +import { clean, lt } from 'semver' import { GITHUB_RELEASES_API_URL } from '@common/constants' import type { IReleasesAPIRes } from '@models/releases-api.model' import { HttpService } from '@nestjs/axios' import { Injectable } from '@nestjs/common' -import boxen from 'boxen' -import { lastValueFrom } from 'rxjs' -import { clean, lt } from 'semver' -import { LoggerService } from './logger.service' - import packageJson from '../../package.json' +import { LoggerService } from './logger.service' @Injectable() export class CheckUpdateService { - constructor(private readonly http: HttpService, private readonly logger: LoggerService) { + constructor( + private readonly http: HttpService, + private readonly logger: LoggerService, + ) { this.logger.setContext(CheckUpdateService.name) } @@ -34,9 +36,7 @@ export class CheckUpdateService { const updateNeeded: boolean = lt(currentVersionClean, latestClean) if (!updateNeeded) { - this.logger.debug( - `Current version: ${currentVersionClean}, latest version: ${latestClean}`, - ) + this.logger.debug(`Current version: ${currentVersionClean}, latest version: ${latestClean}`) return false } @@ -65,9 +65,7 @@ export class CheckUpdateService { public async getGithubReleases(): Promise { try { - const res = await lastValueFrom( - this.http.get(GITHUB_RELEASES_API_URL), - ) + const res = await lastValueFrom(this.http.get(GITHUB_RELEASES_API_URL)) return res.data } catch (error) { this.logger.debug(`Error getGithubReleases, error: ${error.stack}`) diff --git a/src/services/logger.service.ts b/src/services/logger.service.ts index 69aff8c2..3dcc7ff6 100755 --- a/src/services/logger.service.ts +++ b/src/services/logger.service.ts @@ -1,7 +1,7 @@ +import { appendFile } from 'node:fs/promises' import { BASE_PATH, BOOTSTRAP_UUID } from '@common/constants' import { execPromise } from '@common/utils' import { Injectable, Scope } from '@nestjs/common' -import { appendFile } from 'node:fs/promises' @Injectable({ scope: Scope.TRANSIENT }) export class LoggerService { @@ -39,9 +39,7 @@ export class LoggerService { } private generateMessage(message: string): string { - return `INSTANCE: ${BOOTSTRAP_UUID} | ${new Date().toLocaleString()} |${ - this.context - }${message}` + return `INSTANCE: ${BOOTSTRAP_UUID} | ${new Date().toLocaleString()} |${this.context}${message}` } public setContext(context: string) {