From f653376e2ae1ca4d3905cc14df9c013ce220b417 Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 14 Feb 2025 14:03:03 +0100 Subject: [PATCH 01/13] fix(nx-plugin): adjust upload config handling --- .../src/executors/cli/executor.unit.test.ts | 18 ++++++++++++++++-- packages/nx-plugin/src/executors/cli/utils.ts | 9 ++++++--- .../src/executors/cli/utils.unit.test.ts | 5 ++--- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/packages/nx-plugin/src/executors/cli/executor.unit.test.ts b/packages/nx-plugin/src/executors/cli/executor.unit.test.ts index 416ff91ab..0ea036141 100644 --- a/packages/nx-plugin/src/executors/cli/executor.unit.test.ts +++ b/packages/nx-plugin/src/executors/cli/executor.unit.test.ts @@ -69,8 +69,8 @@ describe('runAutorunExecutor', () => { expect(output.command).toMatch('--persist.filename="REPORT"'); }); - it('should create command from context, options and arguments', async () => { - envSpy.mockReturnValue({ CP_PROJECT: 'CLI' }); + it('should create command from context, options and arguments if APIkey is set', async () => { + envSpy.mockReturnValue({ CP_PROJECT: 'CLI', CP_API_KEY: '123456789' }); const output = await runAutorunExecutor( { persist: { filename: 'REPORT', format: ['md', 'json'] } }, executorContext('core'), @@ -80,6 +80,20 @@ describe('runAutorunExecutor', () => { '--persist.format="md" --persist.format="json"', ); expect(output.command).toMatch('--upload.project="CLI"'); + expect(output.command).toMatch('--upload.apiKey="123456789"'); + }); + + it('should create command from context, options and arguments without upload if APIkey is not set', async () => { + envSpy.mockReturnValue({ CP_PROJECT: 'CLI' }); + const output = await runAutorunExecutor( + { persist: { filename: 'REPORT', format: ['md', 'json'] } }, + executorContext('core'), + ); + expect(output.command).toMatch('--persist.filename="REPORT"'); + expect(output.command).toMatch( + '--persist.format="md" --persist.format="json"', + ); + expect(output.command).not.toMatch('--upload.project="CLI"'); }); it('should log information if verbose is set', async () => { diff --git a/packages/nx-plugin/src/executors/cli/utils.ts b/packages/nx-plugin/src/executors/cli/utils.ts index 61fccf0e9..afcca4542 100644 --- a/packages/nx-plugin/src/executors/cli/utils.ts +++ b/packages/nx-plugin/src/executors/cli/utils.ts @@ -27,6 +27,11 @@ export function parseAutorunExecutorOptions( const { projectPrefix, persist, upload, command } = options; const needsUploadParams = command === 'upload' || command === 'autorun' || command === undefined; + const uploadCfg = uploadConfig( + { projectPrefix, ...upload }, + normalizedContext, + ); + const hasApiToken = uploadCfg?.apiKey != null; return { ...parseAutorunExecutorOnlyOptions(options), ...globalConfig(options, normalizedContext), @@ -34,9 +39,7 @@ export function parseAutorunExecutorOptions( // @TODO This is a hack to avoid validation errors of upload config for commands that dont need it. // Fix: use utils and execute the core logic directly // Blocked by Nx plugins can't compile to es6 - upload: needsUploadParams - ? uploadConfig({ projectPrefix, ...upload }, normalizedContext) - : undefined, + ...(needsUploadParams && hasApiToken ? { upload: uploadCfg } : {}), }; } diff --git a/packages/nx-plugin/src/executors/cli/utils.unit.test.ts b/packages/nx-plugin/src/executors/cli/utils.unit.test.ts index 5626375bd..623d0512e 100644 --- a/packages/nx-plugin/src/executors/cli/utils.unit.test.ts +++ b/packages/nx-plugin/src/executors/cli/utils.unit.test.ts @@ -80,7 +80,6 @@ describe('parseAutorunExecutorOptions', () => { expect.objectContaining({ progress: false, verbose: false, - upload: { project: projectName }, }), ); @@ -98,14 +97,14 @@ describe('parseAutorunExecutorOptions', () => { }); it.each(['upload', 'autorun', undefined])( - 'should include upload config for command %s', + 'should include upload config for command %s if API key is provided', command => { const projectName = 'my-app'; const executorOptions = parseAutorunExecutorOptions( { command, upload: { - organization: 'code-pushup', + apiKey: '123456789', }, }, { From ccce7b1383126bb95bff7dcb06c193bcb701530e Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 22 Feb 2025 13:36:37 +0100 Subject: [PATCH 02/13] fix(nx-plugin): remove file extensions in imports --- nx.json | 3 +++ .../nx-plugin/src/executors/cli/executor.ts | 8 +++---- .../src/executors/cli/executor.unit.test.ts | 2 +- .../nx-plugin/src/executors/cli/schema.ts | 2 +- .../executors/cli/utils.integration.test.ts | 6 ++--- packages/nx-plugin/src/executors/cli/utils.ts | 10 +++----- .../src/executors/cli/utils.unit.test.ts | 4 ++-- .../src/executors/internal/cli.unit.test.ts | 2 +- .../internal/config.integration.test.ts | 2 +- .../src/executors/internal/config.ts | 4 ++-- .../src/executors/internal/context.ts | 2 +- .../executors/internal/context.unit.test.ts | 2 +- .../src/executors/internal/env.unit.test.ts | 2 +- .../code-pushup-config.integration.test.ts | 2 +- .../configuration/code-pushup-config.ts | 4 ++-- .../generator.integration.test.ts | 4 ++-- .../src/generators/configuration/generator.ts | 6 ++--- .../src/generators/configuration/schema.d.ts | 2 +- .../src/generators/configuration/utils.ts | 2 +- .../init/generator.integration.test.ts | 2 +- .../src/generators/init/generator.ts | 6 ++--- packages/nx-plugin/src/index.ts | 23 ++++++++----------- packages/nx-plugin/src/internal/constants.ts | 5 ++-- .../nx-plugin/src/internal/execute-process.ts | 2 +- .../src/internal/execute-process.unit.test.ts | 2 +- packages/nx-plugin/src/plugin/index.ts | 4 ++-- .../nx-plugin/src/plugin/plugin.unit.test.ts | 6 ++--- .../src/plugin/target/configuration-target.ts | 6 ++--- .../target/configuration.target.unit.test.ts | 4 ++-- .../src/plugin/target/executor-target.ts | 4 ++-- .../target/executor.target.unit.test.ts | 2 +- .../nx-plugin/src/plugin/target/targets.ts | 22 +++++++++++------- .../src/plugin/target/targets.unit.test.ts | 8 +++---- packages/nx-plugin/src/plugin/types.ts | 19 +++++++++------ .../nx-plugin/src/plugin/utils.unit.test.ts | 2 +- 35 files changed, 96 insertions(+), 90 deletions(-) diff --git a/nx.json b/nx.json index 84fbf0790..c217cad19 100644 --- a/nx.json +++ b/nx.json @@ -83,6 +83,9 @@ "releaseTagPattern": "v{version}" }, "plugins": [ + { + "plugin": "./dist/packages/nx-plugin" + }, { "plugin": "@push-based/nx-verdaccio", "options": { diff --git a/packages/nx-plugin/src/executors/cli/executor.ts b/packages/nx-plugin/src/executors/cli/executor.ts index 2ff27ed74..5db5e5e98 100644 --- a/packages/nx-plugin/src/executors/cli/executor.ts +++ b/packages/nx-plugin/src/executors/cli/executor.ts @@ -1,9 +1,9 @@ import { type ExecutorContext, logger } from '@nx/devkit'; import { execSync } from 'node:child_process'; -import { createCliCommand } from '../internal/cli.js'; -import { normalizeContext } from '../internal/context.js'; -import type { AutorunCommandExecutorOptions } from './schema.js'; -import { mergeExecutorOptions, parseAutorunExecutorOptions } from './utils.js'; +import { createCliCommand } from '../internal/cli'; +import { normalizeContext } from '../internal/context'; +import type { AutorunCommandExecutorOptions } from './schema'; +import { mergeExecutorOptions, parseAutorunExecutorOptions } from './utils'; export type ExecutorOutput = { success: boolean; diff --git a/packages/nx-plugin/src/executors/cli/executor.unit.test.ts b/packages/nx-plugin/src/executors/cli/executor.unit.test.ts index 0ea036141..f1f6dab47 100644 --- a/packages/nx-plugin/src/executors/cli/executor.unit.test.ts +++ b/packages/nx-plugin/src/executors/cli/executor.unit.test.ts @@ -3,7 +3,7 @@ import { execSync } from 'node:child_process'; import { afterEach, beforeEach, expect, vi } from 'vitest'; import { executorContext } from '@code-pushup/test-nx-utils'; import { MEMFS_VOLUME } from '@code-pushup/test-utils'; -import runAutorunExecutor from './executor.js'; +import runAutorunExecutor from './executor'; vi.mock('node:child_process', async () => { const actual = await vi.importActual('node:child_process'); diff --git a/packages/nx-plugin/src/executors/cli/schema.ts b/packages/nx-plugin/src/executors/cli/schema.ts index d73a394b6..d610483cb 100644 --- a/packages/nx-plugin/src/executors/cli/schema.ts +++ b/packages/nx-plugin/src/executors/cli/schema.ts @@ -4,7 +4,7 @@ import type { GeneralExecutorOnlyOptions, GlobalExecutorOptions, ProjectExecutorOnlyOptions, -} from '../internal/types.js'; +} from '../internal/types'; export type AutorunCommandExecutorOnlyOptions = ProjectExecutorOnlyOptions & CollectExecutorOnlyOptions & diff --git a/packages/nx-plugin/src/executors/cli/utils.integration.test.ts b/packages/nx-plugin/src/executors/cli/utils.integration.test.ts index 180f22af1..d15f9961d 100644 --- a/packages/nx-plugin/src/executors/cli/utils.integration.test.ts +++ b/packages/nx-plugin/src/executors/cli/utils.integration.test.ts @@ -1,8 +1,8 @@ import { expect, vi } from 'vitest'; import type { UploadConfig } from '@code-pushup/models'; -import { normalizedExecutorContext } from '../../../mock/utils/executor.js'; -import * as config from '../internal/config.js'; -import { parseAutorunExecutorOptions } from './utils.js'; +import { normalizedExecutorContext } from '../../../mock/utils/executor'; +import * as config from '../internal/config'; +import { parseAutorunExecutorOptions } from './utils'; describe('parseAutorunExecutorOptions', () => { const persistConfigSpy = vi.spyOn(config, 'persistConfig'); diff --git a/packages/nx-plugin/src/executors/cli/utils.ts b/packages/nx-plugin/src/executors/cli/utils.ts index afcca4542..cc121c958 100644 --- a/packages/nx-plugin/src/executors/cli/utils.ts +++ b/packages/nx-plugin/src/executors/cli/utils.ts @@ -1,13 +1,9 @@ -import { - globalConfig, - persistConfig, - uploadConfig, -} from '../internal/config.js'; -import type { NormalizedExecutorContext } from '../internal/context.js'; +import { globalConfig, persistConfig, uploadConfig } from '../internal/config'; +import type { NormalizedExecutorContext } from '../internal/context'; import type { AutorunCommandExecutorOnlyOptions, AutorunCommandExecutorOptions, -} from './schema.js'; +} from './schema'; export function parseAutorunExecutorOnlyOptions( options: Partial, diff --git a/packages/nx-plugin/src/executors/cli/utils.unit.test.ts b/packages/nx-plugin/src/executors/cli/utils.unit.test.ts index 623d0512e..4702b4dff 100644 --- a/packages/nx-plugin/src/executors/cli/utils.unit.test.ts +++ b/packages/nx-plugin/src/executors/cli/utils.unit.test.ts @@ -1,11 +1,11 @@ import { type MockInstance, expect, vi } from 'vitest'; import { osAgnosticPath } from '@code-pushup/test-utils'; -import type { Command } from '../internal/types.js'; +import type { Command } from '../internal/types'; import { mergeExecutorOptions, parseAutorunExecutorOnlyOptions, parseAutorunExecutorOptions, -} from './utils.js'; +} from './utils'; describe('parseAutorunExecutorOnlyOptions', () => { it('should provide NO default projectPrefix', () => { diff --git a/packages/nx-plugin/src/executors/internal/cli.unit.test.ts b/packages/nx-plugin/src/executors/internal/cli.unit.test.ts index e65cb0ec0..ab39b876b 100644 --- a/packages/nx-plugin/src/executors/internal/cli.unit.test.ts +++ b/packages/nx-plugin/src/executors/internal/cli.unit.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { createCliCommand, objectToCliArgs } from './cli.js'; +import { createCliCommand, objectToCliArgs } from './cli'; describe('objectToCliArgs', () => { it('should empty params', () => { diff --git a/packages/nx-plugin/src/executors/internal/config.integration.test.ts b/packages/nx-plugin/src/executors/internal/config.integration.test.ts index 54b2e32dc..4e7d91517 100644 --- a/packages/nx-plugin/src/executors/internal/config.integration.test.ts +++ b/packages/nx-plugin/src/executors/internal/config.integration.test.ts @@ -1,5 +1,5 @@ import { describe, expect } from 'vitest'; -import { ENV } from '../../../mock/fixtures/env.js'; +import { ENV } from '../../../mock/fixtures/env'; import { uploadConfig } from './config.js'; import * as env from './env.js'; diff --git a/packages/nx-plugin/src/executors/internal/config.ts b/packages/nx-plugin/src/executors/internal/config.ts index 0eb13f8a8..e083c3824 100644 --- a/packages/nx-plugin/src/executors/internal/config.ts +++ b/packages/nx-plugin/src/executors/internal/config.ts @@ -1,11 +1,11 @@ import * as path from 'node:path'; import type { PersistConfig, UploadConfig } from '@code-pushup/models'; -import { parseEnv } from './env.js'; +import { parseEnv } from './env'; import type { BaseNormalizedExecutorContext, GlobalExecutorOptions, ProjectExecutorOnlyOptions, -} from './types.js'; +} from './types'; export function globalConfig( options: Partial>, diff --git a/packages/nx-plugin/src/executors/internal/context.ts b/packages/nx-plugin/src/executors/internal/context.ts index 38ca33416..33fd4ca14 100644 --- a/packages/nx-plugin/src/executors/internal/context.ts +++ b/packages/nx-plugin/src/executors/internal/context.ts @@ -1,5 +1,5 @@ import type { ExecutorContext } from 'nx/src/config/misc-interfaces'; -import type { BaseNormalizedExecutorContext } from './types.js'; +import type { BaseNormalizedExecutorContext } from './types'; export type NormalizedExecutorContext = BaseNormalizedExecutorContext & { projectName: string; diff --git a/packages/nx-plugin/src/executors/internal/context.unit.test.ts b/packages/nx-plugin/src/executors/internal/context.unit.test.ts index 9be17d2a9..fbd43a733 100644 --- a/packages/nx-plugin/src/executors/internal/context.unit.test.ts +++ b/packages/nx-plugin/src/executors/internal/context.unit.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { normalizeContext } from './context.js'; +import { normalizeContext } from './context'; describe('normalizeContext', () => { it('should normalizeContext', () => { diff --git a/packages/nx-plugin/src/executors/internal/env.unit.test.ts b/packages/nx-plugin/src/executors/internal/env.unit.test.ts index 548ef1e3b..eca10b8c5 100644 --- a/packages/nx-plugin/src/executors/internal/env.unit.test.ts +++ b/packages/nx-plugin/src/executors/internal/env.unit.test.ts @@ -1,5 +1,5 @@ import { describe, expect } from 'vitest'; -import { parseEnv } from './env.js'; +import { parseEnv } from './env'; describe('parseEnv', () => { it('should parse empty env vars', () => { diff --git a/packages/nx-plugin/src/generators/configuration/code-pushup-config.integration.test.ts b/packages/nx-plugin/src/generators/configuration/code-pushup-config.integration.test.ts index 38238ff50..b07bd4e18 100644 --- a/packages/nx-plugin/src/generators/configuration/code-pushup-config.integration.test.ts +++ b/packages/nx-plugin/src/generators/configuration/code-pushup-config.integration.test.ts @@ -3,7 +3,7 @@ import { formatFiles } from '@nx/devkit'; import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; import * as path from 'node:path'; import { describe, expect, it } from 'vitest'; -import { generateCodePushupConfig } from './code-pushup-config.js'; +import { generateCodePushupConfig } from './code-pushup-config'; describe('generateCodePushupConfig options', () => { let tree: devKit.Tree; diff --git a/packages/nx-plugin/src/generators/configuration/code-pushup-config.ts b/packages/nx-plugin/src/generators/configuration/code-pushup-config.ts index 6854797fb..671196971 100644 --- a/packages/nx-plugin/src/generators/configuration/code-pushup-config.ts +++ b/packages/nx-plugin/src/generators/configuration/code-pushup-config.ts @@ -2,13 +2,13 @@ import { type Tree, generateFiles, logger } from '@nx/devkit'; import * as path from 'node:path'; import type { PersistConfig, UploadConfig } from '@code-pushup/models'; import type { ItemOrArray } from '@code-pushup/utils'; -import type { ExecutableCode } from './types.js'; +import type { ExecutableCode } from './types'; import { formatArrayToLinesOfJsString, formatObjectToFormattedJsString, normalizeExecutableCode, normalizeItemOrArray, -} from './utils.js'; +} from './utils'; export const DEFAULT_IMPORTS = [ "import type { CoreConfig } from '@code-pushup/models';", diff --git a/packages/nx-plugin/src/generators/configuration/generator.integration.test.ts b/packages/nx-plugin/src/generators/configuration/generator.integration.test.ts index c98d60064..dc3ce206e 100644 --- a/packages/nx-plugin/src/generators/configuration/generator.integration.test.ts +++ b/packages/nx-plugin/src/generators/configuration/generator.integration.test.ts @@ -7,8 +7,8 @@ import { import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; import * as path from 'node:path'; import { afterEach, describe, expect, it, vi } from 'vitest'; -import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants.js'; -import { addTargetToProject, configurationGenerator } from './generator.js'; +import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants'; +import { addTargetToProject, configurationGenerator } from './generator'; describe('addTargetToProject', () => { let tree: Tree; diff --git a/packages/nx-plugin/src/generators/configuration/generator.ts b/packages/nx-plugin/src/generators/configuration/generator.ts index 4b71b60a2..dc0d49913 100644 --- a/packages/nx-plugin/src/generators/configuration/generator.ts +++ b/packages/nx-plugin/src/generators/configuration/generator.ts @@ -6,9 +6,9 @@ import { updateProjectConfiguration, } from '@nx/devkit'; import type { ProjectConfiguration } from 'nx/src/config/workspace-json-project-json'; -import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants.js'; -import { generateCodePushupConfig } from './code-pushup-config.js'; -import type { ConfigurationGeneratorOptions } from './schema.js'; +import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants'; +import { generateCodePushupConfig } from './code-pushup-config'; +import type { ConfigurationGeneratorOptions } from './schema'; export async function configurationGenerator( tree: Tree, diff --git a/packages/nx-plugin/src/generators/configuration/schema.d.ts b/packages/nx-plugin/src/generators/configuration/schema.d.ts index b105270c6..d7b700308 100644 --- a/packages/nx-plugin/src/generators/configuration/schema.d.ts +++ b/packages/nx-plugin/src/generators/configuration/schema.d.ts @@ -1,4 +1,4 @@ -import type { DynamicTargetOptions } from '../../internal/types.js'; +import type { DynamicTargetOptions } from '../../internal/types'; export type ConfigurationGeneratorOptions = { project: string; diff --git a/packages/nx-plugin/src/generators/configuration/utils.ts b/packages/nx-plugin/src/generators/configuration/utils.ts index 36464358a..5063a7aef 100644 --- a/packages/nx-plugin/src/generators/configuration/utils.ts +++ b/packages/nx-plugin/src/generators/configuration/utils.ts @@ -1,5 +1,5 @@ import type { ExtractArrays } from '@code-pushup/utils'; -import type { ExecutableCode } from './types.js'; +import type { ExecutableCode } from './types'; export function normalizeExecutableCode( executableCode: ExecutableCode, diff --git a/packages/nx-plugin/src/generators/init/generator.integration.test.ts b/packages/nx-plugin/src/generators/init/generator.integration.test.ts index 5ab890bd1..05fe14511 100644 --- a/packages/nx-plugin/src/generators/init/generator.integration.test.ts +++ b/packages/nx-plugin/src/generators/init/generator.integration.test.ts @@ -1,7 +1,7 @@ import { type Tree, logger, readJson, readNxJson } from '@nx/devkit'; import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; import { describe, expect, it, vi } from 'vitest'; -import { initGenerator } from './generator.js'; +import { initGenerator } from './generator'; type PackageJson = { devDependencies: Record; diff --git a/packages/nx-plugin/src/generators/init/generator.ts b/packages/nx-plugin/src/generators/init/generator.ts index 265298fb0..12f058751 100644 --- a/packages/nx-plugin/src/generators/init/generator.ts +++ b/packages/nx-plugin/src/generators/init/generator.ts @@ -12,14 +12,14 @@ import { updateNxJson, } from '@nx/devkit'; import type { PackageJson } from 'nx/src/utils/package-json'; -import { PACKAGE_NAME } from '../../internal/constants.js'; +import { PACKAGE_NAME } from '../../internal/constants'; import { cpCliVersion, cpModelVersion, cpNxPluginVersion, cpUtilsVersion, -} from '../../internal/versions.js'; -import type { InitGeneratorSchema } from './schema.js'; +} from '../../internal/versions'; +import type { InitGeneratorSchema } from './schema'; function checkDependenciesInstalled(host: Tree) { const packageJson = readJson(host, 'package.json'); diff --git a/packages/nx-plugin/src/index.ts b/packages/nx-plugin/src/index.ts index 20ebba48a..d8f698bbb 100644 --- a/packages/nx-plugin/src/index.ts +++ b/packages/nx-plugin/src/index.ts @@ -1,18 +1,15 @@ -import { createNodes } from './plugin/index.js'; +import { createNodes } from './plugin/index'; // default export for nx.json#plugins export default createNodes; -export * from './internal/versions.js'; -export { type InitGeneratorSchema } from './generators/init/schema.js'; -export { initGenerator, initSchematic } from './generators/init/generator.js'; -export type { ConfigurationGeneratorOptions } from './generators/configuration/schema.js'; -export { configurationGenerator } from './generators/configuration/generator.js'; -export { generateCodePushupConfig } from './generators/configuration/code-pushup-config.js'; -export { createNodes } from './plugin/index.js'; -export { - executeProcess, - type ProcessConfig, -} from './internal/execute-process.js'; -export { objectToCliArgs } from './executors/internal/cli.js'; +export * from './internal/versions'; +export { type InitGeneratorSchema } from './generators/init/schema'; +export { initGenerator, initSchematic } from './generators/init/generator'; +export type { ConfigurationGeneratorOptions } from './generators/configuration/schema'; +export { configurationGenerator } from './generators/configuration/generator'; +export { generateCodePushupConfig } from './generators/configuration/code-pushup-config'; +export { createNodes } from './plugin/index'; +export { executeProcess, type ProcessConfig } from './internal/execute-process'; +export { objectToCliArgs } from './executors/internal/cli'; export type { AutorunCommandExecutorOptions } from './executors/cli/schema.js'; diff --git a/packages/nx-plugin/src/internal/constants.ts b/packages/nx-plugin/src/internal/constants.ts index cac41a656..f69356ea3 100644 --- a/packages/nx-plugin/src/internal/constants.ts +++ b/packages/nx-plugin/src/internal/constants.ts @@ -1,5 +1,4 @@ -import { name } from '../../package.json'; - export const PROJECT_JSON_FILE_NAME = 'project.json'; -export const PACKAGE_NAME = name; +export const CODE_PUSHUP_CONFIG_REGEX = /^code-pushup(?:\.[\w-]+)?\.ts$/; +export const PACKAGE_NAME = '@code-pushup/nx-plugin'; export const DEFAULT_TARGET_NAME = 'code-pushup'; diff --git a/packages/nx-plugin/src/internal/execute-process.ts b/packages/nx-plugin/src/internal/execute-process.ts index cedc3fdbc..c9772cf78 100644 --- a/packages/nx-plugin/src/internal/execute-process.ts +++ b/packages/nx-plugin/src/internal/execute-process.ts @@ -123,7 +123,7 @@ export type ProcessObserver = { * // async process execution * const result = await executeProcess({ * command: 'node', - * args: ['download-data.js'], + * args: ['download-data'], * observer: { * onStdout: updateProgress, * error: handleError, diff --git a/packages/nx-plugin/src/internal/execute-process.unit.test.ts b/packages/nx-plugin/src/internal/execute-process.unit.test.ts index 5893b867f..58555a7ee 100644 --- a/packages/nx-plugin/src/internal/execute-process.unit.test.ts +++ b/packages/nx-plugin/src/internal/execute-process.unit.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest'; import { getAsyncProcessRunnerConfig } from '@code-pushup/test-utils'; -import { type ProcessObserver, executeProcess } from './execute-process.js'; +import { type ProcessObserver, executeProcess } from './execute-process'; describe('executeProcess', () => { const spyObserver: ProcessObserver = { diff --git a/packages/nx-plugin/src/plugin/index.ts b/packages/nx-plugin/src/plugin/index.ts index 648d0b4aa..186bb0d5c 100644 --- a/packages/nx-plugin/src/plugin/index.ts +++ b/packages/nx-plugin/src/plugin/index.ts @@ -1,2 +1,2 @@ -export { createNodes } from './plugin.js'; -export type { CreateNodesOptions } from './types.js'; +export { createNodes } from './plugin'; +export type { CreateNodesOptions } from './types'; diff --git a/packages/nx-plugin/src/plugin/plugin.unit.test.ts b/packages/nx-plugin/src/plugin/plugin.unit.test.ts index c51ebf570..aa218e617 100644 --- a/packages/nx-plugin/src/plugin/plugin.unit.test.ts +++ b/packages/nx-plugin/src/plugin/plugin.unit.test.ts @@ -2,9 +2,9 @@ import type { CreateNodesContext } from '@nx/devkit'; import { vol } from 'memfs'; import { describe, expect } from 'vitest'; import { invokeCreateNodesOnVirtualFiles } from '@code-pushup/test-nx-utils'; -import { PACKAGE_NAME, PROJECT_JSON_FILE_NAME } from '../internal/constants.js'; -import { CP_TARGET_NAME } from './constants.js'; -import { createNodes } from './plugin.js'; +import { PACKAGE_NAME, PROJECT_JSON_FILE_NAME } from '../internal/constants'; +import { CP_TARGET_NAME } from './constants'; +import { createNodes } from './plugin'; describe('@code-pushup/nx-plugin/plugin', () => { let context: CreateNodesContext; diff --git a/packages/nx-plugin/src/plugin/target/configuration-target.ts b/packages/nx-plugin/src/plugin/target/configuration-target.ts index d19b9325b..f9b16c985 100644 --- a/packages/nx-plugin/src/plugin/target/configuration-target.ts +++ b/packages/nx-plugin/src/plugin/target/configuration-target.ts @@ -1,8 +1,8 @@ import type { TargetConfiguration } from '@nx/devkit'; import type { RunCommandsOptions } from 'nx/src/executors/run-commands/run-commands.impl'; -import { objectToCliArgs } from '../../executors/internal/cli.js'; -import { PACKAGE_NAME } from '../../internal/constants.js'; -import { CP_TARGET_NAME } from '../constants.js'; +import { objectToCliArgs } from '../../executors/internal/cli'; +import { PACKAGE_NAME } from '../../internal/constants'; +import { CP_TARGET_NAME } from '../constants'; export function createConfigurationTarget(options?: { targetName?: string; diff --git a/packages/nx-plugin/src/plugin/target/configuration.target.unit.test.ts b/packages/nx-plugin/src/plugin/target/configuration.target.unit.test.ts index 87f4418c9..95bf05a6d 100644 --- a/packages/nx-plugin/src/plugin/target/configuration.target.unit.test.ts +++ b/packages/nx-plugin/src/plugin/target/configuration.target.unit.test.ts @@ -1,6 +1,6 @@ import { expect } from 'vitest'; -import { PACKAGE_NAME } from '../../internal/constants.js'; -import { createConfigurationTarget } from './configuration-target.js'; +import { PACKAGE_NAME } from '../../internal/constants'; +import { createConfigurationTarget } from './configuration-target'; describe('createConfigurationTarget', () => { it('should return code-pushup--configuration target for given project', () => { diff --git a/packages/nx-plugin/src/plugin/target/executor-target.ts b/packages/nx-plugin/src/plugin/target/executor-target.ts index e8b52eb8f..aeba82ad8 100644 --- a/packages/nx-plugin/src/plugin/target/executor-target.ts +++ b/packages/nx-plugin/src/plugin/target/executor-target.ts @@ -1,6 +1,6 @@ import type { TargetConfiguration } from '@nx/devkit'; -import { PACKAGE_NAME } from '../../internal/constants.js'; -import type { ProjectPrefixOptions } from '../types.js'; +import { PACKAGE_NAME } from '../../internal/constants'; +import type { ProjectPrefixOptions } from '../types'; export function createExecutorTarget(options?: { bin?: string; diff --git a/packages/nx-plugin/src/plugin/target/executor.target.unit.test.ts b/packages/nx-plugin/src/plugin/target/executor.target.unit.test.ts index 610b44bd7..8ea0799a7 100644 --- a/packages/nx-plugin/src/plugin/target/executor.target.unit.test.ts +++ b/packages/nx-plugin/src/plugin/target/executor.target.unit.test.ts @@ -1,5 +1,5 @@ import { expect } from 'vitest'; -import { createExecutorTarget } from './executor-target.js'; +import { createExecutorTarget } from './executor-target'; describe('createExecutorTarget', () => { it('should return executor target without project name', () => { diff --git a/packages/nx-plugin/src/plugin/target/targets.ts b/packages/nx-plugin/src/plugin/target/targets.ts index 3e659688b..188252a8d 100644 --- a/packages/nx-plugin/src/plugin/target/targets.ts +++ b/packages/nx-plugin/src/plugin/target/targets.ts @@ -1,13 +1,19 @@ import { readdir } from 'node:fs/promises'; -import { CP_TARGET_NAME } from '../constants.js'; -import type { NormalizedCreateNodesContext } from '../types.js'; -import { createConfigurationTarget } from './configuration-target.js'; -import { CODE_PUSHUP_CONFIG_REGEX } from './constants.js'; -import { createExecutorTarget } from './executor-target.js'; +import { CP_TARGET_NAME } from '../constants'; +import type { + CreateNodesOptions, + ProjectConfigurationWithName, +} from '../types'; +import { createConfigurationTarget } from './configuration-target'; +import { CODE_PUSHUP_CONFIG_REGEX } from './constants'; +import { createExecutorTarget } from './executor-target'; -export async function createTargets( - normalizedContext: NormalizedCreateNodesContext, -) { +export type CreateTargetsOptions = { + projectJson: ProjectConfigurationWithName; + projectRoot: string; + createOptions: CreateNodesOptions; +}; +export async function createTargets(normalizedContext: CreateTargetsOptions) { const { targetName = CP_TARGET_NAME, bin, diff --git a/packages/nx-plugin/src/plugin/target/targets.unit.test.ts b/packages/nx-plugin/src/plugin/target/targets.unit.test.ts index 9b730f726..0de7288d2 100644 --- a/packages/nx-plugin/src/plugin/target/targets.unit.test.ts +++ b/packages/nx-plugin/src/plugin/target/targets.unit.test.ts @@ -2,10 +2,10 @@ import { vol } from 'memfs'; import { rm } from 'node:fs/promises'; import { afterEach, beforeEach, expect } from 'vitest'; import { MEMFS_VOLUME } from '@code-pushup/test-utils'; -import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants.js'; -import { CP_TARGET_NAME } from '../constants.js'; -import type { NormalizedCreateNodesContext } from '../types.js'; -import { createTargets } from './targets.js'; +import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants'; +import { CP_TARGET_NAME } from '../constants'; +import type { NormalizedCreateNodesContext } from '../types'; +import { createTargets } from './targets'; describe('createTargets', () => { beforeEach(async () => { diff --git a/packages/nx-plugin/src/plugin/types.ts b/packages/nx-plugin/src/plugin/types.ts index 5e8d59db7..eb5982ce0 100644 --- a/packages/nx-plugin/src/plugin/types.ts +++ b/packages/nx-plugin/src/plugin/types.ts @@ -1,6 +1,11 @@ -import type { CreateNodesContext, ProjectConfiguration } from '@nx/devkit'; +import type { + CreateNodesContext, + CreateNodesContextV2, + ProjectConfiguration, +} from '@nx/devkit'; import type { WithRequired } from '@code-pushup/utils'; -import type { DynamicTargetOptions } from '../internal/types.js'; +import type { DynamicTargetOptions } from '../internal/types'; +import { CreateTargetsOptions } from './target/targets'; export type ProjectPrefixOptions = { projectPrefix?: string; @@ -13,8 +18,8 @@ export type ProjectConfigurationWithName = WithRequired< 'name' >; -export type NormalizedCreateNodesContext = CreateNodesContext & { - projectJson: ProjectConfigurationWithName; - projectRoot: string; - createOptions: CreateNodesOptions; -}; +export type NormalizedCreateNodesContext = CreateNodesContext & + CreateTargetsOptions; + +export type NormalizedCreateNodesV2Context = CreateNodesContextV2 & + CreateTargetsOptions; diff --git a/packages/nx-plugin/src/plugin/utils.unit.test.ts b/packages/nx-plugin/src/plugin/utils.unit.test.ts index edf2bf1cb..f88811467 100644 --- a/packages/nx-plugin/src/plugin/utils.unit.test.ts +++ b/packages/nx-plugin/src/plugin/utils.unit.test.ts @@ -2,7 +2,7 @@ import { vol } from 'memfs'; import { describe, expect } from 'vitest'; import { createNodesContext } from '@code-pushup/test-nx-utils'; import { MEMFS_VOLUME } from '@code-pushup/test-utils'; -import { normalizedCreateNodesContext } from './utils.js'; +import { normalizedCreateNodesContext } from './utils'; describe('normalizedCreateNodesContext', () => { it('should provide workspaceRoot', async () => { From d10f1bea8310d78089807ab994b511100798f5cf Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 22 Feb 2025 13:38:28 +0100 Subject: [PATCH 03/13] fix(nx-plugin): add createNodesV2 --- packages/nx-plugin/src/plugin/plugin.ts | 58 ++++++++++++++++++++++--- packages/nx-plugin/src/plugin/utils.ts | 33 ++++++++++++-- 2 files changed, 82 insertions(+), 9 deletions(-) diff --git a/packages/nx-plugin/src/plugin/plugin.ts b/packages/nx-plugin/src/plugin/plugin.ts index 9129f1bd7..ae60f2193 100644 --- a/packages/nx-plugin/src/plugin/plugin.ts +++ b/packages/nx-plugin/src/plugin/plugin.ts @@ -1,14 +1,24 @@ -import type { +import { CreateNodes, CreateNodesContext, + CreateNodesContextV2, CreateNodesResult, + CreateNodesV2, + createNodesFromFiles, } from '@nx/devkit'; -import { PROJECT_JSON_FILE_NAME } from '../internal/constants.js'; -import { createTargets } from './target/targets.js'; -import type { CreateNodesOptions } from './types.js'; -import { normalizedCreateNodesContext } from './utils.js'; +import { dirname } from 'path'; +import { + CODE_PUSHUP_CONFIG_REGEX, + PROJECT_JSON_FILE_NAME, +} from '../internal/constants'; +import { createTargets } from './target/targets'; +import type { CreateNodesOptions } from './types'; +import { + normalizedCreateNodesContext, + normalizedCreateNodesV2Context, +} from './utils'; -// name has to be "createNodes" to get picked up by Nx +// name has to be "createNodes" to get picked up by Nx = [ + `**/${CODE_PUSHUP_CONFIG_REGEX}`, + async (configFiles, options, context) => { + return await createNodesFromFiles( + (configFile, options, context) => + createNodesInternal(configFile, options ?? {}, context), + configFiles, + options, + context, + ); + }, +]; + +async function createNodesInternal( + codePushupConfigFilePath: string, + options: CreateNodesOptions, + context: CreateNodesContextV2, +) { + //const projectConfiguration = readJsonFile(configFilePath); + const root = dirname(codePushupConfigFilePath); + const parsedCreateNodesOptions = options; + const normalizedContext = await normalizedCreateNodesV2Context( + context, + codePushupConfigFilePath, + parsedCreateNodesOptions, + ); + // Project configuration to be merged into the rest of the Nx configuration + return { + projects: { + [root]: { + targets: await createTargets(normalizedContext), + }, + }, + }; +} diff --git a/packages/nx-plugin/src/plugin/utils.ts b/packages/nx-plugin/src/plugin/utils.ts index e7a819f8d..b8b7cc4be 100644 --- a/packages/nx-plugin/src/plugin/utils.ts +++ b/packages/nx-plugin/src/plugin/utils.ts @@ -1,12 +1,13 @@ -import type { CreateNodesContext } from '@nx/devkit'; +import type { CreateNodesContext, CreateNodesContextV2 } from '@nx/devkit'; import { readFile } from 'node:fs/promises'; import * as path from 'node:path'; -import { CP_TARGET_NAME } from './constants.js'; +import { CP_TARGET_NAME } from './constants'; import type { CreateNodesOptions, NormalizedCreateNodesContext, + NormalizedCreateNodesV2Context, ProjectConfigurationWithName, -} from './types.js'; +} from './types'; export async function normalizedCreateNodesContext( context: CreateNodesContext, @@ -36,3 +37,29 @@ export async function normalizedCreateNodesContext( ); } } + +export async function normalizedCreateNodesV2Context( + context: CreateNodesContextV2, + projectConfigurationFile: string, + createOptions: CreateNodesOptions = {}, +): Promise { + const projectRoot = path.dirname(projectConfigurationFile); + + try { + const projectJson = JSON.parse( + (await readFile(projectConfigurationFile)).toString(), + ) as ProjectConfigurationWithName; + + const { targetName = CP_TARGET_NAME } = createOptions; + return { + ...context, + projectJson, + projectRoot, + createOptions: { ...createOptions, targetName }, + }; + } catch { + throw new Error( + `Error parsing project.json file ${projectConfigurationFile}.`, + ); + } +} From ff94e39992880e51f74c0c9e2b4126ed71b47453 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 22 Feb 2025 14:24:42 +0100 Subject: [PATCH 04/13] fix(nx-plugin): add createNodesV2 --- .../src/executors/cli/utils.unit.test.ts | 4 ++-- packages/nx-plugin/src/plugin/plugin.unit.test.ts | 1 + testing/test-nx-utils/src/lib/utils/nx-plugin.ts | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/nx-plugin/src/executors/cli/utils.unit.test.ts b/packages/nx-plugin/src/executors/cli/utils.unit.test.ts index 4702b4dff..c56bd198d 100644 --- a/packages/nx-plugin/src/executors/cli/utils.unit.test.ts +++ b/packages/nx-plugin/src/executors/cli/utils.unit.test.ts @@ -73,7 +73,7 @@ describe('parseAutorunExecutorOptions', () => { }, }, ); - expect(osAgnosticPath(executorOptions.config)).toBe( + expect(osAgnosticPath(executorOptions.config ?? '')).toBe( osAgnosticPath('root/code-pushup.config.ts'), ); expect(executorOptions).toEqual( @@ -91,7 +91,7 @@ describe('parseAutorunExecutorOptions', () => { }), ); - expect(osAgnosticPath(executorOptions.persist?.outputDir)).toBe( + expect(osAgnosticPath(executorOptions.persist?.outputDir ?? '')).toBe( osAgnosticPath('workspaceRoot/.code-pushup/my-app'), ); }); diff --git a/packages/nx-plugin/src/plugin/plugin.unit.test.ts b/packages/nx-plugin/src/plugin/plugin.unit.test.ts index aa218e617..012524116 100644 --- a/packages/nx-plugin/src/plugin/plugin.unit.test.ts +++ b/packages/nx-plugin/src/plugin/plugin.unit.test.ts @@ -13,6 +13,7 @@ describe('@code-pushup/nx-plugin/plugin', () => { context = { nxJsonConfiguration: {}, workspaceRoot: '', + configFiles: [], }; }); diff --git a/testing/test-nx-utils/src/lib/utils/nx-plugin.ts b/testing/test-nx-utils/src/lib/utils/nx-plugin.ts index 30d9706ba..65676bd9a 100644 --- a/testing/test-nx-utils/src/lib/utils/nx-plugin.ts +++ b/testing/test-nx-utils/src/lib/utils/nx-plugin.ts @@ -56,6 +56,21 @@ export async function invokeCreateNodesOnVirtualFiles< } export function createNodesContext( + options?: Partial, +): CreateNodesContext { + const { + workspaceRoot = process.cwd(), + nxJsonConfiguration = {}, + configFiles = [], + } = options ?? {}; + return { + workspaceRoot, + nxJsonConfiguration, + configFiles, + }; +} + +export function createNodesV2Context( options?: Partial, ): CreateNodesContextV2 { const { workspaceRoot = process.cwd(), nxJsonConfiguration = {} } = From 45c8667540fedf1f5a5b367e549603672255678c Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 22 Feb 2025 14:25:08 +0100 Subject: [PATCH 05/13] ci: setup plugin --- nx.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nx.json b/nx.json index c217cad19..2f47964b6 100644 --- a/nx.json +++ b/nx.json @@ -84,7 +84,10 @@ }, "plugins": [ { - "plugin": "./dist/packages/nx-plugin" + "plugin": "./dist/packages/nx-plugin", + "options": { + "targetName": "cp" + } }, { "plugin": "@push-based/nx-verdaccio", From a3316bc3f0e7fccb8e6898909286b6b7f4331e66 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 22 Feb 2025 14:25:30 +0100 Subject: [PATCH 06/13] ci: setup cp for models --- packages/models/code-pushup.config.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 packages/models/code-pushup.config.ts diff --git a/packages/models/code-pushup.config.ts b/packages/models/code-pushup.config.ts new file mode 100644 index 000000000..1c4475af8 --- /dev/null +++ b/packages/models/code-pushup.config.ts @@ -0,0 +1,10 @@ +import { mergeConfigs } from '@code-pushup/utils'; +import { eslintCoreConfigNx } from '../../code-pushup.preset'; + +// see: https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#coreconfig +export default mergeConfigs( + { + plugins: [], + }, + await eslintCoreConfigNx(), +); From 48143dca4bad6235c687979dc3089cfbaf4a28e3 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 22 Feb 2025 14:36:34 +0100 Subject: [PATCH 07/13] wip --- nx.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nx.json b/nx.json index 2f47964b6..9289a6979 100644 --- a/nx.json +++ b/nx.json @@ -84,7 +84,7 @@ }, "plugins": [ { - "plugin": "./dist/packages/nx-plugin", + "plugin": "@code-pushup/nx-plugin", "options": { "targetName": "cp" } From 233cfd7324958336b016417ca9b159e58425eb25 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 4 Mar 2025 00:39:56 +0100 Subject: [PATCH 08/13] wip 1 --- .../tests/executor-cli.e2e.test.ts | 26 ++++++++++++++ packages/models/code-pushup.config.ts | 4 +-- packages/models/tsconfig.test.json | 1 + packages/nx-plugin/src/plugin/plugin.ts | 36 ------------------- 4 files changed, 29 insertions(+), 38 deletions(-) diff --git a/e2e/nx-plugin-e2e/tests/executor-cli.e2e.test.ts b/e2e/nx-plugin-e2e/tests/executor-cli.e2e.test.ts index 2a3797492..e5561a462 100644 --- a/e2e/nx-plugin-e2e/tests/executor-cli.e2e.test.ts +++ b/e2e/nx-plugin-e2e/tests/executor-cli.e2e.test.ts @@ -100,6 +100,32 @@ describe('executor command', () => { ).rejects.toThrow(''); }); + it('should execute print-config executor with api key', async () => { + const cwd = path.join(testFileDir, 'execute-print-config-command'); + await addTargetToWorkspace(tree, { cwd, project }); + + const { stdout, code } = await executeProcess({ + command: 'npx', + args: [ + 'nx', + 'run', + `${project}:code-pushup`, + 'print-config', + '--upload.apiKey=a123a', + ], + cwd, + }); + + expect(code).toBe(0); + const cleanStdout = removeColorCodes(stdout); + expect(cleanStdout).toContain('nx run my-lib:code-pushup print-config'); + expect(cleanStdout).toContain('a123a'); + + await expect(() => + readJsonFile(path.join(cwd, '.code-pushup', project, 'report.json')), + ).rejects.toThrow(''); + }); + it('should execute collect executor and merge target and command-line options', async () => { const cwd = path.join(testFileDir, 'execute-collect-with-merged-options'); await addTargetToWorkspace( diff --git a/packages/models/code-pushup.config.ts b/packages/models/code-pushup.config.ts index 1c4475af8..dad38404f 100644 --- a/packages/models/code-pushup.config.ts +++ b/packages/models/code-pushup.config.ts @@ -1,5 +1,5 @@ -import { mergeConfigs } from '@code-pushup/utils'; -import { eslintCoreConfigNx } from '../../code-pushup.preset'; +import { eslintCoreConfigNx } from '../../code-pushup.preset.js'; +import { mergeConfigs } from '../../dist/packages/utils/src/index.js'; // see: https://github.com/code-pushup/cli/blob/main/packages/models/docs/models-reference.md#coreconfig export default mergeConfigs( diff --git a/packages/models/tsconfig.test.json b/packages/models/tsconfig.test.json index bb1ab5e0c..c7a178bbe 100644 --- a/packages/models/tsconfig.test.json +++ b/packages/models/tsconfig.test.json @@ -4,6 +4,7 @@ "outDir": "../../dist/out-tsc", "types": ["vitest/globals", "vitest/importMeta", "vite/client", "node"] }, + "exclude": ["**/code-pushup.config.ts"], "include": [ "vite.config.unit.ts", "vite.config.integration.ts", diff --git a/packages/nx-plugin/src/plugin/plugin.ts b/packages/nx-plugin/src/plugin/plugin.ts index ae60f2193..f5235f13d 100644 --- a/packages/nx-plugin/src/plugin/plugin.ts +++ b/packages/nx-plugin/src/plugin/plugin.ts @@ -42,39 +42,3 @@ export const createNodes: CreateNodes = [ }; }, ]; - -export const createNodesV2: CreateNodesV2 = [ - `**/${CODE_PUSHUP_CONFIG_REGEX}`, - async (configFiles, options, context) => { - return await createNodesFromFiles( - (configFile, options, context) => - createNodesInternal(configFile, options ?? {}, context), - configFiles, - options, - context, - ); - }, -]; - -async function createNodesInternal( - codePushupConfigFilePath: string, - options: CreateNodesOptions, - context: CreateNodesContextV2, -) { - //const projectConfiguration = readJsonFile(configFilePath); - const root = dirname(codePushupConfigFilePath); - const parsedCreateNodesOptions = options; - const normalizedContext = await normalizedCreateNodesV2Context( - context, - codePushupConfigFilePath, - parsedCreateNodesOptions, - ); - // Project configuration to be merged into the rest of the Nx configuration - return { - projects: { - [root]: { - targets: await createTargets(normalizedContext), - }, - }, - }; -} From c2ec88c0ef30dc5ef9fa0ae168451ac19ac56d40 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 5 Mar 2025 01:07:31 +0100 Subject: [PATCH 09/13] fix(nx-plugin): fix lint --- .../{eslint.config.cjs => eslint.config.js} | 1 + .../src/executors/cli/executor.unit.test.ts | 0 packages/nx-plugin/src/plugin/plugin.ts | 16 +++------------- packages/nx-plugin/src/plugin/types.ts | 2 +- 4 files changed, 5 insertions(+), 14 deletions(-) rename packages/nx-plugin/{eslint.config.cjs => eslint.config.js} (96%) delete mode 100644 packages/nx-plugin/src/executors/cli/executor.unit.test.ts diff --git a/packages/nx-plugin/eslint.config.cjs b/packages/nx-plugin/eslint.config.js similarity index 96% rename from packages/nx-plugin/eslint.config.cjs rename to packages/nx-plugin/eslint.config.js index e732748e6..937c98765 100644 --- a/packages/nx-plugin/eslint.config.cjs +++ b/packages/nx-plugin/eslint.config.js @@ -17,6 +17,7 @@ module.exports = tseslint.config( rules: { // Nx plugins don't yet support ESM: https://github.com/nrwl/nx/issues/15682 'unicorn/prefer-module': 'off', + 'n/file-extension-in-import': 'off', // used instead of verbatimModuleSyntax tsconfig flag (requires ESM) '@typescript-eslint/consistent-type-imports': [ 'warn', diff --git a/packages/nx-plugin/src/executors/cli/executor.unit.test.ts b/packages/nx-plugin/src/executors/cli/executor.unit.test.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/nx-plugin/src/plugin/plugin.ts b/packages/nx-plugin/src/plugin/plugin.ts index f5235f13d..b80ede311 100644 --- a/packages/nx-plugin/src/plugin/plugin.ts +++ b/packages/nx-plugin/src/plugin/plugin.ts @@ -1,22 +1,12 @@ -import { +import type { CreateNodes, CreateNodesContext, - CreateNodesContextV2, CreateNodesResult, - CreateNodesV2, - createNodesFromFiles, } from '@nx/devkit'; -import { dirname } from 'path'; -import { - CODE_PUSHUP_CONFIG_REGEX, - PROJECT_JSON_FILE_NAME, -} from '../internal/constants'; +import { PROJECT_JSON_FILE_NAME } from '../internal/constants'; import { createTargets } from './target/targets'; import type { CreateNodesOptions } from './types'; -import { - normalizedCreateNodesContext, - normalizedCreateNodesV2Context, -} from './utils'; +import { normalizedCreateNodesContext } from './utils'; // name has to be "createNodes" to get picked up by Nx Date: Wed, 5 Mar 2025 02:05:50 +0100 Subject: [PATCH 10/13] fix(nx-plugin): fix lint --- .../src/lib/utils/nx-plugin.unit.test.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/testing/test-nx-utils/src/lib/utils/nx-plugin.unit.test.ts b/testing/test-nx-utils/src/lib/utils/nx-plugin.unit.test.ts index 68a9d5daa..7710cfccf 100644 --- a/testing/test-nx-utils/src/lib/utils/nx-plugin.unit.test.ts +++ b/testing/test-nx-utils/src/lib/utils/nx-plugin.unit.test.ts @@ -11,18 +11,22 @@ describe('createNodesContext', () => { workspaceRoot: 'root', nxJsonConfiguration: { plugins: [] }, }); - expect(context).toEqual({ - workspaceRoot: 'root', - nxJsonConfiguration: { plugins: [] }, - }); + expect(context).toStrictEqual( + expect.objectContaining({ + workspaceRoot: 'root', + nxJsonConfiguration: { plugins: [] }, + }), + ); }); it('should return a context with defaults', () => { const context = createNodesContext(); - expect(context).toEqual({ - workspaceRoot: process.cwd(), - nxJsonConfiguration: {}, - }); + expect(context).toStrictEqual( + expect.objectContaining({ + workspaceRoot: process.cwd(), + nxJsonConfiguration: {}, + }), + ); }); }); From 35961492448eeac52c00edbe870f47256ed595be Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 5 Mar 2025 02:08:39 +0100 Subject: [PATCH 11/13] fix: wip --- nx.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/nx.json b/nx.json index 019e31adf..84fbf0790 100644 --- a/nx.json +++ b/nx.json @@ -16,11 +16,6 @@ "e2e": { "dependsOn": ["^build"] }, - "cp": { - "options": { - "bin": "dist/packages/cli/src/index.js" - } - }, "@nx/vite:test": { "cache": true, "inputs": ["default", "^production"], From d3756863673bd1af658eff536df173646d997309 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 5 Mar 2025 12:19:38 +0100 Subject: [PATCH 12/13] docs: add js docs --- packages/nx-plugin/src/internal/versions.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/nx-plugin/src/internal/versions.ts b/packages/nx-plugin/src/internal/versions.ts index 884dad9a7..b7e24f64a 100644 --- a/packages/nx-plugin/src/internal/versions.ts +++ b/packages/nx-plugin/src/internal/versions.ts @@ -16,6 +16,10 @@ export const cpCliVersion = loadPackageJson( path.join(projectsFolder, 'models'), ).version; +/** + * Load the package.json file from the given folder path. + * @param folderPath + */ function loadPackageJson(folderPath: string): PackageJson { return readJsonFile(path.join(folderPath, 'package.json')); } From ba918503a2216d3b89f943f01893d1a34eaf2812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Chalk?= Date: Mon, 10 Mar 2025 11:59:01 +0100 Subject: [PATCH 13/13] refactor(nx-plugin): explicit import extensions --- .../nx-plugin/src/executors/cli/executor.ts | 8 +++---- .../nx-plugin/src/executors/cli/schema.ts | 2 +- .../executors/cli/utils.integration.test.ts | 6 ++--- packages/nx-plugin/src/executors/cli/utils.ts | 10 +++++--- .../src/executors/cli/utils.unit.test.ts | 4 ++-- .../src/executors/internal/cli.unit.test.ts | 2 +- .../internal/config.integration.test.ts | 2 +- .../src/executors/internal/config.ts | 4 ++-- .../src/executors/internal/context.ts | 2 +- .../executors/internal/context.unit.test.ts | 2 +- .../src/executors/internal/env.unit.test.ts | 2 +- .../code-pushup-config.integration.test.ts | 2 +- .../configuration/code-pushup-config.ts | 4 ++-- .../generator.integration.test.ts | 4 ++-- .../src/generators/configuration/generator.ts | 6 ++--- .../src/generators/configuration/schema.d.ts | 2 +- .../src/generators/configuration/utils.ts | 2 +- .../init/generator.integration.test.ts | 2 +- .../src/generators/init/generator.ts | 6 ++--- packages/nx-plugin/src/index.ts | 23 +++++++++++-------- .../src/internal/execute-process.unit.test.ts | 2 +- packages/nx-plugin/src/plugin/index.ts | 4 ++-- packages/nx-plugin/src/plugin/plugin.ts | 8 +++---- .../nx-plugin/src/plugin/plugin.unit.test.ts | 6 ++--- .../src/plugin/target/configuration-target.ts | 6 ++--- .../target/configuration.target.unit.test.ts | 4 ++-- .../src/plugin/target/executor-target.ts | 4 ++-- .../target/executor.target.unit.test.ts | 2 +- .../nx-plugin/src/plugin/target/targets.ts | 10 ++++---- .../src/plugin/target/targets.unit.test.ts | 8 +++---- packages/nx-plugin/src/plugin/types.ts | 4 ++-- packages/nx-plugin/src/plugin/utils.ts | 4 ++-- .../nx-plugin/src/plugin/utils.unit.test.ts | 2 +- 33 files changed, 83 insertions(+), 76 deletions(-) diff --git a/packages/nx-plugin/src/executors/cli/executor.ts b/packages/nx-plugin/src/executors/cli/executor.ts index 5db5e5e98..2ff27ed74 100644 --- a/packages/nx-plugin/src/executors/cli/executor.ts +++ b/packages/nx-plugin/src/executors/cli/executor.ts @@ -1,9 +1,9 @@ import { type ExecutorContext, logger } from '@nx/devkit'; import { execSync } from 'node:child_process'; -import { createCliCommand } from '../internal/cli'; -import { normalizeContext } from '../internal/context'; -import type { AutorunCommandExecutorOptions } from './schema'; -import { mergeExecutorOptions, parseAutorunExecutorOptions } from './utils'; +import { createCliCommand } from '../internal/cli.js'; +import { normalizeContext } from '../internal/context.js'; +import type { AutorunCommandExecutorOptions } from './schema.js'; +import { mergeExecutorOptions, parseAutorunExecutorOptions } from './utils.js'; export type ExecutorOutput = { success: boolean; diff --git a/packages/nx-plugin/src/executors/cli/schema.ts b/packages/nx-plugin/src/executors/cli/schema.ts index d610483cb..d73a394b6 100644 --- a/packages/nx-plugin/src/executors/cli/schema.ts +++ b/packages/nx-plugin/src/executors/cli/schema.ts @@ -4,7 +4,7 @@ import type { GeneralExecutorOnlyOptions, GlobalExecutorOptions, ProjectExecutorOnlyOptions, -} from '../internal/types'; +} from '../internal/types.js'; export type AutorunCommandExecutorOnlyOptions = ProjectExecutorOnlyOptions & CollectExecutorOnlyOptions & diff --git a/packages/nx-plugin/src/executors/cli/utils.integration.test.ts b/packages/nx-plugin/src/executors/cli/utils.integration.test.ts index d15f9961d..180f22af1 100644 --- a/packages/nx-plugin/src/executors/cli/utils.integration.test.ts +++ b/packages/nx-plugin/src/executors/cli/utils.integration.test.ts @@ -1,8 +1,8 @@ import { expect, vi } from 'vitest'; import type { UploadConfig } from '@code-pushup/models'; -import { normalizedExecutorContext } from '../../../mock/utils/executor'; -import * as config from '../internal/config'; -import { parseAutorunExecutorOptions } from './utils'; +import { normalizedExecutorContext } from '../../../mock/utils/executor.js'; +import * as config from '../internal/config.js'; +import { parseAutorunExecutorOptions } from './utils.js'; describe('parseAutorunExecutorOptions', () => { const persistConfigSpy = vi.spyOn(config, 'persistConfig'); diff --git a/packages/nx-plugin/src/executors/cli/utils.ts b/packages/nx-plugin/src/executors/cli/utils.ts index cc121c958..afcca4542 100644 --- a/packages/nx-plugin/src/executors/cli/utils.ts +++ b/packages/nx-plugin/src/executors/cli/utils.ts @@ -1,9 +1,13 @@ -import { globalConfig, persistConfig, uploadConfig } from '../internal/config'; -import type { NormalizedExecutorContext } from '../internal/context'; +import { + globalConfig, + persistConfig, + uploadConfig, +} from '../internal/config.js'; +import type { NormalizedExecutorContext } from '../internal/context.js'; import type { AutorunCommandExecutorOnlyOptions, AutorunCommandExecutorOptions, -} from './schema'; +} from './schema.js'; export function parseAutorunExecutorOnlyOptions( options: Partial, diff --git a/packages/nx-plugin/src/executors/cli/utils.unit.test.ts b/packages/nx-plugin/src/executors/cli/utils.unit.test.ts index d60c36204..7a4141eff 100644 --- a/packages/nx-plugin/src/executors/cli/utils.unit.test.ts +++ b/packages/nx-plugin/src/executors/cli/utils.unit.test.ts @@ -1,11 +1,11 @@ import { type MockInstance, expect, vi } from 'vitest'; import { osAgnosticPath } from '@code-pushup/test-utils'; -import type { Command } from '../internal/types'; +import type { Command } from '../internal/types.js'; import { mergeExecutorOptions, parseAutorunExecutorOnlyOptions, parseAutorunExecutorOptions, -} from './utils'; +} from './utils.js'; describe('parseAutorunExecutorOnlyOptions', () => { it('should provide NO default projectPrefix', () => { diff --git a/packages/nx-plugin/src/executors/internal/cli.unit.test.ts b/packages/nx-plugin/src/executors/internal/cli.unit.test.ts index ab39b876b..e65cb0ec0 100644 --- a/packages/nx-plugin/src/executors/internal/cli.unit.test.ts +++ b/packages/nx-plugin/src/executors/internal/cli.unit.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { createCliCommand, objectToCliArgs } from './cli'; +import { createCliCommand, objectToCliArgs } from './cli.js'; describe('objectToCliArgs', () => { it('should empty params', () => { diff --git a/packages/nx-plugin/src/executors/internal/config.integration.test.ts b/packages/nx-plugin/src/executors/internal/config.integration.test.ts index 4e7d91517..54b2e32dc 100644 --- a/packages/nx-plugin/src/executors/internal/config.integration.test.ts +++ b/packages/nx-plugin/src/executors/internal/config.integration.test.ts @@ -1,5 +1,5 @@ import { describe, expect } from 'vitest'; -import { ENV } from '../../../mock/fixtures/env'; +import { ENV } from '../../../mock/fixtures/env.js'; import { uploadConfig } from './config.js'; import * as env from './env.js'; diff --git a/packages/nx-plugin/src/executors/internal/config.ts b/packages/nx-plugin/src/executors/internal/config.ts index e083c3824..0eb13f8a8 100644 --- a/packages/nx-plugin/src/executors/internal/config.ts +++ b/packages/nx-plugin/src/executors/internal/config.ts @@ -1,11 +1,11 @@ import * as path from 'node:path'; import type { PersistConfig, UploadConfig } from '@code-pushup/models'; -import { parseEnv } from './env'; +import { parseEnv } from './env.js'; import type { BaseNormalizedExecutorContext, GlobalExecutorOptions, ProjectExecutorOnlyOptions, -} from './types'; +} from './types.js'; export function globalConfig( options: Partial>, diff --git a/packages/nx-plugin/src/executors/internal/context.ts b/packages/nx-plugin/src/executors/internal/context.ts index 33fd4ca14..38ca33416 100644 --- a/packages/nx-plugin/src/executors/internal/context.ts +++ b/packages/nx-plugin/src/executors/internal/context.ts @@ -1,5 +1,5 @@ import type { ExecutorContext } from 'nx/src/config/misc-interfaces'; -import type { BaseNormalizedExecutorContext } from './types'; +import type { BaseNormalizedExecutorContext } from './types.js'; export type NormalizedExecutorContext = BaseNormalizedExecutorContext & { projectName: string; diff --git a/packages/nx-plugin/src/executors/internal/context.unit.test.ts b/packages/nx-plugin/src/executors/internal/context.unit.test.ts index fbd43a733..9be17d2a9 100644 --- a/packages/nx-plugin/src/executors/internal/context.unit.test.ts +++ b/packages/nx-plugin/src/executors/internal/context.unit.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import { normalizeContext } from './context'; +import { normalizeContext } from './context.js'; describe('normalizeContext', () => { it('should normalizeContext', () => { diff --git a/packages/nx-plugin/src/executors/internal/env.unit.test.ts b/packages/nx-plugin/src/executors/internal/env.unit.test.ts index eca10b8c5..548ef1e3b 100644 --- a/packages/nx-plugin/src/executors/internal/env.unit.test.ts +++ b/packages/nx-plugin/src/executors/internal/env.unit.test.ts @@ -1,5 +1,5 @@ import { describe, expect } from 'vitest'; -import { parseEnv } from './env'; +import { parseEnv } from './env.js'; describe('parseEnv', () => { it('should parse empty env vars', () => { diff --git a/packages/nx-plugin/src/generators/configuration/code-pushup-config.integration.test.ts b/packages/nx-plugin/src/generators/configuration/code-pushup-config.integration.test.ts index b07bd4e18..38238ff50 100644 --- a/packages/nx-plugin/src/generators/configuration/code-pushup-config.integration.test.ts +++ b/packages/nx-plugin/src/generators/configuration/code-pushup-config.integration.test.ts @@ -3,7 +3,7 @@ import { formatFiles } from '@nx/devkit'; import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; import * as path from 'node:path'; import { describe, expect, it } from 'vitest'; -import { generateCodePushupConfig } from './code-pushup-config'; +import { generateCodePushupConfig } from './code-pushup-config.js'; describe('generateCodePushupConfig options', () => { let tree: devKit.Tree; diff --git a/packages/nx-plugin/src/generators/configuration/code-pushup-config.ts b/packages/nx-plugin/src/generators/configuration/code-pushup-config.ts index 671196971..6854797fb 100644 --- a/packages/nx-plugin/src/generators/configuration/code-pushup-config.ts +++ b/packages/nx-plugin/src/generators/configuration/code-pushup-config.ts @@ -2,13 +2,13 @@ import { type Tree, generateFiles, logger } from '@nx/devkit'; import * as path from 'node:path'; import type { PersistConfig, UploadConfig } from '@code-pushup/models'; import type { ItemOrArray } from '@code-pushup/utils'; -import type { ExecutableCode } from './types'; +import type { ExecutableCode } from './types.js'; import { formatArrayToLinesOfJsString, formatObjectToFormattedJsString, normalizeExecutableCode, normalizeItemOrArray, -} from './utils'; +} from './utils.js'; export const DEFAULT_IMPORTS = [ "import type { CoreConfig } from '@code-pushup/models';", diff --git a/packages/nx-plugin/src/generators/configuration/generator.integration.test.ts b/packages/nx-plugin/src/generators/configuration/generator.integration.test.ts index dc3ce206e..c98d60064 100644 --- a/packages/nx-plugin/src/generators/configuration/generator.integration.test.ts +++ b/packages/nx-plugin/src/generators/configuration/generator.integration.test.ts @@ -7,8 +7,8 @@ import { import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; import * as path from 'node:path'; import { afterEach, describe, expect, it, vi } from 'vitest'; -import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants'; -import { addTargetToProject, configurationGenerator } from './generator'; +import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants.js'; +import { addTargetToProject, configurationGenerator } from './generator.js'; describe('addTargetToProject', () => { let tree: Tree; diff --git a/packages/nx-plugin/src/generators/configuration/generator.ts b/packages/nx-plugin/src/generators/configuration/generator.ts index dc0d49913..4b71b60a2 100644 --- a/packages/nx-plugin/src/generators/configuration/generator.ts +++ b/packages/nx-plugin/src/generators/configuration/generator.ts @@ -6,9 +6,9 @@ import { updateProjectConfiguration, } from '@nx/devkit'; import type { ProjectConfiguration } from 'nx/src/config/workspace-json-project-json'; -import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants'; -import { generateCodePushupConfig } from './code-pushup-config'; -import type { ConfigurationGeneratorOptions } from './schema'; +import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants.js'; +import { generateCodePushupConfig } from './code-pushup-config.js'; +import type { ConfigurationGeneratorOptions } from './schema.js'; export async function configurationGenerator( tree: Tree, diff --git a/packages/nx-plugin/src/generators/configuration/schema.d.ts b/packages/nx-plugin/src/generators/configuration/schema.d.ts index d7b700308..b105270c6 100644 --- a/packages/nx-plugin/src/generators/configuration/schema.d.ts +++ b/packages/nx-plugin/src/generators/configuration/schema.d.ts @@ -1,4 +1,4 @@ -import type { DynamicTargetOptions } from '../../internal/types'; +import type { DynamicTargetOptions } from '../../internal/types.js'; export type ConfigurationGeneratorOptions = { project: string; diff --git a/packages/nx-plugin/src/generators/configuration/utils.ts b/packages/nx-plugin/src/generators/configuration/utils.ts index 5063a7aef..36464358a 100644 --- a/packages/nx-plugin/src/generators/configuration/utils.ts +++ b/packages/nx-plugin/src/generators/configuration/utils.ts @@ -1,5 +1,5 @@ import type { ExtractArrays } from '@code-pushup/utils'; -import type { ExecutableCode } from './types'; +import type { ExecutableCode } from './types.js'; export function normalizeExecutableCode( executableCode: ExecutableCode, diff --git a/packages/nx-plugin/src/generators/init/generator.integration.test.ts b/packages/nx-plugin/src/generators/init/generator.integration.test.ts index 05fe14511..5ab890bd1 100644 --- a/packages/nx-plugin/src/generators/init/generator.integration.test.ts +++ b/packages/nx-plugin/src/generators/init/generator.integration.test.ts @@ -1,7 +1,7 @@ import { type Tree, logger, readJson, readNxJson } from '@nx/devkit'; import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; import { describe, expect, it, vi } from 'vitest'; -import { initGenerator } from './generator'; +import { initGenerator } from './generator.js'; type PackageJson = { devDependencies: Record; diff --git a/packages/nx-plugin/src/generators/init/generator.ts b/packages/nx-plugin/src/generators/init/generator.ts index 12f058751..265298fb0 100644 --- a/packages/nx-plugin/src/generators/init/generator.ts +++ b/packages/nx-plugin/src/generators/init/generator.ts @@ -12,14 +12,14 @@ import { updateNxJson, } from '@nx/devkit'; import type { PackageJson } from 'nx/src/utils/package-json'; -import { PACKAGE_NAME } from '../../internal/constants'; +import { PACKAGE_NAME } from '../../internal/constants.js'; import { cpCliVersion, cpModelVersion, cpNxPluginVersion, cpUtilsVersion, -} from '../../internal/versions'; -import type { InitGeneratorSchema } from './schema'; +} from '../../internal/versions.js'; +import type { InitGeneratorSchema } from './schema.js'; function checkDependenciesInstalled(host: Tree) { const packageJson = readJson(host, 'package.json'); diff --git a/packages/nx-plugin/src/index.ts b/packages/nx-plugin/src/index.ts index d8f698bbb..e516b18ce 100644 --- a/packages/nx-plugin/src/index.ts +++ b/packages/nx-plugin/src/index.ts @@ -1,15 +1,18 @@ -import { createNodes } from './plugin/index'; +import { createNodes } from './plugin/index.js'; // default export for nx.json#plugins export default createNodes; -export * from './internal/versions'; -export { type InitGeneratorSchema } from './generators/init/schema'; -export { initGenerator, initSchematic } from './generators/init/generator'; -export type { ConfigurationGeneratorOptions } from './generators/configuration/schema'; -export { configurationGenerator } from './generators/configuration/generator'; -export { generateCodePushupConfig } from './generators/configuration/code-pushup-config'; -export { createNodes } from './plugin/index'; -export { executeProcess, type ProcessConfig } from './internal/execute-process'; -export { objectToCliArgs } from './executors/internal/cli'; export type { AutorunCommandExecutorOptions } from './executors/cli/schema.js'; +export { objectToCliArgs } from './executors/internal/cli.js'; +export { generateCodePushupConfig } from './generators/configuration/code-pushup-config.js'; +export { configurationGenerator } from './generators/configuration/generator.js'; +export type { ConfigurationGeneratorOptions } from './generators/configuration/schema.js'; +export { initGenerator, initSchematic } from './generators/init/generator.js'; +export { type InitGeneratorSchema } from './generators/init/schema.js'; +export { + executeProcess, + type ProcessConfig, +} from './internal/execute-process.js'; +export * from './internal/versions.js'; +export { createNodes } from './plugin/index.js'; diff --git a/packages/nx-plugin/src/internal/execute-process.unit.test.ts b/packages/nx-plugin/src/internal/execute-process.unit.test.ts index 58555a7ee..5893b867f 100644 --- a/packages/nx-plugin/src/internal/execute-process.unit.test.ts +++ b/packages/nx-plugin/src/internal/execute-process.unit.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from 'vitest'; import { getAsyncProcessRunnerConfig } from '@code-pushup/test-utils'; -import { type ProcessObserver, executeProcess } from './execute-process'; +import { type ProcessObserver, executeProcess } from './execute-process.js'; describe('executeProcess', () => { const spyObserver: ProcessObserver = { diff --git a/packages/nx-plugin/src/plugin/index.ts b/packages/nx-plugin/src/plugin/index.ts index 186bb0d5c..648d0b4aa 100644 --- a/packages/nx-plugin/src/plugin/index.ts +++ b/packages/nx-plugin/src/plugin/index.ts @@ -1,2 +1,2 @@ -export { createNodes } from './plugin'; -export type { CreateNodesOptions } from './types'; +export { createNodes } from './plugin.js'; +export type { CreateNodesOptions } from './types.js'; diff --git a/packages/nx-plugin/src/plugin/plugin.ts b/packages/nx-plugin/src/plugin/plugin.ts index b80ede311..1f125f5a8 100644 --- a/packages/nx-plugin/src/plugin/plugin.ts +++ b/packages/nx-plugin/src/plugin/plugin.ts @@ -3,10 +3,10 @@ import type { CreateNodesContext, CreateNodesResult, } from '@nx/devkit'; -import { PROJECT_JSON_FILE_NAME } from '../internal/constants'; -import { createTargets } from './target/targets'; -import type { CreateNodesOptions } from './types'; -import { normalizedCreateNodesContext } from './utils'; +import { PROJECT_JSON_FILE_NAME } from '../internal/constants.js'; +import { createTargets } from './target/targets.js'; +import type { CreateNodesOptions } from './types.js'; +import { normalizedCreateNodesContext } from './utils.js'; // name has to be "createNodes" to get picked up by Nx { let context: CreateNodesContext; diff --git a/packages/nx-plugin/src/plugin/target/configuration-target.ts b/packages/nx-plugin/src/plugin/target/configuration-target.ts index f9b16c985..d19b9325b 100644 --- a/packages/nx-plugin/src/plugin/target/configuration-target.ts +++ b/packages/nx-plugin/src/plugin/target/configuration-target.ts @@ -1,8 +1,8 @@ import type { TargetConfiguration } from '@nx/devkit'; import type { RunCommandsOptions } from 'nx/src/executors/run-commands/run-commands.impl'; -import { objectToCliArgs } from '../../executors/internal/cli'; -import { PACKAGE_NAME } from '../../internal/constants'; -import { CP_TARGET_NAME } from '../constants'; +import { objectToCliArgs } from '../../executors/internal/cli.js'; +import { PACKAGE_NAME } from '../../internal/constants.js'; +import { CP_TARGET_NAME } from '../constants.js'; export function createConfigurationTarget(options?: { targetName?: string; diff --git a/packages/nx-plugin/src/plugin/target/configuration.target.unit.test.ts b/packages/nx-plugin/src/plugin/target/configuration.target.unit.test.ts index 95bf05a6d..87f4418c9 100644 --- a/packages/nx-plugin/src/plugin/target/configuration.target.unit.test.ts +++ b/packages/nx-plugin/src/plugin/target/configuration.target.unit.test.ts @@ -1,6 +1,6 @@ import { expect } from 'vitest'; -import { PACKAGE_NAME } from '../../internal/constants'; -import { createConfigurationTarget } from './configuration-target'; +import { PACKAGE_NAME } from '../../internal/constants.js'; +import { createConfigurationTarget } from './configuration-target.js'; describe('createConfigurationTarget', () => { it('should return code-pushup--configuration target for given project', () => { diff --git a/packages/nx-plugin/src/plugin/target/executor-target.ts b/packages/nx-plugin/src/plugin/target/executor-target.ts index aeba82ad8..e8b52eb8f 100644 --- a/packages/nx-plugin/src/plugin/target/executor-target.ts +++ b/packages/nx-plugin/src/plugin/target/executor-target.ts @@ -1,6 +1,6 @@ import type { TargetConfiguration } from '@nx/devkit'; -import { PACKAGE_NAME } from '../../internal/constants'; -import type { ProjectPrefixOptions } from '../types'; +import { PACKAGE_NAME } from '../../internal/constants.js'; +import type { ProjectPrefixOptions } from '../types.js'; export function createExecutorTarget(options?: { bin?: string; diff --git a/packages/nx-plugin/src/plugin/target/executor.target.unit.test.ts b/packages/nx-plugin/src/plugin/target/executor.target.unit.test.ts index 8ea0799a7..610b44bd7 100644 --- a/packages/nx-plugin/src/plugin/target/executor.target.unit.test.ts +++ b/packages/nx-plugin/src/plugin/target/executor.target.unit.test.ts @@ -1,5 +1,5 @@ import { expect } from 'vitest'; -import { createExecutorTarget } from './executor-target'; +import { createExecutorTarget } from './executor-target.js'; describe('createExecutorTarget', () => { it('should return executor target without project name', () => { diff --git a/packages/nx-plugin/src/plugin/target/targets.ts b/packages/nx-plugin/src/plugin/target/targets.ts index 188252a8d..55e608896 100644 --- a/packages/nx-plugin/src/plugin/target/targets.ts +++ b/packages/nx-plugin/src/plugin/target/targets.ts @@ -1,12 +1,12 @@ import { readdir } from 'node:fs/promises'; -import { CP_TARGET_NAME } from '../constants'; +import { CP_TARGET_NAME } from '../constants.js'; import type { CreateNodesOptions, ProjectConfigurationWithName, -} from '../types'; -import { createConfigurationTarget } from './configuration-target'; -import { CODE_PUSHUP_CONFIG_REGEX } from './constants'; -import { createExecutorTarget } from './executor-target'; +} from '../types.js'; +import { createConfigurationTarget } from './configuration-target.js'; +import { CODE_PUSHUP_CONFIG_REGEX } from './constants.js'; +import { createExecutorTarget } from './executor-target.js'; export type CreateTargetsOptions = { projectJson: ProjectConfigurationWithName; diff --git a/packages/nx-plugin/src/plugin/target/targets.unit.test.ts b/packages/nx-plugin/src/plugin/target/targets.unit.test.ts index 0de7288d2..9b730f726 100644 --- a/packages/nx-plugin/src/plugin/target/targets.unit.test.ts +++ b/packages/nx-plugin/src/plugin/target/targets.unit.test.ts @@ -2,10 +2,10 @@ import { vol } from 'memfs'; import { rm } from 'node:fs/promises'; import { afterEach, beforeEach, expect } from 'vitest'; import { MEMFS_VOLUME } from '@code-pushup/test-utils'; -import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants'; -import { CP_TARGET_NAME } from '../constants'; -import type { NormalizedCreateNodesContext } from '../types'; -import { createTargets } from './targets'; +import { DEFAULT_TARGET_NAME, PACKAGE_NAME } from '../../internal/constants.js'; +import { CP_TARGET_NAME } from '../constants.js'; +import type { NormalizedCreateNodesContext } from '../types.js'; +import { createTargets } from './targets.js'; describe('createTargets', () => { beforeEach(async () => { diff --git a/packages/nx-plugin/src/plugin/types.ts b/packages/nx-plugin/src/plugin/types.ts index 4a1394972..4fd57ed95 100644 --- a/packages/nx-plugin/src/plugin/types.ts +++ b/packages/nx-plugin/src/plugin/types.ts @@ -4,8 +4,8 @@ import type { ProjectConfiguration, } from '@nx/devkit'; import type { WithRequired } from '@code-pushup/utils'; -import type { DynamicTargetOptions } from '../internal/types'; -import type { CreateTargetsOptions } from './target/targets'; +import type { DynamicTargetOptions } from '../internal/types.js'; +import type { CreateTargetsOptions } from './target/targets.js'; export type ProjectPrefixOptions = { projectPrefix?: string; diff --git a/packages/nx-plugin/src/plugin/utils.ts b/packages/nx-plugin/src/plugin/utils.ts index b8b7cc4be..8d551f682 100644 --- a/packages/nx-plugin/src/plugin/utils.ts +++ b/packages/nx-plugin/src/plugin/utils.ts @@ -1,13 +1,13 @@ import type { CreateNodesContext, CreateNodesContextV2 } from '@nx/devkit'; import { readFile } from 'node:fs/promises'; import * as path from 'node:path'; -import { CP_TARGET_NAME } from './constants'; +import { CP_TARGET_NAME } from './constants.js'; import type { CreateNodesOptions, NormalizedCreateNodesContext, NormalizedCreateNodesV2Context, ProjectConfigurationWithName, -} from './types'; +} from './types.js'; export async function normalizedCreateNodesContext( context: CreateNodesContext, diff --git a/packages/nx-plugin/src/plugin/utils.unit.test.ts b/packages/nx-plugin/src/plugin/utils.unit.test.ts index f88811467..edf2bf1cb 100644 --- a/packages/nx-plugin/src/plugin/utils.unit.test.ts +++ b/packages/nx-plugin/src/plugin/utils.unit.test.ts @@ -2,7 +2,7 @@ import { vol } from 'memfs'; import { describe, expect } from 'vitest'; import { createNodesContext } from '@code-pushup/test-nx-utils'; import { MEMFS_VOLUME } from '@code-pushup/test-utils'; -import { normalizedCreateNodesContext } from './utils'; +import { normalizedCreateNodesContext } from './utils.js'; describe('normalizedCreateNodesContext', () => { it('should provide workspaceRoot', async () => {