Skip to content

Commit 5fb6fe2

Browse files
committed
Detect private and workspace packages
1 parent e8d0318 commit 5fb6fe2

File tree

2 files changed

+57
-26
lines changed

2 files changed

+57
-26
lines changed

src/commands/optimize.ts

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,13 @@ const modifyManifestByAgent: Record<Agent, ModifyManifest> = (() => {
234234

235235
type AddOverridesConfig = {
236236
agent: Agent
237+
isPrivate: boolean
238+
isWorkspace: boolean
237239
lockSrc: string
238240
lockIncludes: LockIncludes
239-
pkgPath: string
240-
pkgJson: PackageJSONObject
241+
pkgJsonPath: string
241242
pkgJsonStr: string
243+
pkgJson: PackageJSONObject
242244
overrides?: Overrides | undefined
243245
}
244246

@@ -250,9 +252,11 @@ type AddOverridesState = {
250252
async function addOverrides(
251253
{
252254
agent,
255+
isPrivate,
256+
isWorkspace,
253257
lockSrc,
254258
lockIncludes,
255-
pkgPath,
259+
pkgJsonPath,
256260
pkgJson,
257261
overrides
258262
}: AddOverridesConfig,
@@ -288,7 +292,9 @@ async function addOverrides(
288292
null,
289293
2
290294
)
291-
await writeFileUtf8(pkgPath, aoState.output)
295+
if (!isPrivate && !isWorkspace) {
296+
}
297+
await writeFileUtf8(pkgJsonPath, aoState.output)
292298
}
293299
return aoState
294300
}
@@ -303,15 +309,23 @@ export const optimize: CliSubcommand = {
303309
importMeta
304310
)
305311
if (commandContext) {
306-
const { agent, lockSrc, pkgJson, pkgPath, pkgJsonStr, supported } =
307-
await detect({
308-
cwd: process.cwd(),
309-
onUnknown: (pkgManager: string | undefined) => {
310-
console.log(
311-
`⚠️ Unknown package manager${pkgManager ? ` ${pkgManager}` : ''}: Defaulting to npm`
312-
)
313-
}
314-
})
312+
const {
313+
agent,
314+
isPrivate,
315+
isWorkspace,
316+
lockSrc,
317+
pkgJsonPath,
318+
pkgJsonStr,
319+
pkgJson,
320+
supported
321+
} = await detect({
322+
cwd: process.cwd(),
323+
onUnknown(pkgManager: string | undefined) {
324+
console.log(
325+
`⚠️ Unknown package manager${pkgManager ? ` ${pkgManager}` : ''}: Defaulting to npm`
326+
)
327+
}
328+
})
315329
if (!supported) {
316330
console.log('✘ The engines.node range is not supported.')
317331
return
@@ -355,10 +369,12 @@ export const optimize: CliSubcommand = {
355369
await addOverrides(
356370
<AddOverridesConfig>{
357371
__proto__: null,
372+
isPrivate,
373+
isWorkspace,
358374
lockSrc,
359-
pkgPath,
360-
pkgJson,
375+
pkgJsonPath,
361376
pkgJsonStr,
377+
pkgJson,
362378
...config
363379
},
364380
aoState

src/utils/package-manager-detector.ts

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,12 @@ export type DetectOptions = {
5353
export type DetectResult = Readonly<{
5454
agent: AgentPlusBun
5555
agentVersion: string | undefined
56+
isPrivate: boolean
57+
isWorkspace: boolean
5658
lockPath: string | undefined
5759
lockSrc: string | undefined
5860
pkgJson: PackageJSONObject | undefined
59-
pkgPath: string | undefined
61+
pkgJsonPath: string | undefined
6062
pkgJsonStr: string | undefined
6163
supported: boolean
6264
targets: {
@@ -104,14 +106,14 @@ export async function detect({
104106
const lockPath = await findUp(Object.keys(LOCKS), { cwd })
105107
const isHiddenLockFile = lockPath?.endsWith('.package-lock.json') ?? false
106108

107-
const pkgPath = lockPath
109+
const pkgJsonPath = lockPath
108110
? path.resolve(lockPath, `${isHiddenLockFile ? '../' : ''}../package.json`)
109111
: await findUp('package.json', { cwd })
110112

111113
// Read Corepack `packageManager` field in package.json:
112114
// https://nodejs.org/api/packages.html#packagemanager
113-
const pkgJsonStr = existsSync(pkgPath)
114-
? await readFileUtf8(pkgPath)
115+
const pkgJsonStr = existsSync(pkgJsonPath)
116+
? await readFileUtf8(pkgJsonPath)
115117
: undefined
116118

117119
const pkgJson =
@@ -128,12 +130,14 @@ export async function detect({
128130
let agent: AgentPlusBun | undefined
129131
let agentVersion: string | undefined
130132
if (pkgManager) {
131-
const parts = pkgManager.split('@')
132-
const name = <AgentPlusBun>parts[0]
133-
const maybeVersion = parts.length > 1 ? parts[1] : undefined
134-
if (maybeVersion && AGENTS.includes(name)) {
135-
agent = name
136-
agentVersion = maybeVersion
133+
const atSignIndex = pkgManager.lastIndexOf('@')
134+
if (atSignIndex !== -1) {
135+
const name = <AgentPlusBun>pkgManager.slice(0, atSignIndex)
136+
const version = pkgManager.slice(atSignIndex + 1)
137+
if (version && AGENTS.includes(name)) {
138+
agent = name
139+
agentVersion = version
140+
}
137141
}
138142
}
139143
if (
@@ -154,7 +158,16 @@ export async function detect({
154158
node: true
155159
}
156160

161+
let isPrivate = false
162+
let isWorkspace = false
157163
if (pkgJson) {
164+
const pkgPath = path.dirname(pkgJsonPath!)
165+
isPrivate = !!pkgJson['private']
166+
isWorkspace =
167+
!!pkgJson['workspaces'] ||
168+
(agent === 'pnpm' &&
169+
existsSync(path.join(pkgPath, 'pnpm-workspace.yaml')))
170+
158171
let browser: boolean | undefined
159172
let node: boolean | undefined
160173
const browserField = getOwn(pkgJson, 'browser')
@@ -195,10 +208,12 @@ export async function detect({
195208
return <DetectResult>{
196209
agent,
197210
agentVersion,
211+
isPrivate,
212+
isWorkspace,
198213
lockPath,
199214
lockSrc,
200215
pkgJson,
201-
pkgPath,
216+
pkgJsonPath,
202217
pkgJsonStr,
203218
supported: targets.browser || targets.node,
204219
targets

0 commit comments

Comments
 (0)