9
9
type ExtractSchemaWorkerData ,
10
10
type ExtractSchemaWorkerResult ,
11
11
} from '../../threads/extractSchema'
12
+ import { SchemaExtractedTrace } from './extractSchema.telemetry'
12
13
13
14
interface ExtractFlags {
14
15
workspace ?: string
@@ -21,10 +22,11 @@ export type SchemaValidationFormatter = (result: ExtractSchemaWorkerResult) => s
21
22
22
23
export default async function extractAction (
23
24
args : CliCommandArguments < ExtractFlags > ,
24
- { workDir, output} : CliCommandContext ,
25
+ { workDir, output, telemetry } : CliCommandContext ,
25
26
) : Promise < void > {
26
27
const flags = args . extOptions
27
- const formatFlat = flags . format || 'groq-type-nodes'
28
+ const formatFlag = flags . format || 'groq-type-nodes'
29
+ const enforceRequiredFields = flags [ 'enforce-required-fields' ] || false
28
30
29
31
const rootPkgPath = readPkgUp . sync ( { cwd : __dirname } ) ?. path
30
32
if ( ! rootPkgPath ) {
@@ -43,32 +45,51 @@ export default async function extractAction(
43
45
const spinner = output
44
46
. spinner ( { } )
45
47
. start (
46
- flags [ 'enforce-required-fields' ]
48
+ enforceRequiredFields
47
49
? 'Extracting schema, with enforced required fields'
48
50
: 'Extracting schema' ,
49
51
)
50
52
53
+ const trace = telemetry . trace ( SchemaExtractedTrace )
54
+ trace . start ( )
55
+
51
56
const worker = new Worker ( workerPath , {
52
57
workerData : {
53
58
workDir,
54
59
workspaceName : flags . workspace ,
55
- enforceRequiredFields : flags [ 'enforce-required-fields' ] ,
56
- format : formatFlat ,
60
+ enforceRequiredFields,
61
+ format : formatFlag ,
57
62
} satisfies ExtractSchemaWorkerData ,
58
63
// eslint-disable-next-line no-process-env
59
64
env : process . env ,
60
65
} )
61
66
62
- const { schema} = await new Promise < ExtractSchemaWorkerResult > ( ( resolve , reject ) => {
63
- worker . addListener ( 'message' , resolve )
64
- worker . addListener ( 'error' , reject )
65
- } )
67
+ try {
68
+ const { schema} = await new Promise < ExtractSchemaWorkerResult > ( ( resolve , reject ) => {
69
+ worker . addListener ( 'message' , resolve )
70
+ worker . addListener ( 'error' , reject )
71
+ } )
72
+
73
+ trace . log ( {
74
+ schemaAllTypesCount : schema . length ,
75
+ schemaDocumentTypesCount : schema . filter ( ( type ) => type . type === 'document' ) . length ,
76
+ schemaTypesCount : schema . filter ( ( type ) => type . type === 'type' ) . length ,
77
+ enforceRequiredFields,
78
+ schemaFormat : formatFlag ,
79
+ } )
66
80
67
- const path = flags . path || join ( process . cwd ( ) , 'schema.json' )
81
+ const path = flags . path || join ( process . cwd ( ) , 'schema.json' )
68
82
69
- spinner . text = `Writing schema to ${ path } `
83
+ spinner . text = `Writing schema to ${ path } `
70
84
71
- await writeFile ( path , JSON . stringify ( schema , null , 2 ) )
85
+ await writeFile ( path , JSON . stringify ( schema , null , 2 ) )
72
86
73
- spinner . succeed ( 'Extracted schema' )
87
+ trace . complete ( )
88
+
89
+ spinner . succeed ( 'Extracted schema' )
90
+ } catch ( err ) {
91
+ trace . error ( err )
92
+ spinner . fail ( 'Failed to extract schema' )
93
+ throw err
94
+ }
74
95
}
0 commit comments