diff --git a/src/api/unlink.ts b/src/api/unlink.ts index ba9126924a..efeceb368a 100644 --- a/src/api/unlink.ts +++ b/src/api/unlink.ts @@ -83,16 +83,19 @@ async function getExternalPackages ( scope?: string ): Promise { let externalLinks: string[] = [] - for (const dir of await fs.readdir(modules)) { + const parentDir = scope ? path.join(modules, scope) : modules + for (const dir of await fs.readdir(parentDir)) { if (dir[0] === '.') continue if (!scope && dir[0] === '@') { - externalLinks = externalLinks.concat(await getExternalPackages(path.join(modules, dir), store, dir)) + externalLinks = externalLinks.concat(await getExternalPackages(modules, store, dir)) continue } - if (await isExternalLink(store, modules, dir)) { - externalLinks.push(scope ? `${scope}/${dir}` : dir) + const pkgName = scope ? `${scope}/${dir}` : dir + + if (await isExternalLink(store, modules, pkgName)) { + externalLinks.push(pkgName) } } return externalLinks diff --git a/test/unlink.ts b/test/unlink.ts index d60a4f2008..014a6b9b3f 100644 --- a/test/unlink.ts +++ b/test/unlink.ts @@ -117,6 +117,20 @@ test('unlink all packages', async (t: tape.Test) => { t.equal(typeof project.requireModule('@zkochan/logger'), 'object', '@zkochan/logger installed after unlinked') }) +test("don't warn about scoped packages when running unlink w/o params", async (t: tape.Test) => { + const project = prepare(t) + + await installPkgs(['@zkochan/logger'], testDefaults()) + + const reporter = sinon.spy() + await unlink(testDefaults({reporter})) + + t.notOk(reporter.calledWithMatch({ + level: 'warn', + message: '@zkochan/logger is not an external link', + }), 'not reported warning') +}) + test("don't unlink package that is not a link", async (t: tape.Test) => { const project = prepare(t)