@@ -437,5 +437,75 @@ describe(`utils`, () => {
437437 expect ( result ) . toBe ( modifiedDescriptor ) ;
438438 expect ( result . range ) . toBe ( `npm:^18.0.0-modified` ) ;
439439 } ) ;
440+
441+ it ( `should preserve patch: protocol when resolving catalog reference` , ( ) => {
442+ const catalog = new Map ( ) ;
443+ catalog . set ( `typescript` , `patch:typescript@npm%3A^5.9.3#optional!builtin<compat/typescript>` ) ;
444+ configuration . values . set ( `catalog` , catalog ) ;
445+
446+ const dependency = structUtils . makeDescriptor (
447+ structUtils . makeIdent ( null , `typescript` ) ,
448+ `catalog:` ,
449+ ) ;
450+
451+ // Mock the resolver to return the patch descriptor
452+ const patchRange = `patch:typescript@npm%3A^5.9.3#optional!builtin<compat/typescript>` ;
453+ const patchDescriptor = structUtils . makeDescriptor (
454+ structUtils . makeIdent ( null , `typescript` ) ,
455+ patchRange ,
456+ ) ;
457+ mockResolver . bindDescriptor . mockReturnValue ( patchDescriptor ) ;
458+
459+ const result = resolveDescriptorFromCatalog ( project , dependency , mockResolver , resolveOptions ) ;
460+
461+ expect ( result . range ) . toBe ( patchRange ) ;
462+ expect ( result . range ) . toMatch ( / ^ p a t c h : / ) ;
463+ } ) ;
464+
465+ it ( `should preserve portal: protocol when resolving catalog reference` , ( ) => {
466+ const catalog = new Map ( ) ;
467+ catalog . set ( `my-package` , `portal:../local-package` ) ;
468+ configuration . values . set ( `catalog` , catalog ) ;
469+
470+ const dependency = structUtils . makeDescriptor (
471+ structUtils . makeIdent ( null , `my-package` ) ,
472+ `catalog:` ,
473+ ) ;
474+
475+ const portalRange = `portal:../local-package` ;
476+ const portalDescriptor = structUtils . makeDescriptor (
477+ structUtils . makeIdent ( null , `my-package` ) ,
478+ portalRange ,
479+ ) ;
480+ mockResolver . bindDescriptor . mockReturnValue ( portalDescriptor ) ;
481+
482+ const result = resolveDescriptorFromCatalog ( project , dependency , mockResolver , resolveOptions ) ;
483+
484+ expect ( result . range ) . toBe ( portalRange ) ;
485+ expect ( result . range ) . toMatch ( / ^ p o r t a l : / ) ;
486+ } ) ;
487+
488+ it ( `should preserve link: protocol when resolving catalog reference` , ( ) => {
489+ const catalog = new Map ( ) ;
490+ catalog . set ( `my-package` , `link:../linked-package` ) ;
491+ configuration . values . set ( `catalog` , catalog ) ;
492+
493+ const dependency = structUtils . makeDescriptor (
494+ structUtils . makeIdent ( null , `my-package` ) ,
495+ `catalog:` ,
496+ ) ;
497+
498+ const linkRange = `link:../linked-package` ;
499+ const linkDescriptor = structUtils . makeDescriptor (
500+ structUtils . makeIdent ( null , `my-package` ) ,
501+ linkRange ,
502+ ) ;
503+ mockResolver . bindDescriptor . mockReturnValue ( linkDescriptor ) ;
504+
505+ const result = resolveDescriptorFromCatalog ( project , dependency , mockResolver , resolveOptions ) ;
506+
507+ expect ( result . range ) . toBe ( linkRange ) ;
508+ expect ( result . range ) . toMatch ( / ^ l i n k : / ) ;
509+ } ) ;
440510 } ) ;
441511} ) ;
0 commit comments