Skip to content

Commit 93e550f

Browse files
committed
fix: detect latest cache installs
1 parent dab7d46 commit 93e550f

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

lib/update.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,26 @@ export async function updateRemoveDir(packageDir: string, name: string) {
8888

8989
const wrapperDir = dirname(nodeModulesDir)
9090
const wrapperPkg = await readPackageJson(join(wrapperDir, "package.json"))
91-
const spec = wrapperPkg?.dependencies?.[name]
91+
const spec = wrapperSpec(wrapperDir, name) ?? wrapperPkg?.dependencies?.[name]
9292
if (!spec || !isAutoUpdatableSpec(spec)) return undefined
9393

9494
return wrapperDir
9595
}
9696

97+
function wrapperSpec(wrapperDir: string, name: string) {
98+
if (name.startsWith("@")) {
99+
const [scope, pkg] = name.split("/")
100+
if (!scope || !pkg || basename(dirname(wrapperDir)) !== scope) return undefined
101+
const prefix = `${pkg}@`
102+
const base = basename(wrapperDir)
103+
return base.startsWith(prefix) ? base.slice(prefix.length) : undefined
104+
}
105+
106+
const prefix = `${name}@`
107+
const base = basename(wrapperDir)
108+
return base.startsWith(prefix) ? base.slice(prefix.length) : undefined
109+
}
110+
97111
export function isAutoUpdatableSpec(spec: string) {
98112
const value = spec.trim()
99113
if (!value) return false

tests/update.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ test("isAutoUpdatableSpec rejects pinned and non-registry specs", () => {
2626
})
2727

2828
test("updateRemoveDir removes opencode npm wrapper for latest installs", async () => {
29-
const wrapperDir = await mkdtemp(join(tmpdir(), "dcp-update-"))
29+
const rootDir = await mkdtemp(join(tmpdir(), "dcp-update-"))
30+
const wrapperDir = join(rootDir, "@tarquinen", "opencode-dcp@latest")
3031
const packageDir = join(wrapperDir, "node_modules", "@tarquinen", "opencode-dcp")
3132
await writePackageJson(wrapperDir, {
32-
dependencies: { "@tarquinen/opencode-dcp": "latest" },
33+
dependencies: { "@tarquinen/opencode-dcp": "3.1.10" },
3334
})
3435
await writePackageJson(packageDir, {
3536
name: "@tarquinen/opencode-dcp",
@@ -40,7 +41,8 @@ test("updateRemoveDir removes opencode npm wrapper for latest installs", async (
4041
})
4142

4243
test("updateRemoveDir skips version-locked opencode installs", async () => {
43-
const wrapperDir = await mkdtemp(join(tmpdir(), "dcp-update-"))
44+
const rootDir = await mkdtemp(join(tmpdir(), "dcp-update-"))
45+
const wrapperDir = join(rootDir, "@tarquinen", "opencode-dcp@3.1.9")
4446
const packageDir = join(wrapperDir, "node_modules", "@tarquinen", "opencode-dcp")
4547
await writePackageJson(wrapperDir, {
4648
dependencies: { "@tarquinen/opencode-dcp": "3.1.9" },

0 commit comments

Comments
 (0)