Skip to content

Commit 6414877

Browse files
committed
Fix formatting, I hope.
1 parent dbcf86a commit 6414877

4 files changed

Lines changed: 95 additions & 81 deletions

File tree

src/Strategy/Node/Pnpm/PnpmLock.hs

Lines changed: 70 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ module Strategy.Node.Pnpm.PnpmLock (
77

88
import Control.Applicative ((<|>))
99
import Control.Effect.Diagnostics (Diagnostics, Has, context)
10-
import Data.Maybe (fromMaybe)
1110
import Data.Foldable (for_)
1211
import Data.HashMap.Strict qualified as HashMap
1312
import Data.Map (Map, toList)
1413
import Data.Map qualified as Map
14+
import Data.Maybe (fromMaybe)
1515
import Data.Set qualified as Set
1616
import Data.Text (Text)
1717
import Data.Text qualified as Text
@@ -22,13 +22,13 @@ import DepTypes (
2222
VerConstraint (CEq),
2323
hydrateDepEnvs,
2424
insertEnvironment,
25-
)
25+
)
2626
import Effect.Grapher (deep, direct, edge, label, run, withLabeling)
2727
import Effect.Logger (
2828
Logger,
2929
logWarn,
3030
pretty,
31-
)
31+
)
3232
import Effect.ReadFS (ReadFS, readContentsYaml)
3333
import Graphing (Graphing)
3434
import Graphing qualified
@@ -49,11 +49,11 @@ import Strategy.Node.Pnpm.Types (
4949
Resolution (..),
5050
TarballResolution (..),
5151
withoutPeerDepSuffix,
52-
)
52+
)
5353
import Strategy.Node.Pnpm.V4_8 (
5454
buildGraphConfigV4or5,
5555
buildGraphConfigV678,
56-
)
56+
)
5757
import Strategy.Node.Pnpm.V9 (buildGraphConfigV9)
5858

5959
-- | Label attached to direct dependencies so that hydrateDepEnvs can
@@ -67,8 +67,12 @@ newtype PnpmLabel = PnpmEnv DepEnvironment
6767
--
6868

6969
-- | Convert a resolved package into a 'Dependency' node.
70-
toDependency :: (Bool -> Set.Set DepEnvironment)
71-
-> Text -> Maybe Text -> PackageData -> Dependency
70+
toDependency ::
71+
(Bool -> Set.Set DepEnvironment) ->
72+
Text ->
73+
Maybe Text ->
74+
PackageData ->
75+
Dependency
7276
toDependency toEnv name maybeVersion (PackageData isDev _ (RegistryResolve _) _ _) =
7377
toDep toEnv NodeJSType name (withoutPeerDepSuffix . withoutSymConstraint <$> maybeVersion) isDev
7478
toDependency toEnv _ _ (PackageData isDev _ (GitResolve (GitResolution url rev)) _ _) =
@@ -81,8 +85,13 @@ toDependency toEnv name _ (PackageData isDev Nothing (DirectoryResolve _) _ _) =
8185
toDep toEnv UserType name Nothing isDev
8286

8387
-- | Construct a 'Dependency' from its components.
84-
toDep :: (Bool -> Set.Set DepEnvironment)
85-
-> DepType -> Text -> Maybe Text -> Bool -> Dependency
88+
toDep ::
89+
(Bool -> Set.Set DepEnvironment) ->
90+
DepType ->
91+
Text ->
92+
Maybe Text ->
93+
Bool ->
94+
Dependency
8695
toDep toEnv depType name version isDev =
8796
Dependency depType name (CEq <$> version) mempty (toEnv isDev) mempty
8897

