Skip to content

Commit 7f3510f

Browse files
committed
Use editablePkgJson.content instead of plucking it.
1 parent 69093e9 commit 7f3510f

File tree

9 files changed

+89
-72
lines changed

9 files changed

+89
-72
lines changed

.config/rollup.dist.config.mjs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ function resetDependencies(deps) {
240240

241241
async function updateDepStats(depStats) {
242242
const editablePkgJson = await readPackageJson(rootPath, { editable: true })
243-
const { content: pkgJson } = editablePkgJson
243+
244244
const oldDepStats = existsSync(depStatsPath)
245245
? await readJson(depStatsPath)
246246
: undefined
@@ -250,7 +250,7 @@ async function updateDepStats(depStats) {
250250
// preserves dependencies that are indirectly referenced through spawned
251251
// processes and not directly imported.
252252
Object.fromEntries(
253-
Object.entries(pkgJson.dependencies).filter(
253+
Object.entries(editablePkgJson.content.dependencies).filter(
254254
({ 0: key }) => !oldDepStats?.transitives?.[key]
255255
)
256256
)
@@ -259,9 +259,9 @@ async function updateDepStats(depStats) {
259259
delete depStats.dependencies[SENTRY_NODE]
260260
// Remove transitives from dependencies.
261261
for (const key of Object.keys(oldDepStats?.transitives ?? {})) {
262-
if (pkgJson.dependencies[key]) {
263-
depStats.transitives[key] = pkgJson.dependencies[key]
264-
depStats.external[key] = pkgJson.dependencies[key]
262+
if (editablePkgJson.content.dependencies[key]) {
263+
depStats.transitives[key] = editablePkgJson.content.dependencies[key]
264+
depStats.external[key] = editablePkgJson.content.dependencies[key]
265265
delete depStats.dependencies[key]
266266
}
267267
}
@@ -289,9 +289,8 @@ async function updateDepStats(depStats) {
289289

290290
async function updatePackageJson() {
291291
const editablePkgJson = await readPackageJson(rootPath, { editable: true })
292-
const { content: pkgJson } = editablePkgJson
293-
const bin = resetBin(pkgJson.bin)
294-
const dependencies = resetDependencies(pkgJson.dependencies)
292+
const bin = resetBin(editablePkgJson.content.bin)
293+
const dependencies = resetDependencies(editablePkgJson.content.dependencies)
295294
editablePkgJson.update({
296295
name: SOCKET_CLI_PACKAGE_NAME,
297296
description: SOCKET_DESCRIPTION,

src/commands/fix/npm-fix.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ export async function npmFix(
8484
}
8585

8686
const editablePkgJson = await readPackageJson(cwd, { editable: true })
87-
const { content: pkgJson } = editablePkgJson
8887

8988
await arb.buildIdealTree()
9089

@@ -138,14 +137,17 @@ export async function npmFix(
138137
targetVersion = node.package.version!
139138
const fixSpec = `${name}@^${targetVersion}`
140139
const revertData = {
141-
...(pkgJson.dependencies
142-
? { dependencies: pkgJson.dependencies }
140+
...(editablePkgJson.content.dependencies
141+
? { dependencies: editablePkgJson.content.dependencies }
143142
: undefined),
144-
...(pkgJson.optionalDependencies
145-
? { optionalDependencies: pkgJson.optionalDependencies }
143+
...(editablePkgJson.content.optionalDependencies
144+
? {
145+
optionalDependencies:
146+
editablePkgJson.content.optionalDependencies
147+
}
146148
: undefined),
147-
...(pkgJson.peerDependencies
148-
? { peerDependencies: pkgJson.peerDependencies }
149+
...(editablePkgJson.content.peerDependencies
150+
? { peerDependencies: editablePkgJson.content.peerDependencies }
149151
: undefined)
150152
} as PackageJson
151153

@@ -156,6 +158,7 @@ export async function npmFix(
156158
editablePkgJson,
157159
arb.idealTree!,
158160
node,
161+
targetVersion,
159162
rangeStyle
160163
)
161164
// eslint-disable-next-line no-await-in-loop

src/commands/fix/pnpm-fix.ts

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
} from '@socketsecurity/registry/lib/packages'
1212

1313
import { enableAutoMerge, openGitHubPullRequest } from './open-pr'
14+
import { applyRange } from './shared'
1415
import constants from '../../constants'
1516
import {
1617
SAFE_ARBORIST_REIFY_OPTIONS_OVERRIDES,
@@ -91,7 +92,6 @@ export async function pnpmFix(
9192
spinner?.start()
9293

9394
const editablePkgJson = await readPackageJson(cwd, { editable: true })
94-
const { content: pkgJson } = editablePkgJson
9595

9696
let actualTree = await getActualTree(cwd)
9797

@@ -139,16 +139,22 @@ export async function pnpmFix(
139139
let installed = false
140140
let saved = false
141141
if (targetVersion && targetPackument) {
142-
const oldPnpm = pkgJson[PNPM] as StringKeyValueObject | undefined
143-
const pnpmKeyCount = oldPnpm ? Object.keys(oldPnpm).length : 0
142+
const oldPnpm = editablePkgJson.content[PNPM] as
143+
| StringKeyValueObject
144+
| undefined
145+
const oldPnpmKeyCount = oldPnpm ? Object.keys(oldPnpm).length : 0
144146
const oldOverrides = (oldPnpm as StringKeyValueObject)?.[OVERRIDES] as
145147
| Record<string, string>
146148
| undefined
147-
const overridesCount = oldOverrides
149+
const oldOverridesCount = oldOverrides
148150
? Object.keys(oldOverrides).length
149151
: 0
150152
const overrideKey = `${node.name}@${vulnerableVersionRange}`
151-
const overrideRange = `^${targetVersion}`
153+
const overrideRange = applyRange(
154+
oldOverrides?.[overrideKey] ?? targetVersion,
155+
targetVersion,
156+
rangeStyle
157+
)
152158
const fixSpec = `${name}@${overrideRange}`
153159
const updateData = {
154160
[PNPM]: {
@@ -160,26 +166,29 @@ export async function pnpmFix(
160166
}
161167
}
162168
const revertData = {
163-
[PNPM]: pnpmKeyCount
169+
[PNPM]: oldPnpmKeyCount
164170
? {
165171
...oldPnpm,
166172
[OVERRIDES]:
167-
overridesCount === 1
173+
oldOverridesCount === 1
168174
? undefined
169175
: {
170176
[overrideKey]: undefined,
171177
...oldOverrides
172178
}
173179
}
174180
: undefined,
175-
...(pkgJson.dependencies
176-
? { dependencies: pkgJson.dependencies }
181+
...(editablePkgJson.content.dependencies
182+
? { dependencies: editablePkgJson.content.dependencies }
177183
: undefined),
178-
...(pkgJson.optionalDependencies
179-
? { optionalDependencies: pkgJson.optionalDependencies }
184+
...(editablePkgJson.content.optionalDependencies
185+
? {
186+
optionalDependencies:
187+
editablePkgJson.content.optionalDependencies
188+
}
180189
: undefined),
181-
...(pkgJson.peerDependencies
182-
? { peerDependencies: pkgJson.peerDependencies }
190+
...(editablePkgJson.content.peerDependencies
191+
? { peerDependencies: editablePkgJson.content.peerDependencies }
183192
: undefined)
184193
} as PackageJson
185194

@@ -191,6 +200,7 @@ export async function pnpmFix(
191200
editablePkgJson,
192201
actualTree,
193202
node,
203+
targetVersion,
194204
rangeStyle
195205
)
196206
// eslint-disable-next-line no-await-in-loop

src/commands/optimize/add-overrides.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,12 @@ export async function addOverrides(
8080
if (editablePkgJson === undefined) {
8181
editablePkgJson = await readPackageJson(pkgPath, { editable: true })
8282
}
83-
const { content: pkgJson } = editablePkgJson
84-
8583
const workspaceName = path.relative(rootPath, pkgPath)
86-
const workspaceGlobs = await getWorkspaceGlobs(agent, pkgPath, pkgJson)
84+
const workspaceGlobs = await getWorkspaceGlobs(
85+
agent,
86+
pkgPath,
87+
editablePkgJson
88+
)
8789
const isRoot = pkgPath === rootPath
8890
const isLockScanned = isRoot && !prod
8991
const isWorkspace = !!workspaceGlobs
@@ -104,12 +106,12 @@ export async function addOverrides(
104106
}
105107

106108
const overridesDataObjects = [] as GetOverridesResult[]
107-
if (pkgJson['private'] || isWorkspace) {
108-
overridesDataObjects.push(overridesDataByAgent.get(agent)!(pkgJson))
109+
if (editablePkgJson.content['private'] || isWorkspace) {
110+
overridesDataObjects.push(overridesDataByAgent.get(agent)!(editablePkgJson))
109111
} else {
110112
overridesDataObjects.push(
111-
overridesDataByAgent.get(NPM)!(pkgJson),
112-
overridesDataByAgent.get(YARN_CLASSIC)!(pkgJson)
113+
overridesDataByAgent.get(NPM)!(editablePkgJson),
114+
overridesDataByAgent.get(YARN_CLASSIC)!(editablePkgJson)
113115
)
114116
}
115117

@@ -118,7 +120,7 @@ export async function addOverrides(
118120
)
119121

120122
const depAliasMap = new Map<string, string>()
121-
const depEntries = getDependencyEntries(pkgJson)
123+
const depEntries = getDependencyEntries(editablePkgJson)
122124

123125
const manifestEntries = manifestNpmOverrides.filter(({ 1: data }) =>
124126
semver.satisfies(

src/commands/optimize/get-dependency-entries.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
import { readPackageJson } from '@socketsecurity/registry/lib/packages'
1+
import type { EditablePackageJson } from '@socketsecurity/registry/lib/packages'
22

3-
type PackageJson = Awaited<ReturnType<typeof readPackageJson>>
4-
5-
export function getDependencyEntries(pkgJson: PackageJson) {
3+
export function getDependencyEntries(editablePkgJson: EditablePackageJson) {
64
const {
75
dependencies,
86
devDependencies,
97
optionalDependencies,
108
peerDependencies
11-
} = pkgJson
9+
} = editablePkgJson.content
1210
return [
1311
[
1412
'dependencies',
Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import constants from '../../constants'
22

3-
import type { Overrides } from './types'
3+
import type { NpmOverrides, Overrides, PnpmOrYarnOverrides } from './types'
44
import type { Agent } from '../../utils/package-environment'
5-
import type { PackageJson } from '@socketsecurity/registry/lib/packages'
5+
import type { EditablePackageJson } from '@socketsecurity/registry/lib/packages'
66

77
const {
88
BUN,
@@ -15,45 +15,52 @@ const {
1515
YARN_CLASSIC
1616
} = constants
1717

18-
function getOverridesDataBun(pkgJson: PackageJson) {
19-
const overrides = (pkgJson as any)?.[RESOLUTIONS] ?? {}
18+
function getOverridesDataBun(editablePkgJson: EditablePackageJson) {
19+
const overrides =
20+
editablePkgJson.content?.[RESOLUTIONS] ?? ({} as PnpmOrYarnOverrides)
2021
return { type: YARN_BERRY, overrides }
2122
}
2223

2324
// npm overrides documentation:
2425
// https://docs.npmjs.com/cli/v10/configuring-npm/package-json#overrides
25-
function getOverridesDataNpm(pkgJson: PackageJson) {
26-
const overrides = (pkgJson as any)?.[OVERRIDES] ?? {}
26+
function getOverridesDataNpm(editablePkgJson: EditablePackageJson) {
27+
const overrides = editablePkgJson.content?.[OVERRIDES] ?? ({} as NpmOverrides)
2728
return { type: NPM, overrides }
2829
}
2930

3031
// pnpm overrides documentation:
3132
// https://pnpm.io/package_json#pnpmoverrides
32-
function getOverridesDataPnpm(pkgJson: PackageJson) {
33-
const overrides = (pkgJson as any)?.pnpm?.[OVERRIDES] ?? {}
33+
function getOverridesDataPnpm(editablePkgJson: EditablePackageJson) {
34+
const overrides =
35+
(editablePkgJson.content as any)?.[PNPM]?.[OVERRIDES] ??
36+
({} as PnpmOrYarnOverrides)
3437
return { type: PNPM, overrides }
3538
}
3639

37-
function getOverridesDataVlt(pkgJson: PackageJson) {
38-
const overrides = (pkgJson as any)?.[OVERRIDES] ?? {}
40+
function getOverridesDataVlt(editablePkgJson: EditablePackageJson) {
41+
const overrides = editablePkgJson.content?.[OVERRIDES] ?? ({} as NpmOverrides)
3942
return { type: VLT, overrides }
4043
}
4144

4245
// Yarn resolutions documentation:
4346
// https://yarnpkg.com/configuration/manifest#resolutions
44-
function getOverridesDataYarn(pkgJson: PackageJson) {
45-
const overrides = (pkgJson as any)?.[RESOLUTIONS] ?? {}
47+
function getOverridesDataYarn(editablePkgJson: EditablePackageJson) {
48+
const overrides =
49+
editablePkgJson.content?.[RESOLUTIONS] ?? ({} as PnpmOrYarnOverrides)
4650
return { type: YARN_BERRY, overrides }
4751
}
4852

4953
// Yarn resolutions documentation:
5054
// https://classic.yarnpkg.com/en/docs/selective-version-resolutions
51-
function getOverridesDataClassic(pkgJson: PackageJson) {
52-
const overrides = (pkgJson as any)?.[RESOLUTIONS] ?? {}
55+
function getOverridesDataYarnClassic(editablePkgJson: EditablePackageJson) {
56+
const overrides =
57+
editablePkgJson.content?.[RESOLUTIONS] ?? ({} as PnpmOrYarnOverrides)
5358
return { type: YARN_CLASSIC, overrides }
5459
}
5560

56-
export type GetOverrides = (pkgJson: PackageJson) => GetOverridesResult
61+
export type GetOverrides = (
62+
editablePkgJson: EditablePackageJson
63+
) => GetOverridesResult
5764

5865
export type GetOverridesResult = { type: Agent; overrides: Overrides }
5966

@@ -63,5 +70,5 @@ export const overridesDataByAgent = new Map<Agent, GetOverrides>([
6370
[PNPM, getOverridesDataPnpm],
6471
[VLT, getOverridesDataVlt],
6572
[YARN_BERRY, getOverridesDataYarn],
66-
[YARN_CLASSIC, getOverridesDataClassic]
67-
])
73+
[YARN_CLASSIC, getOverridesDataYarnClassic]
74+
] as ReadonlyArray<[Agent, GetOverrides]>)

src/commands/optimize/get-workspace-globs.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@ import path from 'node:path'
22

33
import { parse as yamlParse } from 'yaml'
44

5-
import { readPackageJson } from '@socketsecurity/registry/lib/packages'
65
import { isNonEmptyString } from '@socketsecurity/registry/lib/strings'
76

87
import constants from '../../constants'
98
import { safeReadFile } from '../../utils/fs'
109

1110
import type { Agent } from '../../utils/package-environment'
12-
13-
type PackageJson = Awaited<ReturnType<typeof readPackageJson>>
11+
import type { EditablePackageJson } from '@socketsecurity/registry/lib/packages'
1412

1513
const { PNPM } = constants
1614

@@ -19,7 +17,7 @@ const PNPM_WORKSPACE = `${PNPM}-workspace`
1917
export async function getWorkspaceGlobs(
2018
agent: Agent,
2119
pkgPath: string,
22-
pkgJson: PackageJson
20+
editablePkgJson: EditablePackageJson
2321
): Promise<string[] | undefined> {
2422
let workspacePatterns
2523
if (agent === PNPM) {
@@ -39,7 +37,7 @@ export async function getWorkspaceGlobs(
3937
}
4038
}
4139
} else {
42-
workspacePatterns = pkgJson['workspaces']
40+
workspacePatterns = editablePkgJson.content['workspaces']
4341
}
4442
return Array.isArray(workspacePatterns)
4543
? workspacePatterns

src/commands/optimize/update-manifest-by-agent.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ function updatePkgJsonField(
6060
field: string,
6161
value: any
6262
) {
63-
const { content: pkgJson } = editablePkgJson
64-
const oldValue = pkgJson[field]
63+
const oldValue = editablePkgJson.content[field]
6564
if (oldValue) {
6665
// The field already exists so we simply update the field value.
6766
if (field === PNPM) {
@@ -86,14 +85,14 @@ function updatePkgJsonField(
8685
overrides: undefined
8786
}
8887
}
89-
: { [field]: undefined }) as typeof pkgJson
88+
: { [field]: undefined }) as typeof editablePkgJson.content
9089
)
9190
}
9291
} else if (field === OVERRIDES || field === RESOLUTIONS) {
9392
// Properties with undefined values are omitted when saved as JSON.
9493
editablePkgJson.update({
9594
[field]: hasKeys(value) ? value : undefined
96-
} as typeof pkgJson)
95+
} as typeof editablePkgJson.content)
9796
} else {
9897
editablePkgJson.update({ [field]: value })
9998
}
@@ -108,7 +107,7 @@ function updatePkgJsonField(
108107
// Since the field doesn't exist we want to insert it into the package.json
109108
// in a place that makes sense, e.g. close to the "dependencies" field. If
110109
// we can't find a place to insert the field we'll add it to the bottom.
111-
const entries = Object.entries(pkgJson)
110+
const entries = Object.entries(editablePkgJson.content)
112111
let insertIndex = -1
113112
let isPlacingHigher = false
114113
if (field === OVERRIDES) {

0 commit comments

Comments
 (0)