diff --git a/packages/plugin-knip/.eslintrc.json b/packages/plugin-knip/.eslintrc.json new file mode 100644 index 0000000..eafa6fc --- /dev/null +++ b/packages/plugin-knip/.eslintrc.json @@ -0,0 +1,19 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx"], + "parserOptions": { + "project": ["packages/plugin-knip/tsconfig.*?.json"] + } + }, + { + "files": ["*.json"], + "parser": "jsonc-eslint-parser", + "rules": { + "@nx/dependency-checks": ["error"] + } + } + ] +} diff --git a/packages/plugin-knip/README.md b/packages/plugin-knip/README.md new file mode 100644 index 0000000..1b8ee0c --- /dev/null +++ b/packages/plugin-knip/README.md @@ -0,0 +1,11 @@ +# @code-pushup/knip-plugin + +[![npm](https://img.shields.io/npm/v/%40code-pushup%2Feslint-plugin.svg)](https://www.npmjs.com/package/@code-pushup/knip-plugin) +[![downloads](https://img.shields.io/npm/dm/%40code-pushup%2Feslint-plugin)](https://npmtrends.com/@code-pushup/knip-plugin) +[![dependencies](https://img.shields.io/librariesio/release/npm/%40code-pushup/knip-plugin)](https://www.npmjs.com/package/@code-pushup/knip-plugin?activeTab=dependencies) + +🕵️ **Code PushUp plugin to detect dependency and code usage.** ✂️ + +--- + +TBD diff --git a/packages/plugin-knip/package.json b/packages/plugin-knip/package.json new file mode 100644 index 0000000..5f9f672 --- /dev/null +++ b/packages/plugin-knip/package.json @@ -0,0 +1,7 @@ +{ + "name": "@code-pushup/knip-plugin", + "version": "0.0.0", + "license": "MIT", + "dependencies": {}, + "peerDependencies": {} +} diff --git a/packages/plugin-knip/project.json b/packages/plugin-knip/project.json new file mode 100644 index 0000000..4268071 --- /dev/null +++ b/packages/plugin-knip/project.json @@ -0,0 +1,41 @@ +{ + "name": "plugin-knip", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/plugin-knip/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/packages/plugin-knip", + "main": "packages/plugin-knip/src/index.ts", + "tsConfig": "packages/plugin-knip/tsconfig.lib.json", + "assets": ["packages/plugin-knip/*.md"] + } + }, + "lint": { + "executor": "@nx/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "packages/plugin-knip/**/*.ts", + "packages/plugin-knip/package.json" + ] + } + }, + "unit-test": { + "executor": "@nx/vite:test", + "options": { + "config": "packages/plugin-knip/vite.config.unit.ts" + } + }, + "integration-test": { + "executor": "@nx/vite:test", + "options": { + "config": "packages/plugin-knip/vite.config.integration.ts" + } + } + }, + "tags": ["scope:plugin", "type:feature"] +} diff --git a/packages/plugin-knip/src/index.ts b/packages/plugin-knip/src/index.ts new file mode 100644 index 0000000..5399942 --- /dev/null +++ b/packages/plugin-knip/src/index.ts @@ -0,0 +1 @@ +export const KNIP_PLUGIN_SLUG = 'knip'; diff --git a/packages/plugin-knip/tsconfig.json b/packages/plugin-knip/tsconfig.json new file mode 100644 index 0000000..893f9a9 --- /dev/null +++ b/packages/plugin-knip/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "ESNext", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "types": ["vitest"] + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.test.json" + } + ] +} diff --git a/packages/plugin-knip/tsconfig.lib.json b/packages/plugin-knip/tsconfig.lib.json new file mode 100644 index 0000000..ef2f7e2 --- /dev/null +++ b/packages/plugin-knip/tsconfig.lib.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": [ + "vite.config.unit.ts", + "vite.config.integration.ts", + "src/**/*.test.ts", + "src/**/*.mock.ts", + "mocks/**/*.ts" + ] +} diff --git a/packages/plugin-knip/tsconfig.test.json b/packages/plugin-knip/tsconfig.test.json new file mode 100644 index 0000000..bb1ab5e --- /dev/null +++ b/packages/plugin-knip/tsconfig.test.json @@ -0,0 +1,17 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "types": ["vitest/globals", "vitest/importMeta", "vite/client", "node"] + }, + "include": [ + "vite.config.unit.ts", + "vite.config.integration.ts", + "mocks/**/*.ts", + "src/**/*.test.ts", + "src/**/*.test.tsx", + "src/**/*.test.js", + "src/**/*.test.jsx", + "src/**/*.d.ts" + ] +} diff --git a/packages/plugin-knip/vite.config.integration.ts b/packages/plugin-knip/vite.config.integration.ts new file mode 100644 index 0000000..73740be --- /dev/null +++ b/packages/plugin-knip/vite.config.integration.ts @@ -0,0 +1,29 @@ +/// +import { defineConfig } from 'vite'; +import { tsconfigPathAliases } from '../../tooling/vitest-tsconfig-path-aliases'; + +export default defineConfig({ + cacheDir: '../../node_modules/.vite/plugin-knip', + test: { + reporters: ['basic'], + globals: true, + cache: { + dir: '../../node_modules/.vitest/plugin-knip', + }, + alias: tsconfigPathAliases(), + pool: 'threads', + poolOptions: { threads: { singleThread: true } }, + coverage: { + reporter: ['text', 'lcov'], + reportsDirectory: '../../coverage/plugin-knip/integration-tests', + exclude: ['mocks/**', '**/types.ts'], + }, + environment: 'node', + include: ['src/**/*.integration.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + globalSetup: ['../../global-setup.ts'], + setupFiles: [ + '../../testing/test-setup/src/lib/console.mock.ts', + '../../testing/test-setup/src/lib/reset.mocks.ts', + ], + }, +}); diff --git a/packages/plugin-knip/vite.config.unit.ts b/packages/plugin-knip/vite.config.unit.ts new file mode 100644 index 0000000..2f72985 --- /dev/null +++ b/packages/plugin-knip/vite.config.unit.ts @@ -0,0 +1,30 @@ +/// +import { defineConfig } from 'vite'; +import { tsconfigPathAliases } from '../../tooling/vitest-tsconfig-path-aliases'; + +export default defineConfig({ + cacheDir: '../../node_modules/.vite/plugin-knip', + test: { + reporters: ['basic'], + globals: true, + cache: { + dir: '../../node_modules/.vitest/plugin-knip', + }, + alias: tsconfigPathAliases(), + pool: 'threads', + poolOptions: { threads: { singleThread: true } }, + coverage: { + reporter: ['text', 'lcov'], + reportsDirectory: '../../coverage/plugin-knip/unit-tests', + exclude: ['mocks/**', '**/types.ts'], + }, + environment: 'node', + include: ['src/**/*.unit.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + globalSetup: ['../../global-setup.ts'], + setupFiles: [ + '../../testing/test-setup/src/lib/console.mock.ts', + '../../testing/test-setup/src/lib/fs.mock.ts', + '../../testing/test-setup/src/lib/reset.mocks.ts', + ], + }, +}); diff --git a/tooling/plugin-factory/src/internal/generate-files.ts b/tooling/plugin-factory/src/internal/generate-files.ts index cd48268..ca70e68 100644 --- a/tooling/plugin-factory/src/internal/generate-files.ts +++ b/tooling/plugin-factory/src/internal/generate-files.ts @@ -28,8 +28,6 @@ export async function addCodePushupConfigFile( persist?: PersistConfig; }, ): Promise { - console.log('addCodePushupConfigFile: ', options); - const { configFile, plugins, categories, persist, upload } = options ?? {}; const { diff --git a/tsconfig.base.json b/tsconfig.base.json index dc21665..199f8be 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -15,7 +15,7 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - "bundle-size": ["packages/bundle-size/src/index.ts"], + "knip-plugin": ["packages/plugin-knip/src/index.ts"], "plugin-factory": ["tooling/plugin-factory/src/index.ts"], "testing-utils": ["testing/utils/src/index.ts"] }