@@ -124,13 +133,17 @@ withoutLocalPackages = Graphing.shrink (\dep -> dependencyType dep /= UserType)
124133
--
125134
-- Non-registry resolvers (tarball, git, directory) use the version value
126135
-- directly as the @packages@ key. Registry resolvers use a constructed key.
127-
toResolvedDependency
128-
:: (Bool -> Set.Set DepEnvironment) -- ^ toEnv for this version
129-
-> Map Text PackageData
130-
-> (Text -> Text -> Text) -- ^ mkPkgKey for this version
131-
-> Text -- ^ dependency name
132-
-> Text -- ^ dependency version
133-
-> Maybe Dependency
136+
toResolvedDependency ::
137+
-- | toEnv for this version
138+
(Bool -> Set.Set DepEnvironment) ->
139+
Map Text PackageData ->
140+
-- | mkPkgKey for this version
141+
(Text -> Text -> Text) ->
142+
-- | dependency name
143+
Text ->
144+
-- | dependency version
145+
Text ->
146+
Maybe Dependency
134147
toResolvedDependency toEnv pkgs mkPkg depName depVersion = do
135148
-- Some versions of the lockfile remove the peer dep suffix.
136149
-- Others do not which is why it tries both.
@@ -163,44 +176,44 @@ buildGraphCore BuildGraphConfig{bgcGetPkgNameVersion, bgcMkPkgKey, bgcToEnv, bgc
163176
catalogs = bgcCatalogs
164177
pkgs = lockfilePackages base
165178
snapshotEdgesHM = HashMap.fromList snapshotEdges
166-
in withoutLocalPackages . hydrateDepEnvs $
167-
run . withLabeling applyLabels $ do
168-
-- Direct dependencies from each importer (workspace package).
169-
for_ (toList (lockfileImporters base)) $ \(_, projectImporters) -> do
170-
for_ (Map.toList $ directDependencies projectImporters) $ \(depName, ProjectMapDepMetadata depVersion) ->
171-
let resolvedVersion = resolveCatalogVersion catalogs depName depVersion
172-
in for_ (toResolvedDependency toEnv pkgs mkPkgKey depName resolvedVersion) $ \dep -> do
173-
direct dep
174-
case labelingMode of
175-
LabelingOn -> label dep (PnpmEnv EnvProduction)
176-
LabelingOff -> pure ()
177-
178-
for_ (Map.toList $ directDevDependencies projectImporters) $ \(depName, ProjectMapDepMetadata depVersion) ->
179-
let resolvedVersion = resolveCatalogVersion catalogs depName depVersion
180-
in for_ (toResolvedDependency toEnv pkgs mkPkgKey depName resolvedVersion) $ \dep -> do
181-
direct dep
182-
case labelingMode of
183-
LabelingOn -> label dep (PnpmEnv EnvDevelopment)
184-
LabelingOff -> pure ()
185-
186-
-- Deep dependencies and edges from the packages section.
187-
for_ (toList pkgs) $ \(pkgKey, pkgMeta) -> do
188-
let deepDependencies =
189-
Map.toList (dependencies pkgMeta)
190-
<> Map.toList (peerDependencies pkgMeta)
191-
<> fromMaybe mempty (HashMap.lookup pkgKey snapshotEdgesHM)
192-
193-
let (depName, depVersion) = case getPkgNameVersion pkgKey of
194-
Nothing -> (pkgKey, Nothing)
195-
Just (name, version) -> (name, Just version)
196-
let parentDep = toDependency toEnv depName depVersion pkgMeta
197-
198-
-- It is ok if this dependency was already graphed as direct
199-
-- @direct 1 <> deep 1 = direct 1@
200-
deep parentDep
201-
202-
for_ deepDependencies $ \(deepName, deepVersion) -> do
203-
maybe (pure ()) (edge parentDep) (toResolvedDependency toEnv pkgs mkPkgKey deepName deepVersion)
179+
in withoutLocalPackages . hydrateDepEnvs $
180+
run . withLabeling applyLabels $ do
181+
-- Direct dependencies from each importer (workspace package).
182+
for_ (toList (lockfileImporters base)) $ \(_, projectImporters) -> do
183+
for_ (Map.toList $ directDependencies projectImporters) $ \(depName, ProjectMapDepMetadata depVersion) ->
184+
let resolvedVersion = resolveCatalogVersion catalogs depName depVersion
185+
in for_ (toResolvedDependency toEnv pkgs mkPkgKey depName resolvedVersion) $ \dep -> do
186+
direct dep
187+
case labelingMode of
188+
LabelingOn -> label dep (PnpmEnv EnvProduction)
189+
LabelingOff -> pure ()
190+
191+
for_ (Map.toList $ directDevDependencies projectImporters) $ \(depName, ProjectMapDepMetadata depVersion) ->
192+
let resolvedVersion = resolveCatalogVersion catalogs depName depVersion
193+
in for_ (toResolvedDependency toEnv pkgs mkPkgKey depName resolvedVersion) $ \dep -> do
194+
direct dep
195+
case labelingMode of
196+
LabelingOn -> label dep (PnpmEnv EnvDevelopment)
197+
LabelingOff -> pure ()
198+
199+
-- Deep dependencies and edges from the packages section.
200+
for_ (toList pkgs) $ \(pkgKey, pkgMeta) -> do
201+
let deepDependencies =
202+
Map.toList (dependencies pkgMeta)
203+
<> Map.toList (peerDependencies pkgMeta)
204+
<> fromMaybe mempty (HashMap.lookup pkgKey snapshotEdgesHM)
205+
206+
let (depName, depVersion) = case getPkgNameVersion pkgKey of
207+
Nothing -> (pkgKey, Nothing)
208+
Just (name, version) -> (name, Just version)
209+
let parentDep = toDependency toEnv depName depVersion pkgMeta
210+
211+
-- It is ok if this dependency was already graphed as direct
212+
-- @direct 1 <> deep 1 = direct 1@
213+
deep parentDep
214+
215+
for_ deepDependencies $ \(deepName, deepVersion) -> do
216+
maybe (pure ()) (edge parentDep) (toResolvedDependency toEnv pkgs mkPkgKey deepName deepVersion)
204217

205218
--
206219
-- Top-level dispatch
@@ -222,8 +235,9 @@ analyze file = context "Analyzing Pnpm Lockfile" $ do
222235
case pnpmLockFile of
223236
LockfileV4Or5 (PnpmLockfileV4Or5 base) ->
224237
case Text.uncons (lockfileRawVersion base) of
225-
Just (c, _) | c `elem` ['1', '2', '3'] ->
226-
logWarn . pretty $ "pnpm-lock file is using older lockFileVersion: " <> lockfileRawVersion base <> ", which is not officially supported!"
238+
Just (c, _)
239+
| c `elem` ['1', '2', '3'] ->
240+
logWarn . pretty $ "pnpm-lock file is using older lockFileVersion: " <> lockfileRawVersion base <> ", which is not officially supported!"
227241
_ -> pure ()
228242
LockfileV678 _ -> pure ()
229243
LockfileV9 _ -> pure ()

src/Strategy/Node/Pnpm/Types.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
module Strategy.Node.Pnpm.Types (
32
-- * Lockfile types
43
PnpmLockfileBase (..),

src/Strategy/Node/Pnpm/V4_8.hs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
module Strategy.Node.Pnpm.V4_8 (
32
-- * Key parsers
43
getPkgNameVersionV5,
@@ -39,12 +38,12 @@ parseAtKey slashRequired pkgKey =
3938
Nothing | slashRequired -> Nothing
4039
Nothing -> Just pkgKey
4140
Just txt -> Just txt
42-
>>= \txt -> do
43-
let (nameAndVersion, peerDepInfo) = Text.breakOn "(" txt
44-
let (nameWithSlash, version) = Text.breakOnEnd "@" nameAndVersion
45-
case (Text.stripSuffix "@" nameWithSlash, version) of
46-
(Just name, v) -> Just (name, v <> peerDepInfo)
47-
_ -> Nothing
41+
>>= \txt -> do
42+
let (nameAndVersion, peerDepInfo) = Text.breakOn "(" txt
43+
let (nameWithSlash, version) = Text.breakOnEnd "@" nameAndVersion
44+
case (Text.stripSuffix "@" nameWithSlash, version) of
45+
(Just name, v) -> Just (name, v <> peerDepInfo)
46+
_ -> Nothing
4847

4948
--
5049
-- Key parsers
@@ -97,22 +96,24 @@ toEnvInline isDev = Set.singleton (if isDev then EnvDevelopment else EnvProducti
9796

9897
-- | Config for lockfile versions 4/5.
9998
buildGraphConfigV4or5 :: BuildGraphConfig
100-
buildGraphConfigV4or5 = BuildGraphConfig
101-
{ bgcGetPkgNameVersion = getPkgNameVersionV5
102-
, bgcMkPkgKey = mkPkgKeyV5
103-
, bgcToEnv = toEnvInline
104-
, bgcLabelingMode = LabelingOff
105-
, bgcSnapshotEdges = mempty
106-
, bgcCatalogs = mempty
107-
}
99+
buildGraphConfigV4or5 =
100+
BuildGraphConfig
101+
{ bgcGetPkgNameVersion = getPkgNameVersionV5
102+
, bgcMkPkgKey = mkPkgKeyV5
103+
, bgcToEnv = toEnvInline
104+
, bgcLabelingMode = LabelingOff
105+
, bgcSnapshotEdges = mempty
106+
, bgcCatalogs = mempty
107+
}
108108

109109
-- | Config for lockfile versions 6/7/8.
110110
buildGraphConfigV678 :: BuildGraphConfig
111-
buildGraphConfigV678 = BuildGraphConfig
112-
{ bgcGetPkgNameVersion = getPkgNameVersionV6
113-
, bgcMkPkgKey = mkPkgKeyV6
114-
, bgcToEnv = toEnvInline
115-
, bgcLabelingMode = LabelingOff
116-
, bgcSnapshotEdges = mempty
117-
, bgcCatalogs = mempty
118-
}
111+
buildGraphConfigV678 =
112+
BuildGraphConfig
113+
{ bgcGetPkgNameVersion = getPkgNameVersionV6
114+
, bgcMkPkgKey = mkPkgKeyV6
115+
, bgcToEnv = toEnvInline
116+
, bgcLabelingMode = LabelingOff
117+
, bgcSnapshotEdges = mempty
118+
, bgcCatalogs = mempty
119+
}

src/Strategy/Node/Pnpm/V9.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import Strategy.Node.Pnpm.Types (
2323
LabelingMode (LabelingOn),
2424
PnpmLockFileSnapshots (snapshots),
2525
PnpmLockfileV9 (..),
26-
)
26+
)
2727
import Strategy.Node.Pnpm.V4_8 (parseAtKey)
2828

2929
--

0 commit comments

Comments
 (0)