Files
multica/packages/core/api/index.ts
Naiyuan Qing f41a0cf423 feat(views): extract packages/views — shared business UI + navigation adapter
- Create NavigationAdapter interface (push, replace, back, pathname, searchParams)
- Create AppLink component replacing next/link in 4 files
- Replace useRouter → useNavigation in 3 files (issue-detail, create-issue, create-workspace)
- Create WebNavigationProvider wrapping Next.js useRouter/usePathname/useSearchParams
- Move ~85 feature UI files (issues, editor, modals, my-issues, skills, runtimes) to packages/views/
- Add store singleton registration pattern (registerAuthStore, registerWorkspaceStore)
- Create data-aware wrappers in packages/views/common/ (ActorAvatar, Markdown)
- Update all app-layer imports to @multica/views/*
- Add @source directive for Tailwind to scan views package
- packages/views/ has zero next/* imports

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 11:49:55 +08:00

32 lines
1.1 KiB
TypeScript

export { ApiClient } from "./client";
export type { ApiClientOptions } from "./client";
export { WSClient } from "./ws-client";
import type { ApiClient as ApiClientType } from "./client";
/** Module-level singleton — set once at app boot via `setApiInstance()`. */
let _api: ApiClientType | null = null;
export function setApiInstance(instance: ApiClientType) {
_api = instance;
}
/** Returns the shared ApiClient singleton. Throws if not yet initialised. */
export function getApi(): ApiClientType {
if (!_api) throw new Error("ApiClient not initialised — call setApiInstance() first");
return _api;
}
/**
* Convenience re-export: a proxy that forwards every property access to the
* singleton so existing call-sites (`api.listIssues(...)`) keep working.
*/
export const api = new Proxy({} as ApiClientType, {
get(_target, prop, receiver) {
// Allow property inspection (HMR/React Refresh) before initialisation
if (!_api) return undefined;
const value = Reflect.get(_api, prop, receiver);
return typeof value === "function" ? value.bind(_api) : value;
},
});