From 9f59c0f3805fcdfcdb4dee7639d7e0c192081466 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 10 Jan 2025 21:08:07 +0100 Subject: [PATCH 1/3] feat(plugin-typescript): setup plugin project base --- packages/plugin-typescript/eslint.config.js | 21 ++++++++++ packages/plugin-typescript/package.json | 27 ++++++++++++ packages/plugin-typescript/project.json | 41 +++++++++++++++++++ packages/plugin-typescript/src/index.ts | 1 + .../plugin-typescript/src/lib/constants.ts | 1 + packages/plugin-typescript/tsconfig.json | 23 +++++++++++ packages/plugin-typescript/tsconfig.lib.json | 16 ++++++++ packages/plugin-typescript/tsconfig.test.json | 17 ++++++++ .../vite.config.integration.ts | 30 ++++++++++++++ .../plugin-typescript/vite.config.unit.ts | 31 ++++++++++++++ tsconfig.base.json | 3 ++ 11 files changed, 211 insertions(+) create mode 100644 packages/plugin-typescript/eslint.config.js create mode 100644 packages/plugin-typescript/package.json create mode 100644 packages/plugin-typescript/project.json create mode 100644 packages/plugin-typescript/src/index.ts create mode 100644 packages/plugin-typescript/src/lib/constants.ts create mode 100644 packages/plugin-typescript/tsconfig.json create mode 100644 packages/plugin-typescript/tsconfig.lib.json create mode 100644 packages/plugin-typescript/tsconfig.test.json create mode 100644 packages/plugin-typescript/vite.config.integration.ts create mode 100644 packages/plugin-typescript/vite.config.unit.ts diff --git a/packages/plugin-typescript/eslint.config.js b/packages/plugin-typescript/eslint.config.js new file mode 100644 index 000000000..81be57a0a --- /dev/null +++ b/packages/plugin-typescript/eslint.config.js @@ -0,0 +1,21 @@ +import tseslint from 'typescript-eslint'; +import baseConfig from '../../eslint.config.js'; + +export default tseslint.config( + ...baseConfig, + { + files: ['**/*.ts', '!**/mocks'], + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': 'error', + }, + }, +); diff --git a/packages/plugin-typescript/package.json b/packages/plugin-typescript/package.json new file mode 100644 index 000000000..bf6d00c53 --- /dev/null +++ b/packages/plugin-typescript/package.json @@ -0,0 +1,27 @@ +{ + "name": "@code-pushup/typescript-plugin", + "version": "0.57.0", + "license": "MIT", + "description": "Code PushUp plugin to incrementally adopting strict compilation flags in TypeScript projects", + "homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-typescript#readme", + "bugs": { + "url": "https://github.com/code-pushup/cli/issues?q=is%3Aissue%20state%3Aopen%20type%3ABug%20label%3A\"🧩%20typescript-plugin\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/code-pushup/cli.git", + "directory": "packages/plugin-typescript" + }, + "keywords": [ + "CLI", + "Code PushUp", + "plugin", + "typescript" + ], + "publishConfig": { + "access": "public" + }, + "type": "module", + "dependencies": {}, + "scripts": {} +} diff --git a/packages/plugin-typescript/project.json b/packages/plugin-typescript/project.json new file mode 100644 index 000000000..a34587731 --- /dev/null +++ b/packages/plugin-typescript/project.json @@ -0,0 +1,41 @@ +{ + "name": "plugin-typescript", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/plugin-typescript/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/packages/plugin-typescript", + "main": "packages/plugin-typescript/src/index.ts", + "tsConfig": "packages/plugin-typescript/tsconfig.lib.json", + "assets": ["packages/plugin-typescript/*.md"] + } + }, + "lint": { + "executor": "@nx/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "packages/plugin-typescript/**/*.ts", + "packages/plugin-typescript/package.json" + ] + } + }, + "unit-test": { + "executor": "@nx/vite:test", + "options": { + "configFile": "packages/plugin-typescript/vite.config.unit.ts" + } + }, + "integration-test": { + "executor": "@nx/vite:test", + "options": { + "configFile": "packages/plugin-typescript/vite.config.integration.ts" + } + } + }, + "tags": ["scope:plugin", "type:feature", "publishable"] +} diff --git a/packages/plugin-typescript/src/index.ts b/packages/plugin-typescript/src/index.ts new file mode 100644 index 000000000..26c2b67c0 --- /dev/null +++ b/packages/plugin-typescript/src/index.ts @@ -0,0 +1 @@ +export { TYPESCRIPT_PLUGIN_SLUG } from './lib/constants.js'; diff --git a/packages/plugin-typescript/src/lib/constants.ts b/packages/plugin-typescript/src/lib/constants.ts new file mode 100644 index 000000000..b5675c81c --- /dev/null +++ b/packages/plugin-typescript/src/lib/constants.ts @@ -0,0 +1 @@ +export const TYPESCRIPT_PLUGIN_SLUG = 'typescript'; diff --git a/packages/plugin-typescript/tsconfig.json b/packages/plugin-typescript/tsconfig.json new file mode 100644 index 000000000..893f9a925 --- /dev/null +++ b/packages/plugin-typescript/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-typescript/tsconfig.lib.json b/packages/plugin-typescript/tsconfig.lib.json new file mode 100644 index 000000000..ef2f7e2b3 --- /dev/null +++ b/packages/plugin-typescript/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-typescript/tsconfig.test.json b/packages/plugin-typescript/tsconfig.test.json new file mode 100644 index 000000000..bb1ab5e0c --- /dev/null +++ b/packages/plugin-typescript/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-typescript/vite.config.integration.ts b/packages/plugin-typescript/vite.config.integration.ts new file mode 100644 index 000000000..9089de7bf --- /dev/null +++ b/packages/plugin-typescript/vite.config.integration.ts @@ -0,0 +1,30 @@ +/// +import { defineConfig } from 'vite'; +import { tsconfigPathAliases } from '../../tools/vitest-tsconfig-path-aliases.js'; + +export default defineConfig({ + cacheDir: '../../node_modules/.vite/plugin-typescript', + test: { + reporters: ['basic'], + globals: true, + cache: { + dir: '../../node_modules/.vitest/plugin-typescript', + }, + alias: tsconfigPathAliases(), + pool: 'threads', + poolOptions: { threads: { singleThread: true } }, + coverage: { + reporter: ['text', 'lcov'], + reportsDirectory: '../../coverage/plugin-typescript/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/cliui.mock.ts', + '../../testing/test-setup/src/lib/reset.mocks.ts', + '../../testing/test-setup/src/lib/chrome-path.setup.ts', + ], + }, +}); diff --git a/packages/plugin-typescript/vite.config.unit.ts b/packages/plugin-typescript/vite.config.unit.ts new file mode 100644 index 000000000..e7a8783f0 --- /dev/null +++ b/packages/plugin-typescript/vite.config.unit.ts @@ -0,0 +1,31 @@ +/// +import { defineConfig } from 'vite'; +import { tsconfigPathAliases } from '../../tools/vitest-tsconfig-path-aliases.js'; + +export default defineConfig({ + cacheDir: '../../node_modules/.vite/plugin-typescript', + test: { + reporters: ['basic'], + globals: true, + cache: { + dir: '../../node_modules/.vitest/plugin-typescript', + }, + alias: tsconfigPathAliases(), + pool: 'threads', + poolOptions: { threads: { singleThread: true } }, + coverage: { + reporter: ['text', 'lcov'], + reportsDirectory: '../../coverage/plugin-typescript/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/cliui.mock.ts', + '../../testing/test-setup/src/lib/fs.mock.ts', + '../../testing/test-setup/src/lib/console.mock.ts', + '../../testing/test-setup/src/lib/reset.mocks.ts', + ], + }, +}); diff --git a/tsconfig.base.json b/tsconfig.base.json index d088eca5a..098bdf388 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -36,6 +36,9 @@ "@code-pushup/test-nx-utils": ["testing/test-nx-utils/src/index.ts"], "@code-pushup/test-setup": ["testing/test-setup/src/index.ts"], "@code-pushup/test-utils": ["testing/test-utils/src/index.ts"], + "@code-pushup/typescript-plugin": [ + "packages/plugin-typescript/src/index.ts" + ], "@code-pushup/utils": ["packages/utils/src/index.ts"] } }, From faa296c069893028735038f00d147ca934a2d8e5 Mon Sep 17 00:00:00 2001 From: Michael Hladky <10064416+BioPhoton@users.noreply.github.com> Date: Fri, 17 Jan 2025 14:02:54 +0100 Subject: [PATCH 2/3] Update packages/plugin-typescript/package.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Matěj Chalk <34691111+matejchalk@users.noreply.github.com> --- packages/plugin-typescript/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin-typescript/package.json b/packages/plugin-typescript/package.json index bf6d00c53..aaf672e9f 100644 --- a/packages/plugin-typescript/package.json +++ b/packages/plugin-typescript/package.json @@ -2,7 +2,7 @@ "name": "@code-pushup/typescript-plugin", "version": "0.57.0", "license": "MIT", - "description": "Code PushUp plugin to incrementally adopting strict compilation flags in TypeScript projects", + "description": "Code PushUp plugin for incrementally adopting strict compilation flags in TypeScript projects", "homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-typescript#readme", "bugs": { "url": "https://github.com/code-pushup/cli/issues?q=is%3Aissue%20state%3Aopen%20type%3ABug%20label%3A\"🧩%20typescript-plugin\"" From e19ea8e9c2703aad07dba1dc278a8be5f4a6aa77 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 30 Jan 2025 13:14:16 +0100 Subject: [PATCH 3/3] fix(plugin-typescript): refine eslint config --- packages/plugin-typescript/eslint.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin-typescript/eslint.config.js b/packages/plugin-typescript/eslint.config.js index 81be57a0a..40165321a 100644 --- a/packages/plugin-typescript/eslint.config.js +++ b/packages/plugin-typescript/eslint.config.js @@ -4,7 +4,7 @@ import baseConfig from '../../eslint.config.js'; export default tseslint.config( ...baseConfig, { - files: ['**/*.ts', '!**/mocks'], + files: ['**/*.ts'], languageOptions: { parserOptions: { projectService: true,