summaryrefslogtreecommitdiffhomepage
path: root/js/src/app
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-05-17 21:31:42 -0400
committerDax Raad <[email protected]>2025-05-26 12:40:17 -0400
commita34d020bc6b252e842f042d935c7a0e6444460cf (patch)
treeea3484499dff80e82d421e879ab639133ae9c3b4 /js/src/app
parent96fbc37f0175052291f8a096d530bd4480f6cb19 (diff)
downloadopencode-a34d020bc6b252e842f042d935c7a0e6444460cf.tar.gz
opencode-a34d020bc6b252e842f042d935c7a0e6444460cf.zip
sync
Diffstat (limited to 'js/src/app')
-rw-r--r--js/src/app/index.ts46
-rw-r--r--js/src/app/path.ts11
2 files changed, 57 insertions, 0 deletions
diff --git a/js/src/app/index.ts b/js/src/app/index.ts
new file mode 100644
index 000000000..1c063ebd3
--- /dev/null
+++ b/js/src/app/index.ts
@@ -0,0 +1,46 @@
+import fs from "fs/promises";
+import { AppPath } from "./path";
+import { Log } from "../util/log";
+import { Context } from "../util/context";
+
+export namespace App {
+ const log = Log.create({ service: "app" });
+
+ export type Info = Awaited<ReturnType<typeof create>>;
+
+ const ctx = Context.create<Info>("app");
+
+ export async function create(input: { directory: string }) {
+ log.info("creating");
+
+ const dataDir = AppPath.data(input.directory);
+ await fs.mkdir(dataDir, { recursive: true });
+ log.info("created", { path: dataDir });
+
+ const services = new Map<any, any>();
+
+ return {
+ get root() {
+ return input.directory;
+ },
+ service<T extends () => any>(service: any, init: T) {
+ if (!services.has(service)) {
+ log.info("registering service", { name: service });
+ services.set(service, init());
+ }
+ return services.get(service) as ReturnType<T>;
+ },
+ };
+ }
+
+ export function service<T extends () => any>(key: any, init: T) {
+ const app = ctx.use();
+ return app.service(key, init);
+ }
+
+ export async function use() {
+ return ctx.use();
+ }
+
+ export const provide = ctx.provide;
+}
diff --git a/js/src/app/path.ts b/js/src/app/path.ts
new file mode 100644
index 000000000..972d18c41
--- /dev/null
+++ b/js/src/app/path.ts
@@ -0,0 +1,11 @@
+import path from "path";
+
+export namespace AppPath {
+ export function data(input: string) {
+ return path.join(input, ".opencode");
+ }
+
+ export function storage(input: string) {
+ return path.join(data(input), "storage");
+ }
+}