diff --git a/nx.json b/nx.json index 2fe0a29..ba7c28a 100644 --- a/nx.json +++ b/nx.json @@ -26,5 +26,15 @@ "inputs": ["default", "^default"] } }, - "plugins": [] + "plugins": [ + { + "plugin": "@push-based/nx-verdaccio", + "options": { + "environments": { + "environmentsDir": "tmp/environments", + "targetNames": ["e2e"] + } + } + } + ] } diff --git a/package-lock.json b/package-lock.json index 1cef6ad..cc1e3b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,18 +12,20 @@ "packages/*" ], "dependencies": { - "@code-pushup/cli": "^0.57.0", "@code-pushup/core": "^0.57.0", "@code-pushup/models": "^0.57.0", "@code-pushup/utils": "^0.57.0", "@nx/devkit": "19.4.3", "@poppinss/cliui": "^6.4.1", + "@push-based/nx-verdaccio": "^0.0.0-alpha.26", "ansis": "^3.8.1", "knip": "^5.42.0", "memfs": "^4.17.0", "zod": "^3.24.1" }, "devDependencies": { + "@beaussan/nx-knip": "^0.0.5-15", + "@code-pushup/cli": "^0.57.0", "@nx/esbuild": "19.4.3", "@nx/eslint": "19.4.3", "@nx/eslint-plugin": "19.4.3", @@ -1846,10 +1848,25 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@beaussan/nx-knip": { + "version": "0.0.5-15", + "resolved": "https://registry.npmjs.org/@beaussan/nx-knip/-/nx-knip-0.0.5-15.tgz", + "integrity": "sha512-YonAc6JmCjvr5sg+83NXQOzvBB1hnLcPcoMBTD8mnStnxX/65ZZ5SDdUuvDmpIYguOACpR7T3l1S9fbKhC1xNg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@nx/devkit": "18 || 17", + "knip": "5" + } + }, "node_modules/@code-pushup/cli": { "version": "0.57.0", "resolved": "https://registry.npmjs.org/@code-pushup/cli/-/cli-0.57.0.tgz", "integrity": "sha512-qZqUqN2BIrON6grGrU5bheYZ306KH8bM5gGBTTVoWzWdyHQh4FnJWPAoYh5gGN7wTpUvYZloPR5dcYtJPVQucw==", + "dev": true, "dependencies": { "@code-pushup/core": "0.57.0", "@code-pushup/models": "0.57.0", @@ -4929,6 +4946,44 @@ "node": ">=18.16.0" } }, + "node_modules/@push-based/nx-verdaccio": { + "version": "0.0.0-alpha.26", + "resolved": "https://registry.npmjs.org/@push-based/nx-verdaccio/-/nx-verdaccio-0.0.0-alpha.26.tgz", + "integrity": "sha512-Go11Dg+w5Ntl5Ig8YNzVVPbpOG85aVszjyBIK0FvVBX+/QllQY1F4fP8K8fYnMJnO9v5Tao3cryGFY5Zo9i+/g==", + "dependencies": { + "@nx/devkit": "19.8.0", + "ansis": "^3.3.2", + "simple-git": "^3.27.0", + "tslib": "^2.3.0" + } + }, + "node_modules/@push-based/nx-verdaccio/node_modules/@nrwl/devkit": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.8.0.tgz", + "integrity": "sha512-LehpQ2D1687+JWaUpW84NPuXsQuPosmts66LShPT4+6KozB4gd0hJGAXNXpjNs9CUfLyNf8rRdEeqNjWnPYEmA==", + "dependencies": { + "@nx/devkit": "19.8.0" + } + }, + "node_modules/@push-based/nx-verdaccio/node_modules/@nx/devkit": { + "version": "19.8.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.8.0.tgz", + "integrity": "sha512-nPaKHF0m2KONlt8GXjN9EhFo+NOvJnFcK6ujKFFLAyZ4TACY4F1FCjSHFTjYI82j+WukzuyjSmY9wzxYughWIQ==", + "dependencies": { + "@nrwl/devkit": "19.8.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "minimatch": "9.0.3", + "semver": "^7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "nx": ">= 17 <= 20" + } + }, "node_modules/@rollup/plugin-babel": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz", diff --git a/package.json b/package.json index 5d720af..0fbbe61 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "scripts": {}, "private": true, "devDependencies": { + "@beaussan/nx-knip": "^0.0.5-15", + "@code-pushup/cli": "^0.57.0", "@nx/esbuild": "19.4.3", "@nx/eslint": "19.4.3", "@nx/eslint-plugin": "19.4.3", @@ -46,12 +48,12 @@ "packages/*" ], "dependencies": { - "@code-pushup/cli": "^0.57.0", "@code-pushup/core": "^0.57.0", "@code-pushup/models": "^0.57.0", "@code-pushup/utils": "^0.57.0", "@nx/devkit": "19.4.3", "@poppinss/cliui": "^6.4.1", + "@push-based/nx-verdaccio": "^0.0.0-alpha.26", "ansis": "^3.8.1", "knip": "^5.42.0", "memfs": "^4.17.0", diff --git a/packages/plugin-knip/mocks/fixtures/raw-knip.report.ts b/packages/plugin-knip/mocks/fixtures/raw-knip.report.ts index 4235107..249ee3f 100644 --- a/packages/plugin-knip/mocks/fixtures/raw-knip.report.ts +++ b/packages/plugin-knip/mocks/fixtures/raw-knip.report.ts @@ -18,6 +18,7 @@ export const rawReport: Pick = enumMembers: true, classMembers: true, duplicates: true, + _files: false }, issues: { files: new Set([ @@ -30,6 +31,7 @@ export const rawReport: Pick = filePath: '/Users/username/Projects/code-pushup-cli/package.json', symbol: 'cli-table3', severity: 'error', + workspace: 'code-pushup-cli', }, }, }, @@ -40,6 +42,7 @@ export const rawReport: Pick = filePath: '/Users/username/Projects/code-pushup-cli/package.json', symbol: '@trivago/prettier-plugin-sort-imports', severity: 'error', + workspace: 'code-pushup-cli', }, }, }, @@ -50,6 +53,7 @@ export const rawReport: Pick = filePath: '/Users/username/Projects/code-pushup-cli/package.json', symbol: 'ts-node', severity: 'error', + workspace: 'code-pushup-cli', }, }, }, @@ -58,16 +62,16 @@ export const rawReport: Pick = 'jsonc-eslint-parser': { type: 'unlisted', symbol: 'jsonc-eslint-parser', - filePath: - '/User/username/code-pushup-cli/packages/utils/package.json', + filePath: '/User/username/code-pushup-cli/packages/utils/package.json', + workspace: 'code-pushup-cli', }, }, 'examples/plugins/.eslintrc.json': { 'jsonc-eslint-parser': { type: 'unlisted', symbol: 'jsonc-eslint-parser', - filePath: - '/User/username/code-pushup-cli/packages/utils/package.json', + filePath: '/User/username/code-pushup-cli/packages/utils/package.json', + workspace: 'code-pushup-cli', }, }, }, @@ -78,10 +82,10 @@ export const rawReport: Pick = 'some-package': { type: 'unresolved', symbol: 'smo-package', - filePath: - '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/category-config.ts', + filePath: '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/category-config.ts', line: 8, col: 23, + workspace: 'code-pushup-cli', }, }, }, @@ -89,13 +93,13 @@ export const rawReport: Pick = 'packages/models/src/lib/category-config.ts': { duplicateErrorMsg: { type: 'exports', - filePath: - '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/category-config.ts', + filePath: '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/category-config.ts', symbol: 'duplicateErrorMsg', symbolType: 'function' as SymbolType, line: 54, col: 17, severity: 'error', + workspace: 'code-pushup-cli', }, }, }, @@ -105,13 +109,13 @@ export const rawReport: Pick = 'packages/models/src/lib/group.ts': { GroupMeta: { type: 'types', - filePath: - '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/group.ts', + filePath: '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/group.ts', symbol: 'GroupMeta', symbolType: 'type' as SymbolType, line: 26, col: 13, severity: 'error', + workspace: 'code-pushup-cli', }, }, }, @@ -121,13 +125,13 @@ export const rawReport: Pick = 'packages/models/src/lib/group.ts': { MyEnum: { type: 'enumMembers', - filePath: - '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/group.ts', + filePath: '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/group.ts', symbol: 'unusedMember', symbolType: 'enum' as SymbolType, line: 26, col: 13, severity: 'error', + workspace: 'code-pushup-cli', }, }, }, @@ -135,13 +139,13 @@ export const rawReport: Pick = 'packages/models/src/lib/group.ts': { MyClass: { type: 'classMembers', - filePath: - '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/group.ts', + filePath: '/Users/username/Projects/code-pushup-cli/packages/models/src/lib/group.ts', symbol: 'unusedKey', symbolType: 'enum' as SymbolType, line: 40, col: 687, severity: 'error', + workspace: 'code-pushup-cli', }, }, }, @@ -149,8 +153,7 @@ export const rawReport: Pick = 'packages/nx-plugin/src/generators/configuration/generator.ts': { 'configurationGenerator|default': { type: 'duplicates', - filePath: - '/Users/username/Projects/quality-metrics-cli/packages/nx-plugin/src/generators/configuration/generator.ts', + filePath: '/Users/username/Projects/quality-metrics-cli/packages/nx-plugin/src/generators/configuration/generator.ts', symbol: 'configurationGenerator|default', symbols: [ { @@ -165,9 +168,11 @@ export const rawReport: Pick = }, ], severity: 'error', + workspace: 'code-pushup-cli', }, }, }, + _files: new Set(), }, options: JSON.stringify({ outputFile: 'knip-report.json', diff --git a/tools/vitest-tsconfig-path-aliases.ts b/tools/vitest-tsconfig-path-aliases.ts new file mode 100644 index 0000000..ac8be04 --- /dev/null +++ b/tools/vitest-tsconfig-path-aliases.ts @@ -0,0 +1,20 @@ +import { loadConfig } from 'tsconfig-paths'; +import type { Alias, AliasOptions } from 'vite'; + +export function tsconfigPathAliases(): AliasOptions { + const result = loadConfig('tsconfig.base.json'); + if (result.resultType === 'failed') { + throw new Error( + `Failed to load path aliases from tsconfig for Vitest: ${result.message}`, + ); + } + return Object.entries(result.paths) + .map(([key, value]) => [key, value[0]]) + .filter((pair): pair is [string, string] => pair[1] != null) + .map( + ([importPath, relativePath]): Alias => ({ + find: importPath, + replacement: new URL(`../${relativePath}`, import.meta.url).pathname, + }), + ); +} diff --git a/tsconfig.base.json b/tsconfig.base.json index ac9158f..07ca263 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -19,8 +19,8 @@ "@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"], - "knip-plugin": ["packages/plugin-knip/src/index.ts"], - "plugin-factory": ["tooling/plugin-factory/src/index.ts"] + "@code-pushup/plugin-knip": ["packages/plugin-knip/src/lib/index.ts"], + "@code-pushup/plugin-factory": ["tooling/plugin-factory/src/index.ts"] } }, "exclude": ["node_modules", "tmp"] diff --git a/vitest.workspace.ts b/vitest.workspace.ts index 61c97a5..033b777 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -1,3 +1,3 @@ import { defineWorkspace } from 'vitest/config'; -export default defineWorkspace(['packages/*', 'examples/*-e2e']); +export default defineWorkspace(['packages/*', 'e2e/*-e2e']);