@@ -10,7 +10,7 @@ import { glob } from "tinyglobby";
1010import { resolve } from "pathe" ;
1111import c from "tinyrainbow" ;
1212import { coverageConfigDefaults } from "vitest/config" ;
13- import "@hyperjump/json-schema/draft-2020-12" ;
13+ import { registerSchema } from "@hyperjump/json-schema/draft-2020-12" ;
1414import "@hyperjump/json-schema/draft-2019-09" ;
1515import "@hyperjump/json-schema/draft-07" ;
1616import "@hyperjump/json-schema/draft-06" ;
@@ -28,6 +28,7 @@ import { fromJson } from "../json-util.js";
2828 * Vitest
2929 * } from "vitest"
3030 * @import { CoverageMap, CoverageMapData } from "istanbul-lib-coverage"
31+ * @import { SchemaObject } from "@hyperjump/json-schema"
3132 */
3233
3334/** @type CoverageProviderModule */
@@ -122,14 +123,28 @@ class JsonSchemaCoverageProvider {
122123 . add ( gitignore )
123124 . filter ( includedFiles ) ;
124125
126+ // Register all schemas
125127 for ( const file of files ) {
126- const schema = await getSchema ( file ) ;
128+ try {
129+ const schemaPath = path . resolve ( root , file ) ;
130+ const json = await fs . readFile ( schemaPath , "utf-8" ) ;
131+ /** @type SchemaObject */
132+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
133+ const schema = JSON . parse ( json ) ;
134+ registerSchema ( schema ) ;
135+ } catch ( _error ) {
136+ }
137+ }
138+
139+ for ( const file of files ) {
140+ const schemaPath = path . resolve ( root , file ) ;
141+ const schema = await getSchema ( schemaPath ) ;
127142 const compiledSchema = await compile ( schema ) ;
128- const json = await fs . readFile ( file , "utf-8" ) ;
129- const tree = fromJson ( json ) ;
130- const coverageMap = astToCoverageMap ( compiledSchema , path . resolve ( root , file ) , tree ) ;
131143 const fileHash = createHash ( "md5" ) . update ( compiledSchema . schemaUri ) . digest ( "hex" ) ;
132144 const coverageFilePath = path . resolve ( this . coverageFilesDirectory , fileHash ) ;
145+ const json = await fs . readFile ( schemaPath , "utf-8" ) ;
146+ const tree = fromJson ( json ) ;
147+ const coverageMap = astToCoverageMap ( compiledSchema , path . resolve ( root , file ) , tree ) ;
133148 await fs . writeFile ( coverageFilePath , JSON . stringify ( coverageMap ) ) ;
134149 }
135150 }
@@ -147,7 +162,7 @@ class JsonSchemaCoverageProvider {
147162
148163 /** @type CoverageProvider["reportCoverage"] */
149164 async reportCoverage ( coverageMap ) {
150- this . generateReports ( /** @type CoverageMap */ ( coverageMap ) ?? this . createCoverageMap ( ) ) ;
165+ this . generateReports ( /** @type CoverageMap */ ( coverageMap ) ?? coverage . createCoverageMap ( ) ) ;
151166
152167 // In watch mode we need to preserve the previous results if cleanOnRerun is disabled
153168 const keepResults = ! this . options . cleanOnRerun && this . ctx . config . watch ;
@@ -189,11 +204,6 @@ class JsonSchemaCoverageProvider {
189204 } ) ;
190205 }
191206
192- /** @type () => CoverageMap */
193- createCoverageMap ( ) {
194- return coverage . createCoverageMap ( { } ) ;
195- }
196-
197207 /** @type CoverageProvider["onAfterSuiteRun"] */
198208 onAfterSuiteRun ( ) {
199209 // The method is required by the interface, but doesn't seem to ever be called
@@ -202,7 +212,7 @@ class JsonSchemaCoverageProvider {
202212
203213 /** @type CoverageProvider["generateCoverage"] */
204214 async generateCoverage ( ) {
205- const coverageMap = this . createCoverageMap ( ) ;
215+ const coverageMap = coverage . createCoverageMap ( ) ;
206216
207217 for ( const file of await fs . readdir ( this . coverageFilesDirectory , { recursive : true , withFileTypes : true } ) ) {
208218 const path = resolve ( file . parentPath , file . name ) ;
0 commit comments