Skip to content

Commit 1b793c0

Browse files
authored
fix: detect Deno workspace root (fix #22237) (#22238)
1 parent fc08bda commit 1b793c0

File tree

5 files changed

+39
-0
lines changed

5 files changed

+39
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"workspace": ["nested"]
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"private": true
3+
}

packages/vite/src/node/server/__tests__/search-root.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,18 @@ describe('searchForWorkspaceRoot', () => {
3131
expect(resolved).toBe(resolve(dirname, 'fixtures/yarn'))
3232
})
3333

34+
test('deno', () => {
35+
const resolved = searchForWorkspaceRoot(
36+
resolve(dirname, 'fixtures/deno/nested'),
37+
)
38+
expect(resolved).toBe(resolve(dirname, 'fixtures/deno'))
39+
})
40+
41+
test('deno at root', () => {
42+
const resolved = searchForWorkspaceRoot(resolve(dirname, 'fixtures/deno'))
43+
expect(resolved).toBe(resolve(dirname, 'fixtures/deno'))
44+
})
45+
3446
test('none', () => {
3547
const resolved = searchForWorkspaceRoot(
3648
resolve(dirname, 'fixtures/none/nested'),

packages/vite/src/node/server/searchRoot.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,24 @@ function hasWorkspacePackageJSON(root: string): boolean {
3535
}
3636
}
3737

38+
// https://docs.deno.com/runtime/fundamentals/workspaces/
39+
function hasWorkspaceDenoJSON(root: string): boolean {
40+
for (const name of ['deno.json', 'deno.jsonc']) {
41+
const path = join(root, name)
42+
if (!isFileReadable(path)) {
43+
continue
44+
}
45+
try {
46+
const content = JSON.parse(fs.readFileSync(path, 'utf-8')) || {}
47+
if (content.workspace) return true
48+
} catch {
49+
// deno.jsonc is only detected when it is also valid JSON. Full
50+
// JSONC parsing would require an additional parser.
51+
}
52+
}
53+
return false
54+
}
55+
3856
function hasRootFile(root: string): boolean {
3957
return ROOT_FILES.some((file) => fs.existsSync(join(root, file)))
4058
}
@@ -69,6 +87,7 @@ export function searchForWorkspaceRoot(
6987
): string {
7088
if (hasRootFile(current)) return current
7189
if (hasWorkspacePackageJSON(current)) return current
90+
if (hasWorkspaceDenoJSON(current)) return current
7291

7392
const dir = dirname(current)
7493
// reach the fs root

pnpm-lock.yaml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)