pnpm-dedup 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +218 -0
- package/dist/applyClusterFixes.js +252 -0
- package/dist/applyClusterFixes.js.map +1 -0
- package/dist/applyClusterFixes.test.js +474 -0
- package/dist/applyClusterFixes.test.js.map +1 -0
- package/dist/bin/pnpm-dedupe.js +35 -0
- package/dist/bin/pnpm-dedupe.js.map +1 -0
- package/dist/bin/pnpm-why-duplicate.js +23 -0
- package/dist/bin/pnpm-why-duplicate.js.map +1 -0
- package/dist/bin/pnpm-why-duplicate.test.js +57 -0
- package/dist/bin/pnpm-why-duplicate.test.js.map +1 -0
- package/dist/dedupe.js +86 -0
- package/dist/dedupe.js.map +1 -0
- package/dist/dedupeCheckConsistency.test.js +149 -0
- package/dist/dedupeCheckConsistency.test.js.map +1 -0
- package/dist/dedupeEndToEnd.test.js +121 -0
- package/dist/dedupeEndToEnd.test.js.map +1 -0
- package/dist/dedupePeers.test.js +105 -0
- package/dist/dedupePeers.test.js.map +1 -0
- package/dist/definitions/applyClusterFixes.d.ts +24 -0
- package/dist/definitions/applyClusterFixes.d.ts.map +1 -0
- package/dist/definitions/applyClusterFixes.test.d.ts +2 -0
- package/dist/definitions/applyClusterFixes.test.d.ts.map +1 -0
- package/dist/definitions/bin/pnpm-dedupe.d.ts +3 -0
- package/dist/definitions/bin/pnpm-dedupe.d.ts.map +1 -0
- package/dist/definitions/bin/pnpm-why-duplicate.d.ts +3 -0
- package/dist/definitions/bin/pnpm-why-duplicate.d.ts.map +1 -0
- package/dist/definitions/bin/pnpm-why-duplicate.test.d.ts +2 -0
- package/dist/definitions/bin/pnpm-why-duplicate.test.d.ts.map +1 -0
- package/dist/definitions/dedupe.d.ts +15 -0
- package/dist/definitions/dedupe.d.ts.map +1 -0
- package/dist/definitions/dedupeCheckConsistency.test.d.ts +2 -0
- package/dist/definitions/dedupeCheckConsistency.test.d.ts.map +1 -0
- package/dist/definitions/dedupeEndToEnd.test.d.ts +2 -0
- package/dist/definitions/dedupeEndToEnd.test.d.ts.map +1 -0
- package/dist/definitions/dedupePeers.test.d.ts +2 -0
- package/dist/definitions/dedupePeers.test.d.ts.map +1 -0
- package/dist/definitions/displayMany.d.ts +16 -0
- package/dist/definitions/displayMany.d.ts.map +1 -0
- package/dist/definitions/displayMany.test.d.ts +2 -0
- package/dist/definitions/displayMany.test.d.ts.map +1 -0
- package/dist/definitions/helpers/buildIdentifiedFixesMap.test.d.ts +2 -0
- package/dist/definitions/helpers/buildIdentifiedFixesMap.test.d.ts.map +1 -0
- package/dist/definitions/helpers/buildPnpmPackagesMap.d.ts +13 -0
- package/dist/definitions/helpers/buildPnpmPackagesMap.d.ts.map +1 -0
- package/dist/definitions/helpers/buildPnpmPackagesMap.test.d.ts +2 -0
- package/dist/definitions/helpers/buildPnpmPackagesMap.test.d.ts.map +1 -0
- package/dist/definitions/helpers/collectDependentRanges.d.ts +22 -0
- package/dist/definitions/helpers/collectDependentRanges.d.ts.map +1 -0
- package/dist/definitions/helpers/collectDependentRanges.test.d.ts +2 -0
- package/dist/definitions/helpers/collectDependentRanges.test.d.ts.map +1 -0
- package/dist/definitions/helpers/collectPnpmDependents.d.ts +8 -0
- package/dist/definitions/helpers/collectPnpmDependents.d.ts.map +1 -0
- package/dist/definitions/helpers/collectPnpmDependents.test.d.ts +2 -0
- package/dist/definitions/helpers/collectPnpmDependents.test.d.ts.map +1 -0
- package/dist/definitions/helpers/duplicateSnapshot.d.ts +3 -0
- package/dist/definitions/helpers/duplicateSnapshot.d.ts.map +1 -0
- package/dist/definitions/helpers/parsePnpmLockPackages.d.ts +44 -0
- package/dist/definitions/helpers/parsePnpmLockPackages.d.ts.map +1 -0
- package/dist/definitions/helpers/parsePnpmLockPackages.test.d.ts +2 -0
- package/dist/definitions/helpers/parsePnpmLockPackages.test.d.ts.map +1 -0
- package/dist/definitions/helpers/pnpmProtocol.d.ts +2 -0
- package/dist/definitions/helpers/pnpmProtocol.d.ts.map +1 -0
- package/dist/definitions/helpers/pnpmVersion.d.ts +11 -0
- package/dist/definitions/helpers/pnpmVersion.d.ts.map +1 -0
- package/dist/definitions/helpers/pnpmWorkspaceYaml.d.ts +23 -0
- package/dist/definitions/helpers/pnpmWorkspaceYaml.d.ts.map +1 -0
- package/dist/definitions/helpers/pnpmWorkspaceYaml.test.d.ts +2 -0
- package/dist/definitions/helpers/pnpmWorkspaceYaml.test.d.ts.map +1 -0
- package/dist/definitions/helpers/projectDir.d.ts +3 -0
- package/dist/definitions/helpers/projectDir.d.ts.map +1 -0
- package/dist/definitions/helpers/readInstalledManifest.d.ts +32 -0
- package/dist/definitions/helpers/readInstalledManifest.d.ts.map +1 -0
- package/dist/definitions/helpers/readInstalledManifest.test.d.ts +2 -0
- package/dist/definitions/helpers/readInstalledManifest.test.d.ts.map +1 -0
- package/dist/definitions/helpers/runPnpm.d.ts +11 -0
- package/dist/definitions/helpers/runPnpm.d.ts.map +1 -0
- package/dist/definitions/helpers/tempProjects.d.ts +8 -0
- package/dist/definitions/helpers/tempProjects.d.ts.map +1 -0
- package/dist/definitions/helpers/toLockstepGraph.d.ts +12 -0
- package/dist/definitions/helpers/toLockstepGraph.d.ts.map +1 -0
- package/dist/definitions/helpers/toLockstepGraph.test.d.ts +2 -0
- package/dist/definitions/helpers/toLockstepGraph.test.d.ts.map +1 -0
- package/dist/definitions/helpers/versionsSnapshot.d.ts +3 -0
- package/dist/definitions/helpers/versionsSnapshot.d.ts.map +1 -0
- package/dist/definitions/identifyClusterFixes.d.ts +7 -0
- package/dist/definitions/identifyClusterFixes.d.ts.map +1 -0
- package/dist/definitions/identifyClusterFixes.test.d.ts +2 -0
- package/dist/definitions/identifyClusterFixes.test.d.ts.map +1 -0
- package/dist/definitions/identifyResolutionFixes.test.d.ts +2 -0
- package/dist/definitions/identifyResolutionFixes.test.d.ts.map +1 -0
- package/dist/definitions/index.d.ts +25 -0
- package/dist/definitions/index.d.ts.map +1 -0
- package/dist/definitions/pnpmLockTypes.d.ts +42 -0
- package/dist/definitions/pnpmLockTypes.d.ts.map +1 -0
- package/dist/definitions/readPnpmLock.d.ts +3 -0
- package/dist/definitions/readPnpmLock.d.ts.map +1 -0
- package/dist/displayMany.js +56 -0
- package/dist/displayMany.js.map +1 -0
- package/dist/displayMany.test.js +146 -0
- package/dist/displayMany.test.js.map +1 -0
- package/dist/helpers/buildIdentifiedFixesMap.test.js +27 -0
- package/dist/helpers/buildIdentifiedFixesMap.test.js.map +1 -0
- package/dist/helpers/buildPnpmPackagesMap.js +23 -0
- package/dist/helpers/buildPnpmPackagesMap.js.map +1 -0
- package/dist/helpers/buildPnpmPackagesMap.test.js +68 -0
- package/dist/helpers/buildPnpmPackagesMap.test.js.map +1 -0
- package/dist/helpers/collectDependentRanges.js +118 -0
- package/dist/helpers/collectDependentRanges.js.map +1 -0
- package/dist/helpers/collectDependentRanges.test.js +211 -0
- package/dist/helpers/collectDependentRanges.test.js.map +1 -0
- package/dist/helpers/collectPnpmDependents.js +55 -0
- package/dist/helpers/collectPnpmDependents.js.map +1 -0
- package/dist/helpers/collectPnpmDependents.test.js +78 -0
- package/dist/helpers/collectPnpmDependents.test.js.map +1 -0
- package/dist/helpers/duplicateSnapshot.js +5 -0
- package/dist/helpers/duplicateSnapshot.js.map +1 -0
- package/dist/helpers/parsePnpmLockPackages.js +62 -0
- package/dist/helpers/parsePnpmLockPackages.js.map +1 -0
- package/dist/helpers/parsePnpmLockPackages.test.js +62 -0
- package/dist/helpers/parsePnpmLockPackages.test.js.map +1 -0
- package/dist/helpers/pnpmProtocol.js +2 -0
- package/dist/helpers/pnpmProtocol.js.map +1 -0
- package/dist/helpers/pnpmVersion.js +23 -0
- package/dist/helpers/pnpmVersion.js.map +1 -0
- package/dist/helpers/pnpmWorkspaceYaml.js +48 -0
- package/dist/helpers/pnpmWorkspaceYaml.js.map +1 -0
- package/dist/helpers/pnpmWorkspaceYaml.test.js +91 -0
- package/dist/helpers/pnpmWorkspaceYaml.test.js.map +1 -0
- package/dist/helpers/projectDir.js +10 -0
- package/dist/helpers/projectDir.js.map +1 -0
- package/dist/helpers/readInstalledManifest.js +139 -0
- package/dist/helpers/readInstalledManifest.js.map +1 -0
- package/dist/helpers/readInstalledManifest.test.js +83 -0
- package/dist/helpers/readInstalledManifest.test.js.map +1 -0
- package/dist/helpers/runPnpm.js +16 -0
- package/dist/helpers/runPnpm.js.map +1 -0
- package/dist/helpers/tempProjects.js +85 -0
- package/dist/helpers/tempProjects.js.map +1 -0
- package/dist/helpers/toLockstepGraph.js +34 -0
- package/dist/helpers/toLockstepGraph.js.map +1 -0
- package/dist/helpers/toLockstepGraph.test.js +81 -0
- package/dist/helpers/toLockstepGraph.test.js.map +1 -0
- package/dist/helpers/versionsSnapshot.js +5 -0
- package/dist/helpers/versionsSnapshot.js.map +1 -0
- package/dist/identifyClusterFixes.js +53 -0
- package/dist/identifyClusterFixes.js.map +1 -0
- package/dist/identifyClusterFixes.test.js +307 -0
- package/dist/identifyClusterFixes.test.js.map +1 -0
- package/dist/identifyResolutionFixes.test.js +49 -0
- package/dist/identifyResolutionFixes.test.js.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/pnpmLockTypes.js +7 -0
- package/dist/pnpmLockTypes.js.map +1 -0
- package/dist/readPnpmLock.js +6 -0
- package/dist/readPnpmLock.js.map +1 -0
- package/package.json +71 -0
- package/src/applyClusterFixes.test.ts +560 -0
- package/src/applyClusterFixes.ts +466 -0
- package/src/bin/pnpm-dedupe.ts +44 -0
- package/src/bin/pnpm-why-duplicate.test.ts +79 -0
- package/src/bin/pnpm-why-duplicate.ts +34 -0
- package/src/dedupe.ts +124 -0
- package/src/dedupeCheckConsistency.test.ts +218 -0
- package/src/dedupeEndToEnd.test.ts +168 -0
- package/src/dedupePeers.test.ts +175 -0
- package/src/displayMany.test.ts +208 -0
- package/src/displayMany.ts +104 -0
- package/src/helpers/buildIdentifiedFixesMap.test.ts +33 -0
- package/src/helpers/buildPnpmPackagesMap.test.ts +119 -0
- package/src/helpers/buildPnpmPackagesMap.ts +53 -0
- package/src/helpers/collectDependentRanges.test.ts +311 -0
- package/src/helpers/collectDependentRanges.ts +185 -0
- package/src/helpers/collectPnpmDependents.test.ts +112 -0
- package/src/helpers/collectPnpmDependents.ts +79 -0
- package/src/helpers/duplicateSnapshot.ts +18 -0
- package/src/helpers/parsePnpmLockPackages.test.ts +93 -0
- package/src/helpers/parsePnpmLockPackages.ts +99 -0
- package/src/helpers/pnpmProtocol.ts +12 -0
- package/src/helpers/pnpmVersion.ts +28 -0
- package/src/helpers/pnpmWorkspaceYaml.test.ts +140 -0
- package/src/helpers/pnpmWorkspaceYaml.ts +77 -0
- package/src/helpers/projectDir.ts +14 -0
- package/src/helpers/readInstalledManifest.test.ts +124 -0
- package/src/helpers/readInstalledManifest.ts +202 -0
- package/src/helpers/runPnpm.ts +34 -0
- package/src/helpers/tempProjects.ts +94 -0
- package/src/helpers/toLockstepGraph.test.ts +98 -0
- package/src/helpers/toLockstepGraph.ts +52 -0
- package/src/helpers/versionsSnapshot.ts +9 -0
- package/src/identifyClusterFixes.test.ts +430 -0
- package/src/identifyClusterFixes.ts +114 -0
- package/src/identifyResolutionFixes.test.ts +82 -0
- package/src/index.ts +159 -0
- package/src/pnpmLockTypes.ts +44 -0
- package/src/readPnpmLock.ts +7 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectDependentRanges.test.js","sourceRoot":"","sources":["../../src/helpers/collectDependentRanges.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CACnC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/C,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,EAAE,CACnC,YAAY,CAAC,YAAY,CAAC,uBAAuB,QAAQ,iBAAiB,CAAC,CAAC,CAAC;AAE/E,MAAM,SAAS,GAAG,CAChB,QAAgB,EAChB,YAAsB,EACtB,YAAY,GAAmB,GAAG,EAAE,CAAC,SAAS,EAC9C,EAAE,CACF,sBAAsB,CACpB,OAAO,CAAC,QAAQ,CAAC,EACjB,IAAI,GAAG,CAAC,YAAY,CAAC,EACrB,YAAY,CACb,CAAC;AAEJ,qEAAqE;AACrE,2EAA2E;AAC3E,2EAA2E;AAC3E,kCAAkC;AAClC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAC/C,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;AACpE,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAE1D,MAAM,oBAAoB,GAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAC7D,IAAI,KAAK,uBAAuB,IAAI,OAAO,KAAK,SAAS;IACvD,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAE,EAAE;IAC1E,CAAC,CAAC,SAAS,CAAC;AAEhB,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AACvD,MAAM,qBAAqB,GAAG,oBAAoB,CAChD,YAAY,CAAC,uBAAuB,iBAAiB,EAAE,CAAC,CACzD,CAAC;AAEF,MAAM,OAAO,GAAG,CACd,MAAiD,EACjD,WAAmB,EACnB,YAAoB,EACA,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,YAAY,CAAC;IAC1E,EAAE,KAAK,CAAC;AAEZ,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC7D;gBACE,GAAG,EAAE,8BAA8B;gBACnC,KAAK,EAAE,OAAO;gBACd,eAAe,EAAE,OAAO;gBACxB,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE;aAClD;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,eAAe,CACb,CAAC,GAAG,SAAS,CAAC,wBAAwB,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EACtE,CAAC,mBAAmB,CAAC,CACtB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,MAAM,GAAG,SAAS,CACtB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,CACrB,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAC7D,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAChF,yEAAyE;IACzE,oEAAoE;IACpE,gFAAgF;IAChF,yCAAyC;IACzC,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,MAAM,GAAG,SAAS,CAAC,8BAA8B,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAErE,WAAW,CACT,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,sCAAsC,CAAC,EACjE,6BAA6B,CAC9B,CAAC;QACF,WAAW,CACT,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,yCAAyC,CAAC,EACpE,8BAA8B,CAC/B,CAAC;QACF,wEAAwE;QACxE,wEAAwE;QACxE,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,mBAAmB,CAAC,EAAE,SAAS,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,8EAA8E;IAC9E,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,UAAU,GACd,SAAS,CAAC,8BAA8B,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE5E,WAAW,CACT,UAAU,CAAC,IAAI,CACb,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,yBAAyB,CAC3D,EAAE,IAAI,EACP,IAAI,CACL,CAAC;QACF,8DAA8D;QAC9D,WAAW,CACT,SAAS,CAAC,8BAA8B,EAAE,CAAC,oBAAoB,CAAC,CAAC;aAC9D,GAAG,CAAC,oBAAoB,CAAC;YAC1B,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,eAAe,CAAC,EAAE,IAAI,EAChE,SAAS,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,qDAAqD;IACrD,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,WAAW,CACT,OAAO,CACL,SAAS,CAAC,8BAA8B,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CACtE,IAAI,KAAK,gCAAgC,IAAI,OAAO,KAAK,OAAO;YAC9D,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;YACzC,CAAC,CAAC,SAAS,CACd,EACD,QAAQ,EACR,sCAAsC,CACvC,EACD,SAAS,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,MAAM,GAAG,SAAS,CACtB,iBAAiB,EACjB,CAAC,kBAAkB,CAAC,EACpB,qBAAqB,CACtB,CAAC;QAEF,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE;YAC9C;gBACE,GAAG,EAAE,gCAAgC;gBACrC,KAAK,EAAE,OAAO;gBACd,eAAe,EAAE,OAAO;gBACxB,aAAa,EAAE,0BAA0B;aAC1C;YACD;gBACE,GAAG,EAAE,oBAAoB;gBACzB,KAAK,EAAE,QAAQ;gBACf,eAAe,EAAE,OAAO;gBACxB,aAAa,EAAE,aAAa;aAC7B;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,yEAAyE;IACzE,0EAA0E;IAC1E,6EAA6E;IAC7E,yEAAyE;IACzE,8CAA8C;IAC9C,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,SAAS,CAAC,uBAAuB,EAAE;YAChD,YAAY;YACZ,yBAAyB;SAC1B,CAAC,CAAC;QAEH,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACxC;gBACE,GAAG,EAAE,iCAAiC;gBACtC,KAAK,EAAE,OAAO;gBACd,eAAe,EAAE,OAAO;gBACxB,QAAQ,EAAE,oBAAoB;gBAC9B,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE;aACrD;YACD;gBACE,GAAG,EAAE,YAAY;gBACjB,KAAK,EAAE,OAAO;gBACd,eAAe,EAAE,OAAO;gBACxB,aAAa,EAAE,MAAM;aACtB;SACF,CAAC,CAAC;QAEH,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE;YACrD;gBACE,GAAG,EAAE,iCAAiC;gBACtC,KAAK,EAAE,OAAO;gBACd,eAAe,EAAE,OAAO;gBACxB,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE;aACrD;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,+EAA+E;IAC/E,sCAAsC;IACtC,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,eAAe,CACb,SAAS,CAAC,iBAAiB,EAAE,CAAC,yBAAyB,CAAC,CAAC;aACtD,GAAG,CAAC,yBAAyB,CAAC;YAC/B,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,EAC5D;YACE;gBACE,GAAG,EAAE,iCAAiC;gBACtC,KAAK,EAAE,QAAQ;gBACf,eAAe,EAAE,OAAO;gBACxB,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE;aACrD;YACD;gBACE,GAAG,EAAE,iCAAiC;gBACtC,KAAK,EAAE,OAAO;gBACd,eAAe,EAAE,OAAO;gBACxB,QAAQ,EAAE,gCAAgC;gBAC1C,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE;aACrD;SACF,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG,SAAS,CACtB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,CACrB,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC7D,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,wEAAwE;IACxE,2EAA2E;IAC3E,sEAAsE;IACtE,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,MAAM,GAAG,SAAS,CAAC,qBAAqB,EAAE;YAC9C,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,UAAU;YACV,OAAO;YACP,OAAO;SACR,CAAC,CAAC;QAEH,yEAAyE;QACzE,0BAA0B;QAC1B,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACpC;gBACE,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,OAAO;gBACd,eAAe,EAAE,OAAO;gBACxB,aAAa,EAAE,KAAK;aACrB;SACF,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1E,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,2EAA2E;IAC3E,0CAA0C;IAC1C,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,qBAAqB,GAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAC9D,IAAI,KAAK,uBAAuB,IAAI,OAAO,KAAK,SAAS;YACvD,CAAC,CAAC;gBACE,YAAY,EAAE;oBACZ,cAAc,EAAE,aAAa;oBAC7B,wBAAwB,EAAE,GAAG;iBAC9B;aACF;YACH,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,MAAM,GAAG,SAAS,CACtB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,CACtB,CAAC;QAEF,WAAW,CACT,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,iBAAiB,CAAC;QAClD,sDAAsD;QACtD,QAAQ,CACT,CAAC;QACF,WAAW,CACT,OAAO,CAAC,MAAM,EAAE,wBAAwB,EAAE,iBAAiB,CAAC,EAC5D,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { PackageDependencyDescriptorUtils, isSemverComparable, } from "pm-dedup-core";
|
|
2
|
+
import { parsePackageId, resolveSnapshotDependency, } from "./parsePnpmLockPackages.js";
|
|
3
|
+
const importerDepTypes = [
|
|
4
|
+
"dependencies",
|
|
5
|
+
"devDependencies",
|
|
6
|
+
"optionalDependencies",
|
|
7
|
+
];
|
|
8
|
+
const snapshotDepTypes = ["dependencies", "optionalDependencies"];
|
|
9
|
+
export function collectPnpmDependents(lock, onlyPackageNames) {
|
|
10
|
+
const dependentsMap = new Map();
|
|
11
|
+
const add = (name, dependent) => {
|
|
12
|
+
if (onlyPackageNames && !onlyPackageNames.includes(name)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
let dependents = dependentsMap.get(name);
|
|
16
|
+
if (!dependents) {
|
|
17
|
+
dependents = [];
|
|
18
|
+
dependentsMap.set(name, dependents);
|
|
19
|
+
}
|
|
20
|
+
dependents.push(dependent);
|
|
21
|
+
};
|
|
22
|
+
for (const [importerPath, project] of Object.entries(lock.importers ?? {})) {
|
|
23
|
+
importerDepTypes.forEach((depType) => {
|
|
24
|
+
const deps = project[depType];
|
|
25
|
+
if (!deps)
|
|
26
|
+
return;
|
|
27
|
+
for (const [depName, { specifier }] of Object.entries(deps)) {
|
|
28
|
+
const parsedDep = PackageDependencyDescriptorUtils.parse(depName, specifier);
|
|
29
|
+
// `workspace:` and `catalog:` name something other than the npm package
|
|
30
|
+
// sharing this key, so they constrain no npm version
|
|
31
|
+
if (!isSemverComparable(parsedDep))
|
|
32
|
+
continue;
|
|
33
|
+
add(parsedDep.npmName, {
|
|
34
|
+
key: `${importerPath === "." ? "package.json" : importerPath} in ${depType}`,
|
|
35
|
+
version: parsedDep.selector,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
for (const [snapshotKey, snapshot] of Object.entries(lock.snapshots ?? {})) {
|
|
41
|
+
const { name, version } = parsePackageId(snapshotKey);
|
|
42
|
+
const key = `${name}@${version}`;
|
|
43
|
+
snapshotDepTypes.forEach((depType) => {
|
|
44
|
+
const deps = snapshot[depType];
|
|
45
|
+
if (!deps)
|
|
46
|
+
return;
|
|
47
|
+
for (const [depName, depValue] of Object.entries(deps)) {
|
|
48
|
+
const resolved = resolveSnapshotDependency(depName, depValue);
|
|
49
|
+
add(resolved.name, { key, version: resolved.version });
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return dependentsMap;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=collectPnpmDependents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectPnpmDependents.js","sourceRoot":"","sources":["../../src/helpers/collectPnpmDependents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { describe, it } from "bun:test";
|
|
2
|
+
import { deepStrictEqual, ok, strictEqual } from "node:assert/strict";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { readPnpmLock } from "../readPnpmLock.js";
|
|
5
|
+
import { collectPnpmDependents } from "./collectPnpmDependents.js";
|
|
6
|
+
const fixturesBase = (rel) => fileURLToPath(new URL(rel, import.meta.url));
|
|
7
|
+
const lockFor = (scenario) => readPnpmLock(fixturesBase(`../../test/fixtures/${scenario}/pnpm-lock.yaml`));
|
|
8
|
+
describe("collectPnpmDependents", () => {
|
|
9
|
+
it("collects the importer specifier (range) for a direct dependency", () => {
|
|
10
|
+
const dependents = collectPnpmDependents(lockFor("simple"));
|
|
11
|
+
deepStrictEqual(dependents.get("semver"), [
|
|
12
|
+
{ key: "package.json in dependencies", version: "7.7.3" },
|
|
13
|
+
]);
|
|
14
|
+
});
|
|
15
|
+
it("collects both importer range and transitive resolved versions", () => {
|
|
16
|
+
const dependents = collectPnpmDependents(lockFor("duplicated-babel-frame"), ["@babel/code-frame"]);
|
|
17
|
+
const codeFrame = dependents.get("@babel/code-frame");
|
|
18
|
+
ok(codeFrame);
|
|
19
|
+
// direct importer dependency carries the specifier range
|
|
20
|
+
ok(codeFrame.some((dependent) => dependent.key === "package.json in dependencies" &&
|
|
21
|
+
dependent.version === "7.26.2"));
|
|
22
|
+
// transitive dependents carry a resolved version
|
|
23
|
+
ok(codeFrame.some((dependent) => dependent.version === "7.29.7"));
|
|
24
|
+
ok(codeFrame.length >= 2);
|
|
25
|
+
});
|
|
26
|
+
// A `workspace:`, `catalog:`, `file:` or `link:` specifier names something
|
|
27
|
+
// other than the npm package sharing its key, and a dist-tag carries no
|
|
28
|
+
// comparable range. Recording them as ranges makes `semver.satisfies` answer
|
|
29
|
+
// "not satisfied" for every candidate, suppressing merges the real dependents
|
|
30
|
+
// allow.
|
|
31
|
+
it("leaves out importer specifiers that are not npm ranges", () => {
|
|
32
|
+
const dependents = collectPnpmDependents(lockFor("protocol-dependents"));
|
|
33
|
+
deepStrictEqual([...dependents.keys()].toSorted(), ["app", "semver"]);
|
|
34
|
+
// the importer declares `semver` as `latest`, so only the snapshot dependent
|
|
35
|
+
// of `app` remains
|
|
36
|
+
deepStrictEqual(dependents.get("semver"), [
|
|
37
|
+
{ key: "app@1.0.0", version: "7.8.1" },
|
|
38
|
+
]);
|
|
39
|
+
for (const packageName of [
|
|
40
|
+
"helper",
|
|
41
|
+
"picocolors",
|
|
42
|
+
"left-pad",
|
|
43
|
+
"kleur",
|
|
44
|
+
"chalk",
|
|
45
|
+
]) {
|
|
46
|
+
strictEqual(dependents.has(packageName), false);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
it("keeps the range an aliased importer specifier declares", () => {
|
|
50
|
+
const dependents = collectPnpmDependents(lockFor("mergeable-alias"), [
|
|
51
|
+
"printable-shell-command",
|
|
52
|
+
]);
|
|
53
|
+
deepStrictEqual((dependents.get("printable-shell-command") ?? [])
|
|
54
|
+
.filter((dependent) => dependent.key.startsWith("package.json"))
|
|
55
|
+
.map((dependent) => dependent.version)
|
|
56
|
+
.toSorted(), ["5.0.7", "^5.0.0"]);
|
|
57
|
+
});
|
|
58
|
+
// `aliased-swapped-names`: the importer declares `"@typescript/native":
|
|
59
|
+
// "npm:typescript@7.0.2"` and `"typescript":
|
|
60
|
+
// "npm:@typescript/typescript6@6.0.2"`, so each key names the other's package.
|
|
61
|
+
// Filing either under its key would put an exact pin on the wrong package.
|
|
62
|
+
it("files a swapped alias under the package its specifier targets", () => {
|
|
63
|
+
const dependents = collectPnpmDependents(lockFor("aliased-swapped-names"));
|
|
64
|
+
deepStrictEqual(dependents.get("typescript"), [
|
|
65
|
+
{ key: "package.json in devDependencies", version: "7.0.2" },
|
|
66
|
+
{ key: "tool@1.0.0", version: "5.9.3" },
|
|
67
|
+
]);
|
|
68
|
+
deepStrictEqual(dependents.get("@typescript/typescript6"), [
|
|
69
|
+
{ key: "package.json in devDependencies", version: "6.0.2" },
|
|
70
|
+
]);
|
|
71
|
+
});
|
|
72
|
+
it("restricts results to onlyPackageNames", () => {
|
|
73
|
+
const dependents = collectPnpmDependents(lockFor("duplicated-printable-shell-command"), ["printable-shell-command"]);
|
|
74
|
+
strictEqual([...dependents.keys()].every((name) => name === "printable-shell-command"), true);
|
|
75
|
+
ok(dependents.get("printable-shell-command"));
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=collectPnpmDependents.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectPnpmDependents.test.js","sourceRoot":"","sources":["../../src/helpers/collectPnpmDependents.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { readPnpmLock } from "../readPnpmLock.js";
|
|
2
|
+
import { buildPnpmPackagesMap, filterDuplicatesPnpmPackagesMap, } from "./buildPnpmPackagesMap.js";
|
|
3
|
+
import { parsePnpmLockPackages } from "./parsePnpmLockPackages.js";
|
|
4
|
+
export const readDuplicateSnapshot = (lockPath) => new Set(Object.values(filterDuplicatesPnpmPackagesMap(buildPnpmPackagesMap(parsePnpmLockPackages(readPnpmLock(lockPath))))).flatMap((resolutions) => resolutions.map((resolution) => resolution.resolution)));
|
|
5
|
+
//# sourceMappingURL=duplicateSnapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicateSnapshot.js","sourceRoot":"","sources":["../../src/helpers/duplicateSnapshot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAqB,EAAE,CAC3E,IAAI,GAAG,CACL,MAAM,CAAC,MAAM,CACX,+BAA+B,CAC7B,oBAAoB,CAAC,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpE,CACF,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CACxB,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CACvD,CACF,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip a pnpm peer-dependency suffix (everything from the first `(`).
|
|
3
|
+
*
|
|
4
|
+
* eg `@scope/name@1.2.3(eslint@9)(typescript@5)` -> `@scope/name@1.2.3`
|
|
5
|
+
*/
|
|
6
|
+
export const stripPeerSuffix = (id) => {
|
|
7
|
+
const parenPos = id.indexOf("(");
|
|
8
|
+
return parenPos === -1 ? id : id.slice(0, parenPos);
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Parse a pnpm package id (`name@version`, optionally peer-suffixed) into its
|
|
12
|
+
* name and version. Handles scoped names (`@scope/name@1.2.3`).
|
|
13
|
+
*/
|
|
14
|
+
export const parsePackageId = (id) => {
|
|
15
|
+
const base = stripPeerSuffix(id);
|
|
16
|
+
const atPos = base.lastIndexOf("@");
|
|
17
|
+
if (atPos <= 0) {
|
|
18
|
+
return { name: base, version: "" };
|
|
19
|
+
}
|
|
20
|
+
return { name: base.slice(0, atPos), version: base.slice(atPos + 1) };
|
|
21
|
+
};
|
|
22
|
+
const isNpmVersion = (version) => {
|
|
23
|
+
return /^\d/.test(version);
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a snapshot dependency entry. The value is either a resolved version
|
|
27
|
+
* (`1.2.3`, possibly peer-suffixed) for which the key is the real npm name, or
|
|
28
|
+
* an aliased `realName@version` form when the key is a local alias.
|
|
29
|
+
*/
|
|
30
|
+
export const resolveSnapshotDependency = (depName, depValue) => {
|
|
31
|
+
const stripped = stripPeerSuffix(depValue);
|
|
32
|
+
if (isNpmVersion(stripped)) {
|
|
33
|
+
return { name: depName, version: stripped };
|
|
34
|
+
}
|
|
35
|
+
const { name, version } = parsePackageId(stripped);
|
|
36
|
+
return { name: name || depName, version };
|
|
37
|
+
};
|
|
38
|
+
export const parsePnpmLockPackages = (lock) => {
|
|
39
|
+
const packages = new Map();
|
|
40
|
+
for (const resolution of Object.keys(lock.packages ?? {})) {
|
|
41
|
+
const { name, version } = parsePackageId(resolution);
|
|
42
|
+
packages.set(resolution, {
|
|
43
|
+
type: isNpmVersion(version) ? "npm" : "other",
|
|
44
|
+
name,
|
|
45
|
+
version,
|
|
46
|
+
resolution,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
const installationsByResolution = new Map();
|
|
50
|
+
for (const snapshotKey of Object.keys(lock.snapshots ?? {})) {
|
|
51
|
+
const baseId = stripPeerSuffix(snapshotKey);
|
|
52
|
+
const installations = installationsByResolution.get(baseId);
|
|
53
|
+
if (installations) {
|
|
54
|
+
installations.push(snapshotKey);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
installationsByResolution.set(baseId, [snapshotKey]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { packages, installationsByResolution };
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=parsePnpmLockPackages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsePnpmLockPackages.js","sourceRoot":"","sources":["../../src/helpers/parsePnpmLockPackages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { describe, it } from "bun:test";
|
|
2
|
+
import { deepStrictEqual, ok, strictEqual } from "node:assert/strict";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { readPnpmLock } from "../readPnpmLock.js";
|
|
5
|
+
import { parsePackageId, parsePnpmLockPackages, } from "./parsePnpmLockPackages.js";
|
|
6
|
+
const fixturesBase = (rel) => fileURLToPath(new URL(rel, import.meta.url));
|
|
7
|
+
const readFixture = (scenario) => readPnpmLock(fixturesBase(`../../test/fixtures/${scenario}/pnpm-lock.yaml`));
|
|
8
|
+
describe("parsePackageId", () => {
|
|
9
|
+
it("parses an unscoped id", () => {
|
|
10
|
+
deepStrictEqual(parsePackageId("semver@7.7.3"), {
|
|
11
|
+
name: "semver",
|
|
12
|
+
version: "7.7.3",
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
it("parses a scoped id", () => {
|
|
16
|
+
deepStrictEqual(parsePackageId("@babel/code-frame@7.26.2"), {
|
|
17
|
+
name: "@babel/code-frame",
|
|
18
|
+
version: "7.26.2",
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
it("strips the peer-dependency suffix", () => {
|
|
22
|
+
deepStrictEqual(parsePackageId("@typescript-eslint/utils@8.61.0(eslint@10.5.0)(typescript@6.0.3)"), { name: "@typescript-eslint/utils", version: "8.61.0" });
|
|
23
|
+
});
|
|
24
|
+
it("keeps a non-registry url as the version", () => {
|
|
25
|
+
const parsed = parsePackageId("zod@https://codeload.github.com/colinhacks/zod/tar.gz/ca42965df46b2f7e2747db29c40a26bcb32a51d5");
|
|
26
|
+
strictEqual(parsed.name, "zod");
|
|
27
|
+
strictEqual(parsed.version.startsWith("https://"), true);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe("parsePnpmLockPackages", () => {
|
|
31
|
+
it("parses the simple fixture (single npm package)", () => {
|
|
32
|
+
const { packages } = parsePnpmLockPackages(readFixture("simple"));
|
|
33
|
+
strictEqual(packages.size, 1);
|
|
34
|
+
const semver = packages.get("semver@7.7.3");
|
|
35
|
+
strictEqual(semver?.type, "npm");
|
|
36
|
+
strictEqual(semver.name, "semver");
|
|
37
|
+
strictEqual(semver.version, "7.7.3");
|
|
38
|
+
});
|
|
39
|
+
it("parses both duplicated @babel/code-frame versions as npm", () => {
|
|
40
|
+
const { packages } = parsePnpmLockPackages(readFixture("duplicated-babel-frame"));
|
|
41
|
+
const codeFrames = [...packages.values()].filter((pkg) => pkg.name === "@babel/code-frame");
|
|
42
|
+
strictEqual(codeFrames.length, 2);
|
|
43
|
+
ok(codeFrames.every((pkg) => pkg.type === "npm"));
|
|
44
|
+
const versions = new Set(codeFrames.map((pkg) => pkg.version));
|
|
45
|
+
ok(versions.has("7.26.2"));
|
|
46
|
+
ok(versions.size === 2);
|
|
47
|
+
});
|
|
48
|
+
it("classifies non-registry resolutions as other, registry tarballs as npm", () => {
|
|
49
|
+
const { packages } = parsePnpmLockPackages(readFixture("non-npm"));
|
|
50
|
+
const byName = new Map([...packages.values()].map((pkg) => [pkg.name, pkg]));
|
|
51
|
+
strictEqual(byName.get("react")?.type, "npm");
|
|
52
|
+
strictEqual(byName.get("zod")?.type, "other");
|
|
53
|
+
});
|
|
54
|
+
it("groups peer-context snapshots into installations", () => {
|
|
55
|
+
const { installationsByResolution } = parsePnpmLockPackages(readFixture("duplicated-typescript-eslint"));
|
|
56
|
+
const utils = installationsByResolution.get("@typescript-eslint/utils@8.61.0");
|
|
57
|
+
ok(utils);
|
|
58
|
+
ok(utils.length > 0);
|
|
59
|
+
ok(utils.every((key) => key.startsWith("@typescript-eslint/utils@8.61.0")));
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=parsePnpmLockPackages.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsePnpmLockPackages.test.js","sourceRoot":"","sources":["../../src/helpers/parsePnpmLockPackages.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CACnC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/C,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAE,EAAE,CACvC,YAAY,CAAC,YAAY,CAAC,uBAAuB,QAAQ,iBAAiB,CAAC,CAAC,CAAC;AAE/E,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;YAC9C,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,eAAe,CAAC,cAAc,CAAC,0BAA0B,CAAC,EAAE;YAC1D,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,eAAe,CACb,cAAc,CACZ,kEAAkE,CACnE,EACD,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,QAAQ,EAAE,CACxD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,cAAc,CAC3B,gGAAgG,CACjG,CAAC;QACF,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClE,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5C,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CACxC,WAAW,CAAC,wBAAwB,CAAC,CACtC,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC9C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,mBAAmB,CAC1C,CAAC;QACF,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3B,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,IAAI,GAAG,CACpB,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CACrD,CAAC;QACF,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9C,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,yBAAyB,EAAE,GAAG,qBAAqB,CACzD,WAAW,CAAC,8BAA8B,CAAC,CAC5C,CAAC;QACF,MAAM,KAAK,GAAG,yBAAyB,CAAC,GAAG,CACzC,iCAAiC,CAClC,CAAC;QACF,EAAE,CAAC,KAAK,CAAC,CAAC;QACV,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpmProtocol.js","sourceRoot":"","sources":["../../src/helpers/pnpmProtocol.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import semver from "semver";
|
|
2
|
+
import { runPnpm } from "./runPnpm.js";
|
|
3
|
+
/**
|
|
4
|
+
* Convergence overrides (`overrides: { "pkg@": "1.2.3" }`, empty range selector)
|
|
5
|
+
* landed in pnpm 11.13.0. They rewrite a dependency edge only when the declared
|
|
6
|
+
* range accepts the exact version, which is what lets a cluster converge without
|
|
7
|
+
* forcing the members a third-party range legitimately pins elsewhere.
|
|
8
|
+
*/
|
|
9
|
+
export const convergenceOverridesMinVersion = "11.13.0";
|
|
10
|
+
export const readPnpmVersion = (run = runPnpm) => {
|
|
11
|
+
const result = run(["--version"], { stdio: "pipe" });
|
|
12
|
+
if (result.status !== 0)
|
|
13
|
+
return null;
|
|
14
|
+
// pnpm prints its warnings (a `workspaces` field in package.json, an update
|
|
15
|
+
// notice) into the same captured output, so the version is the last line that
|
|
16
|
+
// is one, not the last line.
|
|
17
|
+
return (result.output
|
|
18
|
+
.split("\n")
|
|
19
|
+
.map((line) => line.trim())
|
|
20
|
+
.findLast((line) => semver.valid(line) !== null) ?? null);
|
|
21
|
+
};
|
|
22
|
+
export const supportsConvergenceOverrides = (version) => semver.gte(version, convergenceOverridesMinVersion);
|
|
23
|
+
//# sourceMappingURL=pnpmVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpmVersion.js","sourceRoot":"","sources":["../../src/helpers/pnpmVersion.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,SAAS,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,GAAe,OAAO,EAAiB,EAAE;IAC1E,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,4EAA4E;IAC5E,8EAA8E;IAC9E,6BAA6B;IAC7B,OAAO,CACL,MAAM,CAAC,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAC3D,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,OAAe,EAAW,EAAE,CACvE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Scalar, parseDocument } from "yaml";
|
|
2
|
+
/**
|
|
3
|
+
* A convergence override (pnpm >= 11.13.0) is an override key with an empty
|
|
4
|
+
* range selector. It repoints a dependency edge only when the edge's declared
|
|
5
|
+
* range accepts the exact version, so the members a third-party range
|
|
6
|
+
* legitimately pins elsewhere keep their own resolution instead of being forced.
|
|
7
|
+
* The plain key is the unconditional one: every requester gets the version.
|
|
8
|
+
*/
|
|
9
|
+
export const overrideKey = (packageName, convergence) => (convergence ? `${packageName}@` : packageName);
|
|
10
|
+
// `yaml` writes `commentBefore` straight after the `#`, so the leading space
|
|
11
|
+
// that makes it read as prose has to be part of every line.
|
|
12
|
+
const spaced = (comment) => comment
|
|
13
|
+
.split("\n")
|
|
14
|
+
.map((line) => (line.startsWith(" ") ? line : ` ${line}`))
|
|
15
|
+
.join("\n");
|
|
16
|
+
const quoted = (value) => {
|
|
17
|
+
const scalar = new Scalar(value);
|
|
18
|
+
scalar.type = Scalar.QUOTE_DOUBLE;
|
|
19
|
+
return scalar;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Add overrides to a `pnpm-workspace.yaml`, editing the document rather than
|
|
23
|
+
* reserializing it: the user's comments, key order and formatting have to
|
|
24
|
+
* survive. Pass `undefined` for a file that does not exist yet.
|
|
25
|
+
*
|
|
26
|
+
* `comment` is attached above the first entry added, not above the `overrides`
|
|
27
|
+
* key, so an existing block and whatever the user wrote about it stay untouched.
|
|
28
|
+
*/
|
|
29
|
+
export const addOverrides = (content, overrides, { convergence = true, comment } = {}) => {
|
|
30
|
+
const doc = parseDocument(content ?? "");
|
|
31
|
+
let isFirst = true;
|
|
32
|
+
for (const [packageName, version] of overrides) {
|
|
33
|
+
const key = quoted(overrideKey(packageName, convergence));
|
|
34
|
+
if (isFirst && comment !== undefined) {
|
|
35
|
+
key.commentBefore = spaced(comment);
|
|
36
|
+
}
|
|
37
|
+
doc.setIn(["overrides", key], quoted(version));
|
|
38
|
+
isFirst = false;
|
|
39
|
+
}
|
|
40
|
+
return doc.toString();
|
|
41
|
+
};
|
|
42
|
+
export const readConvergenceOverrides = (content) => {
|
|
43
|
+
const parsed = parseDocument(content).toJS();
|
|
44
|
+
return new Map(Object.entries(parsed?.overrides ?? {}).flatMap(([key, value]) => key.endsWith("@") && typeof value === "string"
|
|
45
|
+
? [[key.slice(0, -1), value]]
|
|
46
|
+
: []));
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=pnpmWorkspaceYaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpmWorkspaceYaml.js","sourceRoot":"","sources":["../../src/helpers/pnpmWorkspaceYaml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,WAAmB,EACnB,WAAoB,EACZ,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAE7D,6EAA6E;AAC7E,4DAA4D;AAC5D,MAAM,MAAM,GAAG,CAAC,OAAe,EAAU,EAAE,CACzC,OAAO;KACJ,KAAK,CAAC,IAAI,CAAC;KACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;KACzD,IAAI,CAAC,IAAI,CAAC,CAAC;AAEhB,MAAM,MAAM,GAAG,CAAC,KAAa,EAAkB,EAAE;IAC/C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAQF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAA2B,EAC3B,SAA8B,EAC9B,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,EAAE,GAAwB,EAAE,EACjD,EAAE;IACV,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,SAAS,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACrC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAAe,EACM,EAAE;IACvB,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAElC,CAAC;IAET,OAAO,IAAI,GAAG,CACZ,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAC/D,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC5C,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAqB,CAAC;QACjD,CAAC,CAAC,EAAE,CACP,CACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { describe, it } from "bun:test";
|
|
2
|
+
import { deepStrictEqual, strictEqual } from "node:assert/strict";
|
|
3
|
+
import { addOverrides, overrideKey, readConvergenceOverrides, } from "./pnpmWorkspaceYaml.js";
|
|
4
|
+
const overrides = (entries) => new Map(entries);
|
|
5
|
+
describe("pnpmWorkspaceYaml", () => {
|
|
6
|
+
it("uses the empty range selector pnpm reads as a convergence override", () => {
|
|
7
|
+
strictEqual(overrideKey("metro-config", true), "metro-config@");
|
|
8
|
+
strictEqual(overrideKey("@react-native/metro-config", true), "@react-native/metro-config@");
|
|
9
|
+
strictEqual(overrideKey("metro-config", false), "metro-config");
|
|
10
|
+
});
|
|
11
|
+
it("creates the file content when there is none", () => {
|
|
12
|
+
strictEqual(addOverrides(undefined, overrides([["metro-config", "0.87.0"]])), 'overrides:\n "metro-config@": "0.87.0"\n');
|
|
13
|
+
});
|
|
14
|
+
it("keeps comments, sibling keys and formatting", () => {
|
|
15
|
+
const content = [
|
|
16
|
+
"# why this repo pins its resolution mode",
|
|
17
|
+
"resolutionMode: time-based # inline",
|
|
18
|
+
"",
|
|
19
|
+
"packages:",
|
|
20
|
+
" - packages/*",
|
|
21
|
+
"",
|
|
22
|
+
"# trailing note",
|
|
23
|
+
"",
|
|
24
|
+
].join("\n");
|
|
25
|
+
strictEqual(addOverrides(content, overrides([["metro", "0.84.5"]])), [
|
|
26
|
+
"# why this repo pins its resolution mode",
|
|
27
|
+
"resolutionMode: time-based # inline",
|
|
28
|
+
"",
|
|
29
|
+
"packages:",
|
|
30
|
+
" - packages/*",
|
|
31
|
+
"overrides:",
|
|
32
|
+
' "metro@": "0.84.5"',
|
|
33
|
+
"",
|
|
34
|
+
"# trailing note",
|
|
35
|
+
"",
|
|
36
|
+
].join("\n"));
|
|
37
|
+
});
|
|
38
|
+
it("adds to an existing overrides block without touching its entries", () => {
|
|
39
|
+
const content = [
|
|
40
|
+
"overrides:",
|
|
41
|
+
" # a decision taken elsewhere",
|
|
42
|
+
' "foo@": "1.0.0"',
|
|
43
|
+
"resolutionMode: time-based",
|
|
44
|
+
"",
|
|
45
|
+
].join("\n");
|
|
46
|
+
strictEqual(addOverrides(content, overrides([["bar", "2.0.0"]])), [
|
|
47
|
+
"overrides:",
|
|
48
|
+
" # a decision taken elsewhere",
|
|
49
|
+
' "foo@": "1.0.0"',
|
|
50
|
+
' "bar@": "2.0.0"',
|
|
51
|
+
"resolutionMode: time-based",
|
|
52
|
+
"",
|
|
53
|
+
].join("\n"));
|
|
54
|
+
});
|
|
55
|
+
it("quotes the scoped keys and the versions yaml would read as numbers", () => {
|
|
56
|
+
strictEqual(addOverrides(undefined, overrides([
|
|
57
|
+
["@react-native/metro-config", "0.87.0"],
|
|
58
|
+
["single-digit", "4"],
|
|
59
|
+
])), [
|
|
60
|
+
"overrides:",
|
|
61
|
+
' "@react-native/metro-config@": "0.87.0"',
|
|
62
|
+
' "single-digit@": "4"',
|
|
63
|
+
"",
|
|
64
|
+
].join("\n"));
|
|
65
|
+
});
|
|
66
|
+
it("puts the comment above the first entry it adds, not above the block", () => {
|
|
67
|
+
strictEqual(addOverrides('overrides:\n # a decision taken elsewhere\n "foo@": "1.0.0"\n', overrides([
|
|
68
|
+
["leaf", "2.0.0"],
|
|
69
|
+
["other", "1.0.0"],
|
|
70
|
+
]), { comment: "Added by pnpm-dedup.\nsee https://example.test/issues" }), [
|
|
71
|
+
"overrides:",
|
|
72
|
+
" # a decision taken elsewhere",
|
|
73
|
+
' "foo@": "1.0.0"',
|
|
74
|
+
" # Added by pnpm-dedup.",
|
|
75
|
+
" # see https://example.test/issues",
|
|
76
|
+
' "leaf@": "2.0.0"',
|
|
77
|
+
' "other@": "1.0.0"',
|
|
78
|
+
"",
|
|
79
|
+
].join("\n"));
|
|
80
|
+
});
|
|
81
|
+
it("writes plain keys when convergence is disabled", () => {
|
|
82
|
+
strictEqual(addOverrides(undefined, overrides([["metro", "0.84.5"]]), {
|
|
83
|
+
convergence: false,
|
|
84
|
+
}), 'overrides:\n "metro": "0.84.5"\n');
|
|
85
|
+
});
|
|
86
|
+
it("reads back only the convergence overrides", () => {
|
|
87
|
+
const content = addOverrides('overrides:\n "plain-override": "1.0.0"\n', overrides([["metro", "0.84.5"]]));
|
|
88
|
+
deepStrictEqual([...readConvergenceOverrides(content)], [["metro", "0.84.5"]]);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=pnpmWorkspaceYaml.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnpmWorkspaceYaml.test.js","sourceRoot":"","sources":["../../src/helpers/pnpmWorkspaceYaml.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { resolveProjectDir } from "pm-dedup-core";
|
|
3
|
+
const lockfileName = "pnpm-lock.yaml";
|
|
4
|
+
export const lockPathOf = (projectDir) => join(projectDir, lockfileName);
|
|
5
|
+
// The project the run operates on, found by walking up from the working
|
|
6
|
+
// directory, so the bins work from any subdirectory of it. Null when no
|
|
7
|
+
// pnpm-lock.yaml was found: the reason is printed and the exit code set, as
|
|
8
|
+
// `parseBinArgs` does.
|
|
9
|
+
export const resolvePnpmProjectDir = () => resolveProjectDir({ lockfileName });
|
|
10
|
+
//# sourceMappingURL=projectDir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectDir.js","sourceRoot":"","sources":["../../src/helpers/projectDir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAU,EAAE,CACvD,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAEjC,wEAAwE;AACxE,wEAAwE;AACxE,4EAA4E;AAC5E,uBAAuB;AACvB,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAkB,EAAE,CACvD,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC"}
|