File tree Expand file tree Collapse file tree 3 files changed +40
-3
lines changed
packages/angular_devkit/core/src/json/schema Expand file tree Collapse file tree 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 {
209209 }
210210 }
211211
212- if ( fullReference . startsWith ( '#' ) ) {
213- fullReference = fullReference . slice ( 0 , - 1 ) ;
214- }
215212 const resolvedSchema = this . _ajv . getSchema ( fullReference ) ;
216213
217214 return {
Original file line number Diff line number Diff line change @@ -20,6 +20,8 @@ export function addUndefinedDefaults(
2020 return value ;
2121 }
2222
23+ value ??= schema . default ;
24+
2325 const types = getTypesOfSchema ( schema ) ;
2426 if ( types . size === 0 ) {
2527 return value ;
Original file line number Diff line number Diff line change @@ -218,4 +218,42 @@ describe('addUndefinedDefaults', () => {
218218 expect ( dataObj . obj . b ) . toBeTrue ( ) ;
219219 expect ( dataObj . obj . c ) . toBeFalse ( ) ;
220220 } ) ;
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+ } ) ;
221259} ) ;
You can’t perform that action at this time.
0 commit comments