@@ -463,3 +463,238 @@ async def test_pnpm_module_provider_missing_integrity(
463463 dict (s ) for s in gen ._sources if dict (s ).get ('url' ) == source .resolved
464464 )
465465 assert tarball_source ['sha256' ] == expected_integrity .digest
466+
467+
468+ TEST_LOCKFILE_V9_MULTI_DOCUMENTS_V12 = """
469+ ---
470+ lockfileVersion: '9.0'
471+
472+ importers:
473+
474+ .:
475+ configDependencies: {}
476+ packageManagerDependencies:
477+ pnpm:
478+ specifier: 12.6.0
479+ version: 12.6.0
480+
481+ packages:
482+
483+ '@pnpm/exe.android-arm64@12.6.0':
484+ resolution: {integrity: sha512-kviIHft9h02q+7N2In7tSL9T/HRUSGwYmU74YPtsWU5ee7vgqPyC0JT6RRX6miW+NxX1CvHgQxg69qq1qTLJYQ==}
485+ cpu: [arm64]
486+ os: [android]
487+
488+ '@pnpm/exe.android-x64@12.6.0':
489+ resolution: {integrity: sha512-CT8aJKLq2mtZFE71pr4E5Z2xHL8uGnRGr+NclDqsXlVF4SVcQ2QAs14mWi0C8gjT4hbmi+Q0lJRRIkMAWfjjng==}
490+ cpu: [x64]
491+ os: [android]
492+
493+ '@pnpm/exe.darwin-arm64@12.6.0':
494+ resolution: {integrity: sha512-rafpVkjzugKBMxSvGQd5wK1x5eOTkD/+lcJIFHeQhvd+BJ8kDisOOvwhQDrpGd4vd2Fx+hhW0P2Ptt638OlhFg==}
495+ cpu: [arm64]
496+ os: [darwin]
497+
498+ '@pnpm/exe.darwin-x64@12.6.0':
499+ resolution: {integrity: sha512-72Jpuv1m24gI8zUNcaylYpBWEhBzz1VPhnDIU2GYM2eRP+KsOqVLwV78i+JrihI39zY2NNXmaN4eAKX1inpaDQ==}
500+ cpu: [x64]
501+ os: [darwin]
502+
503+ '@pnpm/exe.freebsd-x64@12.6.0':
504+ resolution: {integrity: sha512-LON4QgNy1w/XF4uySZIyC/5hEB0oGdelXsY9tSKqstER+2j2X2oHz67skD11RRd/HWFRtMr64shQZ4I9ZoZ0zg==}
505+ cpu: [x64]
506+ os: [freebsd]
507+
508+ '@pnpm/exe.linux-arm64-musl@12.6.0':
509+ resolution: {integrity: sha512-BdDpX+DeaMUc5x6WNcE6FkmFy36NwrBbBvwsZU737Zt3u1fTY+iKFPchjEQNCM4rT6q6xvF2oN3ZwExGsJCkxQ==}
510+ cpu: [arm64]
511+ os: [linux]
512+ libc: [musl]
513+
514+ '@pnpm/exe.linux-arm64@12.6.0':
515+ resolution: {integrity: sha512-8h2sNoIhHDpHDYqZZCh9PXr6krqW10btb0GHVGuw710muDHlFAHMtUG2ogmaHge6zJG1xgY4Y7mwX5g/LWvrYg==}
516+ cpu: [arm64]
517+ os: [linux]
518+ libc: [glibc]
519+
520+ '@pnpm/exe.linux-ppc64@12.6.0':
521+ resolution: {integrity: sha512-ld6xgcEhFCFrsVsJhbmdmR714PnsEspO/Ij8w0/D7OSiz2hYGu3fZd5tKRxOI5m6H6Gl0/RRFAPncTHbsgXVjQ==}
522+ cpu: [ppc64]
523+ os: [linux]
524+ libc: [glibc]
525+
526+ '@pnpm/exe.linux-riscv64@12.6.0':
527+ resolution: {integrity: sha512-HIbImydoC3J8NFt+8MXfhTCf5rO6NjCMyinSAHac0VmV8uCHw+kbQkyAzxV84rzz9ZOzmBOnj0b1N461UIYGsw==}
528+ cpu: [riscv64]
529+ os: [linux]
530+ libc: [glibc]
531+
532+ '@pnpm/exe.linux-s390x@12.6.0':
533+ resolution: {integrity: sha512-DjSqT7+BZ/lWcDHwNMuzsRVfyxUimh+D54Xw4tSWbdVVQhtWtNMUyI93LVnwCmsoEpar2gC3SFeAgywx37svKQ==}
534+ cpu: [s390x]
535+ os: [linux]
536+ libc: [glibc]
537+
538+ '@pnpm/exe.linux-x64-musl@12.6.0':
539+ resolution: {integrity: sha512-31lKeGPmRE6xfV6I3VjaEGVFRei14pl/zgoFDK4w+UkbJqOuNl2Ht3O1GuqNIg3Gl14qTEb4kZRAYFHXifDx9A==}
540+ cpu: [x64]
541+ os: [linux]
542+ libc: [musl]
543+
544+ '@pnpm/exe.linux-x64@12.6.0':
545+ resolution: {integrity: sha512-qFWBneHJAJ73W4whtbaFOL1M/7DBC6ILHXuxc7ZPtEhfPuT1zeZiGrmKHoMAfJA+mcm6xhOFljqVTUS+00Jabw==}
546+ cpu: [x64]
547+ os: [linux]
548+ libc: [glibc]
549+
550+ '@pnpm/exe.win32-arm64@12.6.0':
551+ resolution: {integrity: sha512-OhfefXEEykZlslSUhR8PPRe6MVPV3Oink/dVfIecE5velpc7j80cZYsHlaDrtRDcm3TPwQHkaRW1SJ1efX9oFg==}
552+ cpu: [arm64]
553+ os: [win32]
554+
555+ '@pnpm/exe.win32-x64@12.6.0':
556+ resolution: {integrity: sha512-L2tuyrD2+Imgxs3VK/ST/2L3xD6vDP0ktJQxM0TaGw7TbAQEMq+RMc8iK6Ew7Id579uzjJe8jSfJID2ZGsOHCA==}
557+ cpu: [x64]
558+ os: [win32]
559+
560+ pnpm@12.6.0:
561+ resolution: {integrity: sha512-PvaPlRyxEawgS0paFvCy3fDaVqluBBPoHYVdnwtV75JnFHCQKOHNAMQFwsX7e56OxNxGd3yAXQNzwvL/AP0g7A==}
562+ engines: {node: '>=18.*'}
563+ hasBin: true
564+
565+ snapshots:
566+
567+ '@pnpm/exe.android-arm64@12.6.0':
568+ optional: true
569+
570+ '@pnpm/exe.android-x64@12.6.0':
571+ optional: true
572+
573+ '@pnpm/exe.darwin-arm64@12.6.0':
574+ optional: true
575+
576+ '@pnpm/exe.darwin-x64@12.6.0':
577+ optional: true
578+
579+ '@pnpm/exe.freebsd-x64@12.6.0':
580+ optional: true
581+
582+ '@pnpm/exe.linux-arm64-musl@12.6.0':
583+ optional: true
584+
585+ '@pnpm/exe.linux-arm64@12.6.0':
586+ optional: true
587+
588+ '@pnpm/exe.linux-ppc64@12.6.0':
589+ optional: true
590+
591+ '@pnpm/exe.linux-riscv64@12.6.0':
592+ optional: true
593+
594+ '@pnpm/exe.linux-s390x@12.6.0':
595+ optional: true
596+
597+ '@pnpm/exe.linux-x64-musl@12.6.0':
598+ optional: true
599+
600+ '@pnpm/exe.linux-x64@12.6.0':
601+ optional: true
602+
603+ '@pnpm/exe.win32-arm64@12.6.0':
604+ optional: true
605+
606+ '@pnpm/exe.win32-x64@12.6.0':
607+ optional: true
608+
609+ pnpm@12.6.0:
610+ optionalDependencies:
611+ '@pnpm/exe.android-arm64': 12.6.0
612+ '@pnpm/exe.android-x64': 12.6.0
613+ '@pnpm/exe.darwin-arm64': 12.6.0
614+ '@pnpm/exe.darwin-x64': 12.6.0
615+ '@pnpm/exe.freebsd-x64': 12.6.0
616+ '@pnpm/exe.linux-arm64': 12.6.0
617+ '@pnpm/exe.linux-arm64-musl': 12.6.0
618+ '@pnpm/exe.linux-ppc64': 12.6.0
619+ '@pnpm/exe.linux-riscv64': 12.6.0
620+ '@pnpm/exe.linux-s390x': 12.6.0
621+ '@pnpm/exe.linux-x64': 12.6.0
622+ '@pnpm/exe.linux-x64-musl': 12.6.0
623+ '@pnpm/exe.win32-arm64': 12.6.0
624+ '@pnpm/exe.win32-x64': 12.6.0
625+
626+ ---
627+ lockfileVersion: '9.0'
628+
629+ settings:
630+ autoInstallPeers: true
631+ excludeLinksFromLockfile: false
632+
633+ importers:
634+
635+ .:
636+ dependencies:
637+ is-odd:
638+ specifier: ^3.0.1
639+ version: 3.0.1
640+
641+ packages:
642+
643+ is-number@6.0.0:
644+ resolution: {integrity: sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg==}
645+ engines: {node: '>=0.10.0'}
646+
647+ is-odd@3.0.1:
648+ resolution: {integrity: sha512-CQpnWPrDwmP1+SMHXZhtLtJv90yiyVfluGsX5iNCVkrhQtU3TQHsUWPG9wkdk9Lgd5yNpAg9jQEo90CBaXgWMA==}
649+ engines: {node: '>=4'}
650+
651+ snapshots:
652+
653+ is-number@6.0.0: {}
654+
655+ is-odd@3.0.1:
656+ dependencies:
657+ is-number: 6.0.0
658+ """
659+
660+
661+ def test_lockfile_v9_multi_documents_v12 (tmp_path : Path ) -> None :
662+ provider = PnpmLockfileProvider (
663+ PnpmLockfileProvider .Options (
664+ no_devel = False ,
665+ registry = 'https://registry.npmjs.org' ,
666+ store_version = 'v11' ,
667+ )
668+ )
669+
670+ lockfile = Lockfile (tmp_path / 'pnpm-lock.yaml' , 9 , store_version = 'v11' )
671+ lockfile .path .write_text (TEST_LOCKFILE_V9_MULTI_DOCUMENTS_V12 )
672+
673+ packages = list (provider .process_lockfile (lockfile .path ))
674+
675+ assert packages == [
676+ Package (
677+ lockfile = lockfile ,
678+ name = 'is-number' ,
679+ version = '6.0.0' ,
680+ source = ResolvedSource (
681+ resolved = 'https://registry.npmjs.org/is-number/-/is-number-6.0.0.tgz' ,
682+ integrity = Integrity (
683+ 'sha512' ,
684+ '5aed551de20b04af0a016254022499417f781a6384e39460ebfe77f1f2b08a5a14bb6d4a9dc1246063eaa1bda8499e66513ef7bcb1ab1d08cac3728c3f07c3ce' ,
685+ ),
686+ ),
687+ ),
688+ Package (
689+ lockfile = lockfile ,
690+ name = 'is-odd' ,
691+ version = '3.0.1' ,
692+ source = ResolvedSource (
693+ resolved = 'https://registry.npmjs.org/is-odd/-/is-odd-3.0.1.tgz' ,
694+ integrity = Integrity (
695+ 'sha512' ,
696+ '090a6758fac3c263f5f923075d986d2ed26ff74ca2c957e5b86b17e62342564ae142d5374d01ec5163c6f7091d93d2e0779c8da4083d8d0128f7408169781630' ,
697+ ),
698+ ),
699+ ),
700+ ]
0 commit comments