@@ -10,7 +10,7 @@ import { glob } from "tinyglobby";
10
10
import { resolve } from "pathe" ;
11
11
import c from "tinyrainbow" ;
12
12
import { coverageConfigDefaults } from "vitest/config" ;
13
- import "@hyperjump/json-schema/draft-2020-12" ;
13
+ import { registerSchema } from "@hyperjump/json-schema/draft-2020-12" ;
14
14
import "@hyperjump/json-schema/draft-2019-09" ;
15
15
import "@hyperjump/json-schema/draft-07" ;
16
16
import "@hyperjump/json-schema/draft-06" ;
@@ -28,6 +28,7 @@ import { fromJson } from "../json-util.js";
28
28
* Vitest
29
29
* } from "vitest"
30
30
* @import { CoverageMap, CoverageMapData } from "istanbul-lib-coverage"
31
+ * @import { SchemaObject } from "@hyperjump/json-schema"
31
32
*/
32
33
33
34
/** @type CoverageProviderModule */
@@ -122,14 +123,28 @@ class JsonSchemaCoverageProvider {
122
123
. add ( gitignore )
123
124
. filter ( includedFiles ) ;
124
125
126
+ // Register all schemas
125
127
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 ) ;
127
142
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 ) ;
131
143
const fileHash = createHash ( "md5" ) . update ( compiledSchema . schemaUri ) . digest ( "hex" ) ;
132
144
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 ) ;
133
148
await fs . writeFile ( coverageFilePath , JSON . stringify ( coverageMap ) ) ;
134
149
}
135
150
}
@@ -147,7 +162,7 @@ class JsonSchemaCoverageProvider {
147
162
148
163
/** @type CoverageProvider["reportCoverage"] */
149
164
async reportCoverage ( coverageMap ) {
150
- this . generateReports ( /** @type CoverageMap */ ( coverageMap ) ?? this . createCoverageMap ( ) ) ;
165
+ this . generateReports ( /** @type CoverageMap */ ( coverageMap ) ?? coverage . createCoverageMap ( ) ) ;
151
166
152
167
// In watch mode we need to preserve the previous results if cleanOnRerun is disabled
153
168
const keepResults = ! this . options . cleanOnRerun && this . ctx . config . watch ;
@@ -189,11 +204,6 @@ class JsonSchemaCoverageProvider {
189
204
} ) ;
190
205
}
191
206
192
- /** @type () => CoverageMap */
193
- createCoverageMap ( ) {
194
- return coverage . createCoverageMap ( { } ) ;
195
- }
196
-
197
207
/** @type CoverageProvider["onAfterSuiteRun"] */
198
208
onAfterSuiteRun ( ) {
199
209
// The method is required by the interface, but doesn't seem to ever be called
@@ -202,7 +212,7 @@ class JsonSchemaCoverageProvider {
202
212
203
213
/** @type CoverageProvider["generateCoverage"] */
204
214
async generateCoverage ( ) {
205
- const coverageMap = this . createCoverageMap ( ) ;
215
+ const coverageMap = coverage . createCoverageMap ( ) ;
206
216
207
217
for ( const file of await fs . readdir ( this . coverageFilesDirectory , { recursive : true , withFileTypes : true } ) ) {
208
218
const path = resolve ( file . parentPath , file . name ) ;
0 commit comments