diff --git a/.changeset/light-mails-hang.md b/.changeset/light-mails-hang.md new file mode 100644 index 0000000..dd29740 --- /dev/null +++ b/.changeset/light-mails-hang.md @@ -0,0 +1,6 @@ +--- +"@eslit/cli": minor +--- + +Now the cli exports a API that runs the application and the configs object needs to be passed to the Cli class, this way any other package can run and have their configs array. +With this, the new command line interface that handles the actual configs of this repo is the "eslegant" package. diff --git a/packages/cli/index.d.ts b/packages/cli/index.d.ts new file mode 100644 index 0000000..be33e9f --- /dev/null +++ b/packages/cli/index.d.ts @@ -0,0 +1,17 @@ +import type { CliArgs } from './src/types'; + +/** + * Class that handles the creation and running the ESLegant command line interface + */ +export default class Cli { + /** + * @param args Arguments to pass to the cli when its runs + */ + constructor(args: CliArgs); + /** + * Runs the cli with the given arguments + */ + async run(): Promise; +} + +export type { CliArgs, Config } from './src/types.d.ts'; diff --git a/packages/cli/index.js b/packages/cli/index.js new file mode 100644 index 0000000..16c6c35 --- /dev/null +++ b/packages/cli/index.js @@ -0,0 +1 @@ +export { default as default } from './src/cli.js'; diff --git a/packages/cli/jsconfig.json b/packages/cli/jsconfig.json index d4e37f4..ac91127 100644 --- a/packages/cli/jsconfig.json +++ b/packages/cli/jsconfig.json @@ -1,5 +1,5 @@ { "extends": "../../tsconfig.json", "exclude": ["./node_modules/**", "./dist/**"], - "include": ["./index.d.ts", "./src/**/*.ts", "./src/**/*.js"], + "include": ["**/*.ts", "**/*.js"], } diff --git a/packages/cli/package.json b/packages/cli/package.json index 23d01ad..f4f6c49 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -16,6 +16,7 @@ "source": "./src/index.js", "files": [ "src", + "index.js", "index.d.ts" ], "homepage": "https://github.com/LoredDev/ESLit", @@ -25,7 +26,6 @@ "type": "git", "url": "https://github.com/LoredDev/ESLit" }, - "bin": "./src/index.js", "license": "MIT", "dependencies": { "cardinal": "^2.1.1", diff --git a/packages/cli/src/cli.js b/packages/cli/src/cli.js index d9b16ce..57cd6fe 100644 --- a/packages/cli/src/cli.js +++ b/packages/cli/src/cli.js @@ -1,6 +1,5 @@ import { Command } from 'commander'; import ConfigsProcessor from './configsProcessor.js'; -import configs from './configs.js'; import Workspace from './workspace.js'; import c from 'picocolors'; import path from 'node:path'; @@ -22,6 +21,7 @@ export default class Cli { /** @type {import('./types').CliArgs} */ args = { dir: process.cwd(), + configs: [], }; /** @@ -45,13 +45,13 @@ export default class Cli { this.args.dir = !this.args.dir.startsWith('/') ? path.join(process.cwd(), this.args.dir) : this.args.dir; - } async run() { process.chdir(this.args.dir); + const configs = this.args.configs; const spinner = createSpinner('Detecting workspace configuration'); const processor = new ConfigsProcessor({ configs }); diff --git a/packages/cli/src/configs.js b/packages/cli/src/configs.js deleted file mode 100644 index 2607961..0000000 --- a/packages/cli/src/configs.js +++ /dev/null @@ -1,34 +0,0 @@ - -/** @type {import('./types').Config[]} */ -const cliConfig = [ - { - name: 'framework', - type: 'multiple', - description: 'The UI frameworks being used in the project', - options: [ - { - name: 'svelte', - packages: { 'svelte': 'svelte' }, - configs: ['svelte.recommended'], - detect: ['**/*.svelte', 'svelte.config.{js,ts,cjs,cts}'], - }, - { - name: 'vue', - packages: { 'vue': ['vue', ['hello', 'world']], 'svelte': ['hello'] }, - configs: ['vue.recommended'], - detect: ['nuxt.config.{js,ts,cjs,cts}', '**/*.vue'], - }, - ], - }, - { - name: 'strict', - type: 'confirm', - manual: true, - options: [{ - name: 'yes', - packages: { 'eslint': 'config', 'svelte': ['test1'] }, - configs: ['config.strict'], - }], - }, -]; -export default cliConfig; diff --git a/packages/cli/src/index.js b/packages/cli/src/index.js deleted file mode 100755 index 20e2906..0000000 --- a/packages/cli/src/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import Cli from './cli.js'; - -const cli = new Cli(); -await cli.run(); diff --git a/packages/cli/src/types.d.ts b/packages/cli/src/types.d.ts index f0b536a..36a369c 100644 --- a/packages/cli/src/types.d.ts +++ b/packages/cli/src/types.d.ts @@ -7,6 +7,7 @@ type CliArgs = { mergeToRoot?: boolean installPkgs?: boolean | PackageManagerName dir: string + configs: Config[] } & OptionValues; interface PackageManagerHandler { diff --git a/packages/eslegant/package.json b/packages/eslegant/package.json new file mode 100644 index 0000000..4312a1c --- /dev/null +++ b/packages/eslegant/package.json @@ -0,0 +1,33 @@ +{ + "name": "eslegant", + "version": "0.1.0", + "description": "", + "keywords": [], + "author": { + "email": "contact.guz013@gmail.com", + "name": "Gustavo \"Guz\" L. de Mello", + "url": "https://guz.one" + }, + "files": [ + "./bin.js", + "./configs.js" + ], + "dependencies": { + "@eslit/cli": "workspace:*" + }, + "homepage": "https://github.com/LoredDev/ESLit", + "type": "module", + "repository": { + "directory": "packages/eslegant", + "type": "git", + "url": "https://github.com/LoredDev/ESLit" + }, + "bin": "./bin.js", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "devDependencies": { + "@types/node": "^20.5.3" + } +}