web based infinite canvas
1import type { PersistentDocRepo } from "inkfinite-core";
2import { createWebDocRepo, InkfiniteDB } from "inkfinite-core";
3import { createDesktopFileOps } from "./fileops";
4import { createDesktopDocRepo, type DesktopDocRepo } from "./persistence/desktop";
5
6export type Platform = "web" | "desktop";
7
8export function detectPlatform(): Platform {
9 if (typeof window !== "undefined" && "__TAURI__" in window) {
10 return "desktop";
11 }
12 return "web";
13}
14
15export type PlatformRepoResult = {
16 repo: PersistentDocRepo;
17 platform: Platform;
18 db?: InkfiniteDB;
19 desktop?: DesktopDocRepo;
20};
21
22/**
23 * Create the appropriate DocRepo based on platform
24 */
25export async function createPlatformRepo(): Promise<PlatformRepoResult> {
26 const platform = detectPlatform();
27
28 if (platform === "desktop") {
29 const fileOps = createDesktopFileOps();
30 const repo = createDesktopDocRepo(fileOps);
31 return { repo, platform, desktop: repo };
32 } else {
33 const db = new InkfiniteDB();
34 const repo = createWebDocRepo(db);
35 return { repo, platform, db };
36 }
37}