File tree 3 files changed +40
-3
lines changed
packages/angular_devkit/core/src/json/schema
3 files changed +40
-3
lines changed Original file line number Diff line number Diff line change @@ -209,9 +209,6 @@ export class CoreSchemaRegistry implements SchemaRegistry {
209
209
}
210
210
}
211
211
212
- if ( fullReference . startsWith ( '#' ) ) {
213
- fullReference = fullReference . slice ( 0 , - 1 ) ;
214
- }
215
212
const resolvedSchema = this . _ajv . getSchema ( fullReference ) ;
216
213
217
214
return {
Original file line number Diff line number Diff line change @@ -20,6 +20,8 @@ export function addUndefinedDefaults(
20
20
return value ;
21
21
}
22
22
23
+ value ??= schema . default ;
24
+
23
25
const types = getTypesOfSchema ( schema ) ;
24
26
if ( types . size === 0 ) {
25
27
return value ;
Original file line number Diff line number Diff line change @@ -218,4 +218,42 @@ describe('addUndefinedDefaults', () => {
218
218
expect ( dataObj . obj . b ) . toBeTrue ( ) ;
219
219
expect ( dataObj . obj . c ) . toBeFalse ( ) ;
220
220
} ) ;
221
+
222
+ it ( 'should add defaults to undefined properties when using $refs' , async ( ) => {
223
+ const registry = new CoreSchemaRegistry ( ) ;
224
+ registry . addPreTransform ( addUndefinedDefaults ) ;
225
+ const dataNoObj : Record < string , boolean > = { } ;
226
+
227
+ const dataObj : Record < string , boolean > = {
228
+ boolRef : true ,
229
+ } ;
230
+
231
+ const validator = registry . compile ( {
232
+ definitions : {
233
+ boolRef : {
234
+ default : false ,
235
+ type : 'boolean' ,
236
+ } ,
237
+ } ,
238
+ properties : {
239
+ bool : {
240
+ default : false ,
241
+ type : 'boolean' ,
242
+ } ,
243
+ boolRef : {
244
+ $ref : '#/definitions/boolRef' ,
245
+ } ,
246
+ } ,
247
+ } ) ;
248
+
249
+ const result1 = await validator . pipe ( mergeMap ( ( validator ) => validator ( dataNoObj ) ) ) . toPromise ( ) ;
250
+ expect ( result1 . success ) . toBeTrue ( ) ;
251
+ expect ( dataNoObj [ 'bool' ] ) . toBeFalse ( ) ;
252
+ expect ( dataNoObj [ 'boolRef' ] ) . toBeFalse ( ) ;
253
+
254
+ const result2 = await validator . pipe ( mergeMap ( ( validator ) => validator ( dataObj ) ) ) . toPromise ( ) ;
255
+ expect ( result2 . success ) . toBeTrue ( ) ;
256
+ expect ( dataObj [ 'bool' ] ) . toBeFalse ( ) ;
257
+ expect ( dataObj [ 'boolRef' ] ) . toBeTrue ( ) ;
258
+ } ) ;
221
259
} ) ;
You can’t perform that action at this time.
0 commit comments