From f9792eb31c75284e7ce52a69f8527378d455004a Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Wed, 1 Oct 2025 20:43:58 -0700 Subject: [PATCH] start moving to new project structure --- bin/new.ts | 16 +++++++--------- bin/project.ts | 7 ++----- bin/projects.tsx | 9 +++------ src/project.ts | 18 ++++++++++++------ 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/bin/new.ts b/bin/new.ts index f5c2bb3..ce6bc4a 100644 --- a/bin/new.ts +++ b/bin/new.ts @@ -4,23 +4,21 @@ import { mkdirSync, writeFileSync } from "fs" import { join } from "path" -import { apps } from "@/webapp" -import { NOSE_WWW } from "@/config" -import { isDir } from "@/utils" +import { projects } from "@/project" +import { NOSE_DIR } from "@/config" import load from "./load" export default function (project: string) { if (!project) throw "usage: new " - if (apps().includes(project)) throw `${project} already exists` + if (projects().includes(project)) throw `${project} already exists` - if (!isDir(NOSE_WWW)) throw `no www dir! make one in a real shell:\n$ mkdir -p ${NOSE_WWW}` - - mkdirSync(join(NOSE_WWW, project)) - writeFileSync(join(NOSE_WWW, project, `index.ts`), `export default (c: Context) =>\n "Hello, world!"`) + const dir = join(NOSE_DIR, project, "bin") + mkdirSync(dir, { recursive: true }) + writeFileSync(join(dir, `index.ts`), `export default (c: Context) =>\n "Hello, world!"`) load(project) - return `created ${project}` + return `Created ${project}` } \ No newline at end of file diff --git a/bin/project.ts b/bin/project.ts index e1154ac..e183148 100644 --- a/bin/project.ts +++ b/bin/project.ts @@ -1,10 +1,7 @@ // Print the currently loaded project. -import { sessionGet } from "@/session" +import { projectName } from "@/project" export default function () { - const state = sessionGet() - if (!state) return { error: "no state" } - - return state?.project || "none" + return projectName() } \ No newline at end of file diff --git a/bin/projects.tsx b/bin/projects.tsx index af61b35..751e8f5 100644 --- a/bin/projects.tsx +++ b/bin/projects.tsx @@ -1,13 +1,10 @@ // Show the projects on this NOSEputer. -import { apps } from "@/webapp" -import { sessionGet } from "@/session" +import { projects, projectName } from "@/project" export default function () { - const state = sessionGet() - if (!state) return { error: "no state" } - + const project = projectName() return <> - {apps().map(app => {app})} + {projects().map(app => {app})} } \ No newline at end of file diff --git a/src/project.ts b/src/project.ts index 7c74073..44e4376 100644 --- a/src/project.ts +++ b/src/project.ts @@ -1,9 +1,11 @@ //// // Helpers for working with projects in the CLI. +import { join } from "path" import { readdirSync, type Dirent } from "fs" import { sessionGet } from "./session" -import { appDir } from "./webapp" +import { NOSE_DIR } from "./config" +import { isDir } from "./utils" export function projectName(): string { const state = sessionGet() @@ -15,13 +17,17 @@ export function projectName(): string { return project } -export function projectDir(): string { - const root = appDir(projectName()) - if (!root) throw "error loading project" +export function projects(): string[] { + return readdirSync(NOSE_DIR, { withFileTypes: true }).filter(file => file.isDirectory()).map(dir => dir.name) +} +export function projectDir(name = projectName()): string { + const root = join(NOSE_DIR, name) + if (!isDir(root)) + throw `no project found at ${root}` return root } -export function projectFiles(): Dirent[] { - return readdirSync(projectDir(), { recursive: true, withFileTypes: true }) +export function projectFiles(name = projectName()): Dirent[] { + return readdirSync(projectDir(name), { recursive: true, withFileTypes: true }) } \ No newline at end of file