Skip to content

Commit 74697c7

Browse files
authored
node: Support pnpm v12
1 parent e333a84 commit 74697c7

2 files changed

Lines changed: 237 additions & 1 deletion

File tree

‎node/flatpak_node_generator/providers/pnpm.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ def _parse_package_key(self, key: str, major: int) -> tuple[str, str] | None:
8383

8484
def process_lockfile(self, lockfile_path: Path) -> Iterator[Package]:
8585
with open(lockfile_path, encoding='utf-8') as fp:
86-
data = yaml.safe_load(fp)
86+
# post v11 a document is prepended, so the last document is always the lockfile
87+
*_, data = yaml.safe_load_all(fp)
8788

8889
raw_version = data.get('lockfileVersion')
8990
if raw_version is None:

‎node/tests/test_pnpm.py‎

Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)