load other apps

This commit is contained in:
Michael Zhang 2024-07-24 20:57:27 -05:00
parent ba7b14937e
commit bf18eb4168
6 changed files with 47 additions and 8 deletions

View file

@ -0,0 +1,6 @@
name: panorama/calendar
depends:
- name: panorama
# code: dist/index.js

BIN
bun.lockb Normal file

Binary file not shown.

8
package.json Normal file
View file

@ -0,0 +1,8 @@
{
"name": "panorama",
"private": true,
"workspaces": [
"packages/*",
"apps/*"
]
}

Binary file not shown.

View file

@ -3,6 +3,7 @@
"module": "src/index.ts",
"type": "module",
"devDependencies": {
"@biomejs/biome": "^1.8.3",
"@types/bun": "latest",
"@types/koa-json": "^2.0.23",
"@types/koa__router": "^12.0.4"
@ -21,5 +22,8 @@
"uuidv7": "^1.0.1",
"yaml": "^2.4.5",
"zod": "^3.23.8"
}
},
"trustedDependencies": [
"@biomejs/biome"
]
}

View file

@ -1,6 +1,6 @@
import { join } from "node:path";
import { join, dirname } from "node:path";
import { parse } from "yaml";
import { readFile } from "node:fs/promises";
import { readdir, readFile } from "node:fs/promises";
import Router from "@koa/router";
import { manifestSchema, type Manifest } from "./manifest";
import { dataSource } from "../db";
@ -18,18 +18,39 @@ export function sanitizeName(name: string): string {
export async function loadApps(): Promise<Map<string, CustomApp>> {
const apps = new Map();
const paths = [
"/Users/michael/Projects/panorama/apps/std",
"/Users/michael/Projects/panorama/apps/codetrack",
join(dirname(dirname(dirname(dirname(dirname(import.meta.path))))), "apps"),
"/Users/michael/Projects/panorama/apps",
];
for (const path of paths) {
const app = await loadApp(path);
apps.set(app.name, app);
for (const basePath of paths) {
try {
const children = await readdir(basePath);
for (const name of children) {
const child = join(basePath, name);
try {
const app = await loadApp(child);
apps.set(app.name, app);
} catch (e) {
console.error("Error setting up " + child + ": " + e.message)
throw e;
}
}
} catch (e) {
if (e.name === "ResolveMessage") {
console.warn("Path " + basePath + " not found")
}
else {
console.error("Error: " + e.message);
console.error(e.stackTrace)
throw e;
}
}
}
return apps;
}
export async function loadApp(path: string): Promise<CustomApp> {
console.log("Loading app from", path);
const manifestPath = join(path, "manifest.yml");
const manifestRaw = parse(await readFile(manifestPath, "utf-8"));
const manifest = manifestSchema.parse(manifestRaw);