From 9fe788a35f6b0f6908b2d03911078deed24a03d8 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Sun, 28 Sep 2025 14:49:06 -0700 Subject: [PATCH] project helpers --- app/nose/bin/cat.ts | 13 +++---------- app/nose/bin/edit.tsx | 14 +++----------- app/nose/bin/ls.ts | 15 ++++----------- app/src/project.ts | 22 ++++++++++++++++++++++ 4 files changed, 32 insertions(+), 32 deletions(-) create mode 100644 app/src/project.ts diff --git a/app/nose/bin/cat.ts b/app/nose/bin/cat.ts index 4ee70af..4cca806 100644 --- a/app/nose/bin/cat.ts +++ b/app/nose/bin/cat.ts @@ -4,20 +4,13 @@ import { join, extname } from "path" import type { CommandOutput } from "app/src/shared/types" import { NOSE_WWW } from "app/src/config" -import { getState } from "@/session" -import { appDir } from "app/src/webapp" import { isBinaryFile } from "app/src/utils" import { highlight } from "../lib/highlight" +import { projectName, projectDir } from "@/project" export default async function (path: string) { - const state = getState() - if (!state) return { error: "no state" } - - const project = state.project - if (!project) return { error: "no project loaded" } - - const root = appDir(project) - if (!root) return { error: "error loading project" } + const project = projectName() + const root = projectDir() let files: string[] = [] diff --git a/app/nose/bin/edit.tsx b/app/nose/bin/edit.tsx index ab94707..b748b03 100644 --- a/app/nose/bin/edit.tsx +++ b/app/nose/bin/edit.tsx @@ -1,23 +1,15 @@ -import { escapeHTML } from "bun" import { readdirSync } from "fs" import { join, extname } from "path" import type { CommandOutput } from "app/src/shared/types" import { NOSE_WWW } from "app/src/config" -import { getState } from "@/session" -import { appDir } from "app/src/webapp" import { isBinaryFile } from "app/src/utils" import { countChar } from "app/src/shared/utils" +import { projectName, projectDir } from "@/project" export default async function (path: string) { - const state = getState() - if (!state) return { error: "no state" } - - const project = state.project - if (!project) return { error: "no project loaded" } - - const root = appDir(project) - if (!root) return { error: "error loading project" } + const project = projectName() + const root = projectDir() let files: string[] = [] diff --git a/app/nose/bin/ls.ts b/app/nose/bin/ls.ts index cccced5..78027aa 100644 --- a/app/nose/bin/ls.ts +++ b/app/nose/bin/ls.ts @@ -1,22 +1,15 @@ import { readdirSync } from "fs" import { NOSE_WWW } from "app/src/config" -import { getState } from "@/session" -import { appDir } from "app/src/webapp" +import { projectName, projectDir } from "@/project" export default function () { - const state = getState() - if (!state) return { error: "no state" } - - const project = state.project - if (!project) return { error: "no project loaded" } - - const root = appDir(project) - if (!root) return { error: "error loading project" } + const project = projectName() + const root = projectDir() let files: string[] = [] for (const file of readdirSync(root, { withFileTypes: true })) { - files.push(file.name) + files.push(file.isDirectory() ? `${file.name}/` : file.name) } if (root === NOSE_WWW) { diff --git a/app/src/project.ts b/app/src/project.ts new file mode 100644 index 0000000..66fb9dc --- /dev/null +++ b/app/src/project.ts @@ -0,0 +1,22 @@ +//// +// Helpers for working with projects in the CLI. + +import { getState } from "./session" +import { appDir } from "./webapp" + +export function projectName(): string { + const state = getState() + if (!state) throw "no state" + + const project = state.project + if (!project) throw "no project loaded" + + return project +} + +export function projectDir(): string { + const root = appDir(projectName()) + if (!root) throw "error loading project" + + return root +} \ No newline at end of file