feat(build): detect root frontend manifests

This commit is contained in:
Virgil 2026-04-01 19:17:17 +00:00
parent 1b572ed5e5
commit 650ab9fd3a
2 changed files with 17 additions and 3 deletions

View file

@ -239,7 +239,8 @@ type DiscoveryResult struct {
Types []ProjectType
// PrimaryStack is the best stack suggestion based on detected types.
PrimaryStack string
// HasFrontend is true when frontend/package.json or subtree npm is found.
// HasFrontend is true when a root or frontend/ package.json/deno manifest is found,
// or when a nested frontend tree is detected.
HasFrontend bool
// HasSubtreeNpm is true when a nested package.json exists within depth 2.
HasSubtreeNpm bool
@ -285,8 +286,9 @@ func DiscoverFull(fs io.Medium, dir string) (*DiscoveryResult, error) {
// Subtree npm detection
result.HasSubtreeNpm = HasSubtreeNpm(fs, dir)
// Frontend detection: frontend package managers or nested frontend manifests.
result.HasFrontend = hasFrontendManifest(fs, ax.Join(dir, "frontend")) ||
// Frontend detection: root manifests, frontend/ manifests, or nested frontend trees.
result.HasFrontend = hasFrontendManifest(fs, dir) ||
hasFrontendManifest(fs, ax.Join(dir, "frontend")) ||
hasSubtreeFrontendManifest(fs, dir) ||
result.HasSubtreeNpm

View file

@ -583,6 +583,18 @@ func TestDiscovery_DiscoverFull_Good(t *testing.T) {
assert.True(t, result.HasFrontend)
})
t.Run("detects root package.json as frontend", func(t *testing.T) {
dir := t.TempDir()
require.NoError(t, ax.WriteFile(ax.Join(dir, "package.json"), []byte("{}"), 0644))
result, err := DiscoverFull(fs, dir)
require.NoError(t, err)
assert.Equal(t, []ProjectType{ProjectTypeNode}, result.Types)
assert.Equal(t, "node", result.PrimaryStack)
assert.True(t, result.HasFrontend)
assert.False(t, result.HasSubtreeNpm)
})
t.Run("detects frontend deno manifest at project root", func(t *testing.T) {
dir := t.TempDir()
err := ax.WriteFile(ax.Join(dir, "go.mod"), []byte("{}"), 0644)