start moving to new project structure
This commit is contained in:
parent
89d850b55f
commit
f9792eb31c
16
bin/new.ts
16
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 <project name>"
|
||||
|
||||
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}`
|
||||
}
|
||||
|
|
@ -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()
|
||||
}
|
||||
|
|
@ -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 => <a href={`#load ${app}`} class={app === state.project ? "magenta" : ""}>{app}</a>)}
|
||||
{projects().map(app => <a href={`#load ${app}`} class={app === project ? "magenta" : ""}>{app}</a>)}
|
||||
</>
|
||||
}
|
||||
|
|
@ -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 })
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user