UNPKG

@roots/bud-dashboard

Version:

bud.js core module

99 lines (98 loc) 5.21 kB
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@roots/bud-support/jsx-runtime"; import { exit } from 'node:process'; import Footer from '@roots/bud-dashboard/components/footer'; import Compilation from '@roots/bud-dashboard/views/compilation'; import Debug from '@roots/bud-dashboard/views/debug'; import Server from '@roots/bud-dashboard/views/server'; import escapes from '@roots/bud-support/ansi-escapes'; import { render as renderError } from '@roots/bud-support/errors'; import { Box, Static, useApp, useInput, useState, useStdout, } from '@roots/bud-support/ink'; export const Application = ({ basedir, compact, compilations, debug, devUrl, displayAssets, displayEntrypoints, displayServerInfo, error, isolated = 0, mode, proxy, proxyUrl, publicDevUrl, publicProxyUrl, }) => { const { stdout } = useStdout(); compilations = Array.isArray(compilations) ? (compilations?.filter(compilation => compilation.hash) ?? []) : []; if (error) { renderError(error); return null; } if (mode === `production`) { return (_jsx(Box, { flexDirection: "column", gap: 1, children: _jsx(Static, { items: compilations, children: (compilation, id) => { if (isolated > 0 && id + 1 !== isolated) return null; return (_jsx(RenderCompilation, { basedir: basedir, compact: compact, compilation: compilation, compilations: compilations, debug: debug, displayAssets: displayAssets, displayEntrypoints: displayEntrypoints, id: id, stdout: stdout }, `${compilation.name}-${compilation.hash}-${id}`)); } }) })); } return (_jsxs(_Fragment, { children: [compilations.map((compilation, id) => (_jsx(RenderCompilation, { basedir: basedir, compact: compact, compilation: compilation, compilations: compilations, debug: debug, displayAssets: displayAssets, displayEntrypoints: displayEntrypoints, id: id, stdout: stdout }, `${compilation.name}-${compilation.hash}-${id}`))), _jsx(Server, { devUrl: devUrl, displayServerInfo: displayServerInfo, mode: mode, proxy: proxy, proxyUrl: proxyUrl, publicDevUrl: publicDevUrl, publicProxyUrl: publicProxyUrl })] })); }; export const RenderCompilation = ({ basedir, compact, compilation, compilations, debug, displayAssets, displayEntrypoints, id, stdout, }) => { return (_jsxs(Box, { flexDirection: "column", gap: 1, width: stdout.columns - 2, children: [_jsx(Compilation, { basedir: basedir, compact: compact, compilation: compilation, debug: debug, displayAssets: displayAssets, displayEntrypoints: displayEntrypoints, id: id + 1, total: compilations?.length }), _jsx(Debug, { compilation: compilation, debug: debug })] })); }; export const TeletypeApplication = ({ children, close, notifier, ...props }) => { const onExit = useOnExit(); const stdout = useStdout(); const [compact, setCompact] = useState(props.compact); const [debug, setDisplayDebug] = useState(props.debug); const [displayAssets, setDisplayAssets] = useState(props.displayAssets); const [displayEntrypoints, setDisplayEntrypoints] = useState(true); const [displayServerInfo, setDisplayServerInfo] = useState(props.displayServerInfo); const [help, setHelp] = useState(false); const [isolated, setIsolated] = useState(0); useInput((key, input) => { switch (key) { case `a`: setDisplayAssets(!displayAssets); break; case `b`: if (notifier?.openBrowser && props.devUrl) { notifier.openBrowser(props.devUrl?.toString()); notifier.browserOpened = false; } break; case `c`: setCompact(!compact); break; case `d`: setDisplayDebug(!debug); break; case `e`: setDisplayEntrypoints(!displayEntrypoints); break; case `h`: setHelp(!help); break; case `q`: onExit(); break; case `r`: stdout.write(escapes.clearTerminal); break; case `s`: setDisplayServerInfo(!displayServerInfo); break; case `0`: setIsolated(0); break; } new Array(9).fill(0).forEach((_, i) => { if (!props.compilations) return; key === `${i + 1}` && isolated !== i + 1 && setIsolated(Math.min(i + 1, props.compilations.length)); }); if (input.escape) onExit(); }); return (_jsxs(_Fragment, { children: [_jsx(Application, { ...props, compact: compact, debug: debug, displayAssets: displayAssets, displayEntrypoints: displayEntrypoints, displayServerInfo: displayServerInfo, isolated: isolated }), _jsx(Footer, { display: help })] })); }; const useOnExit = () => { const app = useApp(); return (error) => { if (error) app.exit(error); else app.exit(); exit(error ? 1 : 0); }; };