feat: create new cli package
This commit is contained in:
parent
4faaec3129
commit
8fc132f3d0
11 changed files with 207 additions and 3 deletions
1
packages/cli/.eslintignore
Normal file
1
packages/cli/.eslintignore
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.eslintrc.js
|
39
packages/cli/.eslintrc.js
Normal file
39
packages/cli/.eslintrc.js
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
plugins: ['@typescript-eslint', 'import'],
|
||||||
|
extends: ['plugin:@typescript-eslint/recommended', 'airbnb', 'airbnb-typescript', 'eslint:recommended', 'plugin:import/typescript', 'prettier'],
|
||||||
|
parser: '@typescript-eslint/parser',
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 'latest',
|
||||||
|
sourceType: 'module',
|
||||||
|
project: './tsconfig.json',
|
||||||
|
tsconfigRootDir: __dirname,
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
'import/prefer-default-export': 0,
|
||||||
|
'class-methods-use-this': 0,
|
||||||
|
'import/extensions': [
|
||||||
|
'error',
|
||||||
|
'ignorePackages',
|
||||||
|
{
|
||||||
|
'': 'never',
|
||||||
|
js: 'never',
|
||||||
|
jsx: 'never',
|
||||||
|
ts: 'never',
|
||||||
|
tsx: 'never',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'import/no-extraneous-dependencies': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
devDependencies: ['build.js', '**/*.test.{ts,tsx}', '**/mocks/**', '**/__mocks__/**', '**/*.setup.{ts,js}', '**/*.config.{ts,js}', '**/tests/**'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'arrow-body-style': 0,
|
||||||
|
'no-underscore-dangle': 0,
|
||||||
|
'no-console': 0,
|
||||||
|
},
|
||||||
|
globals: {
|
||||||
|
NodeJS: true,
|
||||||
|
},
|
||||||
|
};
|
4
packages/cli/.gitignore
vendored
Normal file
4
packages/cli/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
dev
|
||||||
|
dist/
|
||||||
|
coverage/
|
||||||
|
assets/VERSION
|
6
packages/cli/.prettierrc.js
Normal file
6
packages/cli/.prettierrc.js
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
module.exports = {
|
||||||
|
singleQuote: true,
|
||||||
|
semi: true,
|
||||||
|
trailingComma: 'all',
|
||||||
|
printWidth: 200,
|
||||||
|
};
|
21
packages/cli/build.js
Normal file
21
packages/cli/build.js
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
const { build } = require('esbuild');
|
||||||
|
|
||||||
|
const commandArgs = process.argv.slice(2);
|
||||||
|
|
||||||
|
async function bundle() {
|
||||||
|
const start = Date.now();
|
||||||
|
const options = {
|
||||||
|
entryPoints: ['./src/index.ts'],
|
||||||
|
outfile: './dist/index.js',
|
||||||
|
platform: 'node',
|
||||||
|
target: 'node20',
|
||||||
|
bundle: true,
|
||||||
|
color: true,
|
||||||
|
sourcemap: commandArgs.includes('--sourcemap'),
|
||||||
|
};
|
||||||
|
|
||||||
|
await build({ ...options, minify: true });
|
||||||
|
console.log(`Build time: ${Date.now() - start}ms`);
|
||||||
|
}
|
||||||
|
|
||||||
|
bundle();
|
5
packages/cli/nodemon.json
Normal file
5
packages/cli/nodemon.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"watch": ["src"],
|
||||||
|
"exec": "NODE_ENV=development npx tsx ./src/index.ts watch",
|
||||||
|
"ext": "js ts"
|
||||||
|
}
|
61
packages/cli/package.json
Normal file
61
packages/cli/package.json
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
{
|
||||||
|
"name": "@runtipi/cli",
|
||||||
|
"version": "1.6.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"bin": "dist/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "dotenv -e .env.test vitest -- --coverage --watch=false",
|
||||||
|
"test:watch": "dotenv -e .env.test vitest",
|
||||||
|
"package": "npm run build && pkg package.json && chmod +x dist/bin/cli-x64 && chmod +x dist/bin/cli-arm64",
|
||||||
|
"package:m1": "npm run build && pkg package.json -t node18-darwin-arm64",
|
||||||
|
"set-version": "node -e \"require('fs').writeFileSync('assets/VERSION', process.argv[1])\"",
|
||||||
|
"build": "node build.js",
|
||||||
|
"build:meta": "esbuild ./src/index.ts --bundle --platform=node --target=node18 --outfile=dist/index.js --metafile=meta.json --analyze",
|
||||||
|
"dev": "dotenv -e ../../.env nodemon",
|
||||||
|
"lint": "eslint . --ext .ts"
|
||||||
|
},
|
||||||
|
"pkg": {
|
||||||
|
"assets": "assets/**/*",
|
||||||
|
"targets": [
|
||||||
|
"node18-linux-x64",
|
||||||
|
"node18-linux-arm64"
|
||||||
|
],
|
||||||
|
"outputPath": "dist/bin"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"devDependencies": {
|
||||||
|
"@faker-js/faker": "^8.0.2",
|
||||||
|
"@types/cli-progress": "^3.11.0",
|
||||||
|
"@types/inquirer": "^9.0.3",
|
||||||
|
"@types/node": "20.3.2",
|
||||||
|
"dotenv-cli": "^7.2.1",
|
||||||
|
"esbuild": "^0.16.17",
|
||||||
|
"eslint-config-prettier": "^8.8.0",
|
||||||
|
"memfs": "^4.2.0",
|
||||||
|
"nodemon": "^2.0.22",
|
||||||
|
"pkg": "^5.8.1",
|
||||||
|
"vite": "^4.4.7",
|
||||||
|
"vite-tsconfig-paths": "^4.2.0",
|
||||||
|
"vitest": "^0.32.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@runtipi/shared": "workspace:^",
|
||||||
|
"axios": "^1.4.0",
|
||||||
|
"boxen": "^7.1.1",
|
||||||
|
"bullmq": "^4.5.0",
|
||||||
|
"chalk": "^5.3.0",
|
||||||
|
"cli-progress": "^3.12.0",
|
||||||
|
"cli-spinners": "^2.9.0",
|
||||||
|
"commander": "^11.0.0",
|
||||||
|
"dotenv": "^16.3.1",
|
||||||
|
"inquirer": "^9.2.8",
|
||||||
|
"log-update": "^5.0.1",
|
||||||
|
"semver": "^7.5.3",
|
||||||
|
"systeminformation": "^5.18.7",
|
||||||
|
"web-push": "^3.6.3",
|
||||||
|
"zod": "^3.21.4"
|
||||||
|
}
|
||||||
|
}
|
52
packages/cli/tsconfig.json
Normal file
52
packages/cli/tsconfig.json
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es2017",
|
||||||
|
"baseUrl": ".",
|
||||||
|
"outDir": "./dist",
|
||||||
|
"paths": {
|
||||||
|
"@/utils/*": [
|
||||||
|
"./src/utils/*"
|
||||||
|
],
|
||||||
|
"@/executors": [
|
||||||
|
"./src/executors"
|
||||||
|
],
|
||||||
|
"@/tests/*": [
|
||||||
|
"./tests/*"
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"dom.iterable",
|
||||||
|
"esnext"
|
||||||
|
],
|
||||||
|
"allowJs": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"strict": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"module": "CommonJS",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"jsx": "preserve",
|
||||||
|
"incremental": true,
|
||||||
|
"strictNullChecks": true,
|
||||||
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"noUncheckedIndexedAccess": true,
|
||||||
|
"types": [
|
||||||
|
"node"
|
||||||
|
],
|
||||||
|
"experimentalDecorators": true
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx",
|
||||||
|
"**/*.mjs",
|
||||||
|
"**/*.js",
|
||||||
|
"**/*.jsx"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
|
}
|
10
packages/cli/vitest.config.ts
Normal file
10
packages/cli/vitest.config.ts
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import { defineConfig } from 'vitest/config';
|
||||||
|
import tsconfigPaths from 'vite-tsconfig-paths';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [tsconfigPaths()],
|
||||||
|
test: {
|
||||||
|
setupFiles: ['./tests/vite.setup.ts'],
|
||||||
|
coverage: { all: true, reporter: ['lcov', 'text-summary'] },
|
||||||
|
},
|
||||||
|
});
|
3
pnpm-workspace.yaml
Normal file
3
pnpm-workspace.yaml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
prefer-workspace-packages: true
|
||||||
|
packages:
|
||||||
|
- 'packages/**'
|
|
@ -38,7 +38,7 @@
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"jsx": "preserve",
|
"jsx": "preserve",
|
||||||
"incremental": true,
|
"incremental": false,
|
||||||
"strictNullChecks": true,
|
"strictNullChecks": true,
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"noUncheckedIndexedAccess": true,
|
"noUncheckedIndexedAccess": true,
|
||||||
|
@ -54,9 +54,11 @@
|
||||||
"**/*.tsx",
|
"**/*.tsx",
|
||||||
"**/*.mjs",
|
"**/*.mjs",
|
||||||
"**/*.js",
|
"**/*.js",
|
||||||
"**/*.jsx"
|
"**/*.jsx",
|
||||||
],
|
],
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"node_modules"
|
"node_modules",
|
||||||
|
"packages",
|
||||||
|
"repos",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue