fix dir mk/rm

This commit is contained in:
Chris Wanstrath 2026-01-28 20:44:34 -08:00
parent a44c85abe0
commit 5d898ac485

View File

@ -1,5 +1,8 @@
import type { Subprocess } from 'bun' import type { Subprocess } from 'bun'
import { existsSync, readdirSync, readFileSync, writeFileSync, watch } from 'fs' import {
existsSync, readdirSync, readFileSync, writeFileSync,
statSync, watch
} from 'fs'
import { join } from 'path' import { join } from 'path'
import type { App as SharedApp, AppState, LogLine } from '../shared/types' import type { App as SharedApp, AppState, LogLine } from '../shared/types'
@ -208,9 +211,8 @@ export const stopApp = (dir: string) => {
} }
const watchAppsDir = () => { const watchAppsDir = () => {
watch(APPS_DIR, { recursive: true }, (_event, filename) => { watch(APPS_DIR, { recursive: true }, (event, filename) => {
if (!filename) return if (!filename) return
if (!filename.includes('/')) return
// Extract the app directory name from the path (e.g., "myapp/package.json" -> "myapp") // Extract the app directory name from the path (e.g., "myapp/package.json" -> "myapp")
const dir = filename.split('/')[0]! const dir = filename.split('/')[0]!
@ -230,6 +232,13 @@ const watchAppsDir = () => {
const app = _apps.get(dir)! const app = _apps.get(dir)!
// check if app was deleted
if (!isDir(join(APPS_DIR, dir))) {
_apps.delete(dir)
update()
return
}
// Only care about package.json changes for existing apps // Only care about package.json changes for existing apps
if (!filename.endsWith('package.json')) return if (!filename.endsWith('package.json')) return
@ -256,6 +265,7 @@ const watchAppsDir = () => {
app.state = 'invalid' app.state = 'invalid'
update() update()
} }
if (!error && app.state === 'invalid') { if (!error && app.state === 'invalid') {
app.state = 'stopped' app.state = 'stopped'
update() update()
@ -263,6 +273,14 @@ const watchAppsDir = () => {
}) })
} }
function isDir(path: string): boolean {
try {
return statSync(path).isDirectory()
} catch {
return false
}
}
export const initApps = () => { export const initApps = () => {
discoverApps() discoverApps()
runApps() runApps()