• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pantsbuild / pants / 19015773527

02 Nov 2025 05:33PM UTC coverage: 17.872% (-62.4%) from 80.3%
19015773527

Pull #22816

github

web-flow
Merge a12d75757 into 6c024e162
Pull Request #22816: Update Pants internal Python to 3.14

4 of 5 new or added lines in 3 files covered. (80.0%)

28452 existing lines in 683 files now uncovered.

9831 of 55007 relevant lines covered (17.87%)

0.18 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/python/pants/backend/javascript/goals/export.py
1
# Copyright 2024 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

UNCOV
4
from __future__ import annotations
×
5

UNCOV
6
from dataclasses import dataclass
×
7

UNCOV
8
from pants.backend.javascript.install_node_package import (
×
9
    InstalledNodePackageRequest,
10
    install_node_packages_for_address,
11
)
UNCOV
12
from pants.backend.javascript.resolve import FirstPartyNodePackageResolves
×
UNCOV
13
from pants.backend.javascript.subsystems.nodejs import NodeJS
×
UNCOV
14
from pants.core.goals.export import ExportRequest, ExportResult, ExportResults, ExportSubsystem
×
UNCOV
15
from pants.engine.engine_aware import EngineAwareParameter
×
UNCOV
16
from pants.engine.internals.native_engine import RemovePrefix
×
UNCOV
17
from pants.engine.internals.selectors import concurrently
×
UNCOV
18
from pants.engine.intrinsics import remove_prefix
×
UNCOV
19
from pants.engine.rules import collect_rules, implicitly, rule
×
UNCOV
20
from pants.engine.unions import UnionMembership, UnionRule
×
21

22

UNCOV
23
@dataclass(frozen=True)
×
UNCOV
24
class ExportNodeModulesRequest(ExportRequest):
×
UNCOV
25
    pass
×
26

27

UNCOV
28
@dataclass(frozen=True)
×
UNCOV
29
class _ExportNodeModulesForResolveRequest(EngineAwareParameter):
×
UNCOV
30
    resolve: str
×
31

32

UNCOV
33
@dataclass(frozen=True)
×
UNCOV
34
class MaybeExportResult:
×
UNCOV
35
    result: ExportResult | None
×
36

37

UNCOV
38
@rule
×
UNCOV
39
async def export_node_modules_for_resolve(
×
40
    request: _ExportNodeModulesForResolveRequest,
41
    nodejs: NodeJS,
42
    union_membership: UnionMembership,
43
    resolves: FirstPartyNodePackageResolves,
44
) -> MaybeExportResult:
45
    resolve = request.resolve
×
46

47
    requested_resolve = resolves.get(request.resolve)
×
48

49
    if not requested_resolve:
×
50
        return MaybeExportResult(None)
×
51

52
    installation = await install_node_packages_for_address(
×
53
        InstalledNodePackageRequest(requested_resolve.address), **implicitly()
54
    )
55

56
    return MaybeExportResult(
×
57
        ExportResult(
58
            description=f"generated node_modules for {resolve} (using NodeJS {nodejs.version})",
59
            reldir=f"nodejs/modules/{resolve}",
60
            digest=await remove_prefix(RemovePrefix(installation.digest, installation.project_dir)),
61
            resolve=resolve,
62
        )
63
    )
64

65

UNCOV
66
@rule
×
UNCOV
67
async def export_node_modules(
×
68
    request: ExportNodeModulesRequest,
69
    export_subsys: ExportSubsystem,
70
) -> ExportResults:
71
    maybe_packages = await concurrently(
×
72
        export_node_modules_for_resolve(
73
            _ExportNodeModulesForResolveRequest(resolve), **implicitly()
74
        )
75
        for resolve in export_subsys.options.resolve
76
    )
77
    return ExportResults(pkg.result for pkg in maybe_packages if pkg.result is not None)
×
78

79

UNCOV
80
def rules():
×
UNCOV
81
    return [
×
82
        *collect_rules(),
83
        UnionRule(ExportRequest, ExportNodeModulesRequest),
84
    ]
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc