MCPcopy Create free account
hub / github.com/bearlyai/OpenADE / createOpenADEYjsProjection

Function createOpenADEYjsProjection

projects/openade-module/src/yjsProjection.ts:155–255  ·  view source on GitHub ↗
(storage: OpenADEYjsStorageAdapter)

Source from the content-addressed store, hash-verified

153}
154
155export function createOpenADEYjsProjection(storage: OpenADEYjsStorageAdapter): OpenADEYjsProjection {
156 async function readSnapshot(options: { version?: string; hostName?: string; workingTaskIds?: string[] } = {}): Promise<OpenADESnapshot> {
157 const settings = await readPersonalSettings(storage)
158 const workingTaskIds = options.workingTaskIds ?? []
159 const pinnedTaskIds = Array.isArray(settings.pinnedTaskIds)
160 ? settings.pinnedTaskIds.filter((id): id is string => typeof id === "string")
161 : []
162
163 return {
164 server: {
165 version: options.version ?? "local",
166 hostName: options.hostName ?? storage.hostName?.() ?? "OpenADE",
167 theme: resolveTheme(settings),
168 },
169 repos: await readRepos(storage, { workingTaskIds, pinnedTaskIds }),
170 workingTaskIds,
171 }
172 }
173
174 async function readProjects(options: { workingTaskIds?: string[] } = {}): Promise<OpenADEProject[]> {
175 const snapshot = await readSnapshot(options)
176 return snapshot.repos
177 }
178
179 async function readTaskList(repoId: string, options: { workingTaskIds?: string[] } = {}): Promise<OpenADETaskPreview[]> {
180 const repos = await readProjects(options)
181 return repos.find((repo) => repo.id === repoId)?.tasks ?? []
182 }
183
184 async function readTask(repoId: string, taskId: string): Promise<OpenADETask> {
185 const documentId = `code:task:${taskId}`
186 const [meta, events, comments, deviceEnvironments, preview] = await Promise.all([
187 storage.readMapObject(documentId, "task:meta"),
188 storage.readOrderedArray<Record<string, unknown>>(documentId, "task:events"),
189 storage.readOrderedArray<Record<string, unknown>>(documentId, "task:comments"),
190 storage.readOrderedArray<Record<string, unknown>>(documentId, "task:deviceEnvironments"),
191 readTaskList(repoId).then((tasks) => tasks.find((task) => task.id === taskId)),
192 ])
193
194 if (!meta) {
195 if (!preview) throw new Error(`Task ${taskId} not found`)
196 return {
197 id: preview.id,
198 repoId,
199 slug: preview.slug,
200 title: preview.title,
201 description: "",
202 isolationStrategy: { type: "head" },
203 closed: preview.closed,
204 unavailableReason: "Task data is unavailable on the desktop host.",
205 deviceEnvironments: [],
206 events: [],
207 comments: [],
208 }
209 }
210
211 const metaId = stringValue(meta.id)
212 if (metaId !== taskId) {

Callers 2

Calls 1

readPersonalSettingsFunction · 0.85

Tested by

no test coverage detected