forked from defunkt/toes
Refactor app building and simplify gitUrl
This commit is contained in:
parent
d9533032bc
commit
b410a74d15
|
|
@ -179,7 +179,7 @@ export async function newApp(name: string | undefined, options: NewAppOptions) {
|
||||||
await run(['git', 'init'])
|
await run(['git', 'init'])
|
||||||
await run(['git', 'add', '.'])
|
await run(['git', 'add', '.'])
|
||||||
await run(['git', 'commit', '-m', 'init'])
|
await run(['git', 'commit', '-m', 'init'])
|
||||||
await run(['git', 'remote', 'add', 'toes', await gitUrl(appName)])
|
await run(['git', 'remote', 'add', 'toes', gitUrl(appName)])
|
||||||
await run(['git', 'push', 'toes', 'main'])
|
await run(['git', 'push', 'toes', 'main'])
|
||||||
|
|
||||||
console.log(color.green(`✓ Created ${appName}`))
|
console.log(color.green(`✓ Created ${appName}`))
|
||||||
|
|
@ -196,7 +196,7 @@ export async function getApp(name: string, directory?: string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const url = await gitUrl(name)
|
const url = gitUrl(name)
|
||||||
const args = ['git', 'clone', url]
|
const args = ['git', 'clone', url]
|
||||||
if (directory) args.push(directory)
|
if (directory) args.push(directory)
|
||||||
const proc = Bun.spawn(args, { stdout: 'inherit', stderr: 'inherit' })
|
const proc = Bun.spawn(args, { stdout: 'inherit', stderr: 'inherit' })
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import type { App, Manifest } from '@types'
|
import type { Manifest } from '@types'
|
||||||
import { buildAppUrl } from '@urls'
|
import { buildAppUrl } from '@urls'
|
||||||
import { AsyncLocalStorage } from 'node:async_hooks'
|
import { AsyncLocalStorage } from 'node:async_hooks'
|
||||||
|
|
||||||
|
|
@ -21,11 +21,7 @@ export const HOST = process.env.TOES_URL
|
||||||
? normalizeUrl(process.env.TOES_URL)
|
? normalizeUrl(process.env.TOES_URL)
|
||||||
: DEFAULT_HOST
|
: DEFAULT_HOST
|
||||||
|
|
||||||
export async function gitUrl(name: string): Promise<string> {
|
export const gitUrl = (name: string) => `${buildAppUrl('git', HOST)}/${name}`
|
||||||
const git: App | undefined = await get('/api/apps/git')
|
|
||||||
if (git?.tunnelUrl) return `${git.tunnelUrl}/${name}`
|
|
||||||
return `${buildAppUrl('git', HOST)}/${name}`
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getSignal = () => signalStore.getStore()
|
export const getSignal = () => signalStore.getStore()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,9 @@ function convert(app: BackendApp): SharedApp {
|
||||||
router.sse('/stream', (send) => {
|
router.sse('/stream', (send) => {
|
||||||
let queue = Promise.resolve()
|
let queue = Promise.resolve()
|
||||||
const broadcast = () => {
|
const broadcast = () => {
|
||||||
const apps: SharedApp[] = allApps().map(({
|
const apps: SharedApp[] = allApps().map(app => ({
|
||||||
name, state, icon, error, port, started, logs, tool, apps: apps_, dashboard, share, tunnelEnabled, tunnelUrl
|
...convert(app),
|
||||||
}) => ({
|
logs: app.logs,
|
||||||
name, state, icon, error, port, started, logs, tool, apps: apps_, dashboard, share, tunnelEnabled, tunnelUrl,
|
|
||||||
}))
|
}))
|
||||||
queue = queue.then(() => send(apps))
|
queue = queue.then(() => send(apps))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -158,12 +158,7 @@ export function registerApp(dir: string) {
|
||||||
|
|
||||||
const { pkg, error } = loadApp(dir)
|
const { pkg, error } = loadApp(dir)
|
||||||
const state: AppState = error ? 'invalid' : 'stopped'
|
const state: AppState = error ? 'invalid' : 'stopped'
|
||||||
const icon = pkg.toes?.icon ?? DEFAULT_EMOJI
|
_apps.set(dir, buildApp(dir, pkg, state, error))
|
||||||
const tool = pkg.toes?.tool
|
|
||||||
const apps = pkg.toes?.apps
|
|
||||||
const dashboard = pkg.toes?.dashboard
|
|
||||||
const share = pkg.toes?.share
|
|
||||||
_apps.set(dir, { name: dir, state, icon, error, tool, apps, dashboard, share })
|
|
||||||
update()
|
update()
|
||||||
emit({ type: 'app:create', app: dir })
|
emit({ type: 'app:create', app: dir })
|
||||||
if (!error) {
|
if (!error) {
|
||||||
|
|
@ -302,6 +297,15 @@ export function updateAppIcon(dir: string, icon: string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const buildApp = (dir: string, pkg: any, state: AppState, error?: string): App => ({
|
||||||
|
name: dir, state, error,
|
||||||
|
icon: pkg.toes?.icon ?? DEFAULT_EMOJI,
|
||||||
|
tool: pkg.toes?.tool,
|
||||||
|
apps: pkg.toes?.apps,
|
||||||
|
dashboard: pkg.toes?.dashboard,
|
||||||
|
share: pkg.toes?.share,
|
||||||
|
})
|
||||||
|
|
||||||
const clearTimers = (app: App) => {
|
const clearTimers = (app: App) => {
|
||||||
if (app.startupTimer) {
|
if (app.startupTimer) {
|
||||||
clearTimeout(app.startupTimer)
|
clearTimeout(app.startupTimer)
|
||||||
|
|
@ -350,12 +354,7 @@ function discoverApps() {
|
||||||
for (const dir of allAppDirs()) {
|
for (const dir of allAppDirs()) {
|
||||||
const { pkg, error } = loadApp(dir)
|
const { pkg, error } = loadApp(dir)
|
||||||
const state: AppState = error ? 'invalid' : 'stopped'
|
const state: AppState = error ? 'invalid' : 'stopped'
|
||||||
const icon = pkg.toes?.icon ?? DEFAULT_EMOJI
|
_apps.set(dir, buildApp(dir, pkg, state, error))
|
||||||
const tool = pkg.toes?.tool
|
|
||||||
const apps = pkg.toes?.apps
|
|
||||||
const dashboard = pkg.toes?.dashboard
|
|
||||||
const share = pkg.toes?.share
|
|
||||||
_apps.set(dir, { name: dir, state, icon, error, tool, apps, dashboard, share })
|
|
||||||
}
|
}
|
||||||
update()
|
update()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user