11/* eslint-disable @nx/enforce-module-boundaries */
2+ import 'dotenv/config' ;
3+ import { z } from 'zod' ;
24import type {
35 CategoryConfig ,
46 CoreConfig ,
@@ -29,6 +31,46 @@ import typescriptPlugin, {
2931 getCategories ,
3032} from './packages/plugin-typescript/src/index.js' ;
3133
34+ /**
35+ * Helper function to load and validate Code PushUp environment variables for upload configuration
36+ */
37+ export async function loadEnv ( ) {
38+ const envSchema = z . object ( {
39+ CP_SERVER : z . string ( ) . url ( ) ,
40+ CP_API_KEY : z . string ( ) . min ( 1 ) ,
41+ CP_ORGANIZATION : z . string ( ) . min ( 1 ) ,
42+ CP_PROJECT : z . string ( ) . min ( 1 ) ,
43+ } ) ;
44+
45+ const { data : env , success } = await envSchema . safeParseAsync ( process . env ) ;
46+
47+ if ( ! success || ! env ) {
48+ return { } ;
49+ }
50+ const uploadConfig = {
51+ server : env . CP_SERVER ,
52+ apiKey : env . CP_API_KEY ,
53+ organization : env . CP_ORGANIZATION ,
54+ project : env . CP_PROJECT ,
55+ } ;
56+ return (
57+ uploadConfig . apiKey && {
58+ upload : uploadConfig ,
59+ }
60+ ) ;
61+ }
62+
63+ /**
64+ * Common exclusion patterns for JSDoc coverage
65+ */
66+ export const jsDocsExclusionPatterns = [
67+ '!packages/**/node_modules' ,
68+ '!packages/**/{mocks,mock}' ,
69+ '!**/*.{spec,test}.ts' ,
70+ '!**/implementation/**' ,
71+ '!**/internal/**' ,
72+ ] ;
73+
3274export const jsPackagesCategories : CategoryConfig [ ] = [
3375 {
3476 slug : 'security' ,
@@ -131,8 +173,12 @@ export const coverageCategories: CategoryConfig[] = [
131173 } ,
132174] ;
133175
134- export const jsPackagesCoreConfig = async ( ) : Promise < CoreConfig > => ( {
135- plugins : [ await jsPackagesPlugin ( ) ] ,
176+ export const jsPackagesCoreConfig = async (
177+ packageJsonPath ?: string ,
178+ ) : Promise < CoreConfig > => ( {
179+ plugins : [
180+ await jsPackagesPlugin ( packageJsonPath ? { packageJsonPath } : undefined ) ,
181+ ] ,
136182 categories : jsPackagesCategories ,
137183} ) ;
138184
@@ -177,12 +223,12 @@ export const typescriptPluginConfig = async (
177223 categories : getCategories ( ) ,
178224} ) ;
179225
226+ /**
227+ * Generates coverage configuration for Nx projects. Supports both single projects and all projects.
228+ */
180229export const coverageCoreConfigNx = async (
181230 projectName ?: string ,
182231) : Promise < CoreConfig > => {
183- if ( projectName ) {
184- throw new Error ( 'coverageCoreConfigNx for single projects not implemented' ) ;
185- }
186232 const targetNames = [ 'unit-test' , 'int-test' ] ;
187233 const targetArgs = [
188234 '-t' ,
@@ -195,13 +241,14 @@ export const coverageCoreConfigNx = async (
195241 await coveragePlugin ( {
196242 coverageToolCommand : {
197243 command : 'npx' ,
198- args : [
199- 'nx' ,
200- projectName ? `run --project ${ projectName } ` : 'run-many' ,
201- ...targetArgs ,
202- ] ,
244+ args : projectName
245+ ? [ 'nx' , 'run-many' , '-p' , projectName , ...targetArgs ]
246+ : [ 'nx' , 'run-many' , ...targetArgs ] ,
203247 } ,
204- reports : await getNxCoveragePaths ( targetNames ) ,
248+ reports : await getNxCoveragePaths (
249+ targetNames ,
250+ projectName ? [ projectName ] : undefined ,
251+ ) ,
205252 } ) ,
206253 ] ,
207254 categories : coverageCategories ,
0 commit comments