create-fullstack-scaffold 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +513 -122
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
- package/template/dist/cli/index.js +237 -94
- package/template/dist/cli/index.js.map +1 -1
- package/template/dist/client/admin.html +15 -10
- package/template/dist/client/assets/App-BpFUIC-5.js +114 -0
- package/template/dist/client/assets/{CartPage-DESSHkaG.js → CartPage-DgDZP-R5.js} +2 -2
- package/template/dist/client/assets/{CategoriesPage-DqLZ_Mom.js → CategoriesPage-fuYNiSmE.js} +2 -2
- package/template/dist/client/assets/ContentDetailPage-BvvFU1Mr.js +1 -0
- package/template/dist/client/assets/ContentListPage-ShPxo6WG.js +1 -0
- package/template/dist/client/assets/DashboardPage-C1rZzZo4.js +11 -0
- package/template/dist/client/assets/{DeveloperDashboardPage-Cum7zFwO.js → DeveloperDashboardPage-_WtmbVoA.js} +2 -2
- package/template/dist/client/assets/{EmptyState-BK7ttK8D.js → EmptyState-DEyOQjbY.js} +1 -1
- package/template/dist/client/assets/LoadingSpinner-BcHjaM1m.js +6 -0
- package/template/dist/client/assets/LoginPage-CjeQqDdO.js +1 -0
- package/template/dist/client/assets/LogoutOutlined-ColFAHdd.js +1 -0
- package/template/dist/client/assets/NotificationPage-DRkEv02s.js +1 -0
- package/template/dist/client/assets/OrdersPage-7I3vPWLP.js +11 -0
- package/template/dist/client/assets/{PluginDetailPage-Br24YS4P.js → PluginDetailPage-CWyxdVCg.js} +3 -13
- package/template/dist/client/assets/PluginsPage-DRgWLeJT.js +6 -0
- package/template/dist/client/assets/ProfilePage-2FFkaii8.js +16 -0
- package/template/dist/client/assets/PublishPage-DW7yvROx.js +1 -0
- package/template/dist/client/assets/{RegisterPage-rPFG4Sry.js → RegisterPage-Dvaf9b0e.js} +2 -2
- package/template/dist/client/assets/SaveOutlined-CLQ2tsSY.js +2 -0
- package/template/dist/client/assets/{SearchPage-DQl1U5Uy.js → SearchPage-DvnEyswS.js} +2 -2
- package/template/dist/client/assets/{SettingsPage-DaYE80wj.js → SettingsPage-IrU-L9Zr.js} +2 -2
- package/template/dist/client/assets/{StatusBadge-BJ3W2Zc7.js → StatusBadge-CG7wVqpu.js} +1 -1
- package/template/dist/client/assets/{TodoPage-zC5wWNBa.js → TodoPage-B7D-bl65.js} +3 -3
- package/template/dist/client/assets/TopicsPage-CYCNr-mn.js +6 -0
- package/template/dist/client/assets/{WebSocketPage-B4NLdz1w.js → WebSocketPage-CGEg6QJE.js} +2 -2
- package/template/dist/client/assets/{activity-B94BUAsD.js → activity-CgTz9Mrd.js} +1 -1
- package/template/dist/client/assets/admin-D2iHWNOg.js +1 -0
- package/template/dist/client/assets/api-request-DIJocPxr.js +356 -0
- package/template/dist/client/assets/{arrow-left-H5JH0iU1.js → arrow-left-DtLQ3tTk.js} +1 -1
- package/template/dist/client/assets/{chevron-down-DwRh_wjD.js → chevron-down-CpIAV_yr.js} +1 -1
- package/template/dist/client/assets/{chevron-right-CpIWaqAL.js → chevron-right-CnU7oPQs.js} +1 -1
- package/template/dist/client/assets/{circle-check-big-CSElLscG.js → circle-check-big-CrZdwS75.js} +1 -1
- package/template/dist/client/assets/{circle-x-CYxr4RAw.js → circle-x-CvN9r3fW.js} +1 -1
- package/template/dist/client/assets/{clock-BseUJ7ex.js → clock-CTeSZBiH.js} +1 -1
- package/template/dist/client/assets/{download-BsGC_Xhq.js → download-OSVfVuNV.js} +1 -1
- package/template/dist/client/assets/{external-link-UTDzdjq8.js → external-link-fBsuHMby.js} +1 -1
- package/template/dist/client/assets/{eye-nR10ui7i.js → eye-CwlZZEsj.js} +1 -1
- package/template/dist/client/assets/index-09IqiOaE.css +1 -0
- package/template/dist/client/assets/index-B3CRby6r.js +51 -0
- package/template/dist/client/assets/index-CC_zy73y.js +17 -0
- package/template/dist/client/assets/main-Cn4IDo2I.js +92 -0
- package/template/dist/client/assets/merchant-DDDN9bMu.js +40 -0
- package/template/dist/client/assets/{message-square-CwWGL-Bh.js → message-square-BRaZfgbJ.js} +1 -1
- package/template/dist/client/assets/pluginStore-DDsWJPe6.js +1 -0
- package/template/dist/client/assets/{plus-pZld_nUL.js → plus-DDZfPiDJ.js} +1 -1
- package/template/dist/client/assets/sse-client-DGQ072hl.js +64 -0
- package/template/dist/client/assets/star-C7tO6w4H.js +11 -0
- package/template/dist/client/assets/{tag-DsiUPF90.js → tag-DBfpQDuJ.js} +1 -1
- package/template/dist/client/assets/tenant-CizbLaLJ.js +1 -0
- package/template/dist/client/assets/{trash-2-DRblNbnA.js → trash-2-BP7fkd5b.js} +1 -1
- package/template/dist/client/assets/{triangle-alert-D1CLh-Vd.js → triangle-alert-CrOQEdJ2.js} +1 -1
- package/template/dist/client/assets/{wifi-BwXjnCqI.js → wifi-CwYSE0J4.js} +1 -1
- package/template/dist/client/assets/{x-BH2rJdFq.js → x-t615pnNR.js} +1 -1
- package/template/dist/client/content/index.html +5 -4
- package/template/dist/client/index.html +4 -3
- package/template/dist/client/merchant.html +18 -0
- package/template/dist/client/notifications/index.html +6 -5
- package/template/dist/client/tenant.html +18 -0
- package/template/dist/client/todos/index.html +6 -5
- package/template/dist/client/websocket/index.html +6 -5
- package/template/dist/cloudflare/chunk-HX7DVRDX.js +1 -0
- package/template/dist/cloudflare/{chunk-QBHAPWIA.js → chunk-IXJL2LE4.js} +1 -1
- package/template/dist/cloudflare/chunk-Q34AN3RF.js +14 -0
- package/template/dist/cloudflare/{chunk-BHPTQ4K2.js → chunk-ZAMVL4EG.js} +2 -2
- package/template/dist/cloudflare/cloudflare.js +35 -29
- package/template/dist/cloudflare/db-4AQOSFAX.js +1 -0
- package/template/dist/cloudflare/{migrator-2ZYYKNI5.js → migrator-TEPBVUFO.js} +1 -1
- package/template/dist/cloudflare/permission-service-impl-RE7NPW3Q.js +1 -0
- package/template/dist/cloudflare/schema-DVEMT3X2.js +1 -0
- package/template/dist/cloudflare/test-setup-Z2RYE5B4.js +265 -0
- package/template/dist/server/chunk-27SIJSPF.js +1 -0
- package/template/dist/server/chunk-37QNGBQU.js +1 -0
- package/template/dist/server/chunk-FIY4CGJJ.js +1 -0
- package/template/dist/server/chunk-HZUDBIT4.js +1 -0
- package/template/dist/server/chunk-I6OBDFDU.js +1 -0
- package/template/dist/server/chunk-JHNYLNG7.js +1 -0
- package/template/dist/server/chunk-MDOVVKKD.js +1 -0
- package/template/dist/server/chunk-NSOCT7E5.js +1 -0
- package/template/dist/server/chunk-OU5IGVVO.js +1 -0
- package/template/dist/server/chunk-OYCBNRMK.js +1 -0
- package/template/dist/server/chunk-P2RJNNGD.js +1 -0
- package/template/dist/server/chunk-UMAQLNPE.js +1 -0
- package/template/dist/server/chunk-XZZTSRSN.js +1 -0
- package/template/dist/server/content-service-5QVHDR5X.js +1 -0
- package/template/dist/server/db-FLI5L5DD.js +1 -0
- package/template/dist/server/dispute-service-E2FCYUEM.js +1 -0
- package/template/dist/server/init-72JXJV3I.js +46 -0
- package/template/dist/server/init-FWYXSKPX.js +46 -0
- package/template/dist/server/node.js +34 -28
- package/template/dist/server/order-service-TKGG5S5K.js +1 -0
- package/template/dist/server/permission-service-impl-M3AKEYNY.js +1 -0
- package/template/dist/server/schema-V4UG7HMU.js +1 -0
- package/template/dist/server/tenant-service-JG6UUWXQ.js +1 -0
- package/template/dist/server/tenant-service-XJWZSEDX.js +1 -0
- package/template/dist/{cloudflare/test-setup-NMZJZLRV.js → server/test-setup-VFOPBGYM.js} +83 -2
- package/template/dist/server/ticket-service-3RSW7V2Z.js +1 -0
- package/template/dist/server/todo-service-S6BGIO7D.js +1 -0
- package/template/package.json +1 -1
- package/template/src/client/App.tsx +3 -1
- package/template/src/client/pages/ContentListPage.tsx +36 -4
- package/template/src/client/pages/PluginsPage.tsx +112 -20
- package/template/src/client/pages/TodoPage.tsx +9 -1
- package/template/src/client/preset-ui-config.ts +79 -2
- package/template/src/merchant/pages/DisputesPage.tsx +11 -11
- package/template/src/merchant/pages/OrdersPage.tsx +4 -3
- package/template/src/merchant/pages/ProductsPage.tsx +2 -2
- package/template/src/merchant/stores/merchantStore.ts +11 -6
- package/template/src/server/db/init.ts +5 -253
- package/template/src/server/module-content/routes/topics-routes.ts +250 -0
- package/template/src/server/module-content/services/content-service.ts +1 -1
- package/template/src/server/module-plugin/services/plugin-seed-service.ts +623 -0
- package/template/src/server/module-tenant/routes/tenant-routes.ts +2 -2
- package/template/src/server/module-tenant/services/tenant-service.ts +63 -17
- package/template/src/server/module-todos/services/todo-service.ts +1 -1
- package/template/src/shared/modules/merchant/index.ts +9 -0
- package/template/src/shared/modules/merchant/schemas.ts +37 -0
- package/template/src/shared/modules/tenant/index.ts +2 -0
- package/template/src/shared/schemas/index.ts +27 -0
- package/template/src/tenant/layouts/Header.tsx +1 -1
- package/template/src/tenant/layouts/Sidebar.tsx +1 -1
- package/template/src/tenant/pages/SettingsPage.tsx +4 -8
- package/template/src/tenant/stores/tenantStore.ts +41 -302
- package/template/tsconfig.json +1 -0
- package/template/tsup.config.ts +11 -3
- package/template/dist/client/assets/ContentDetailPage-DdltMANL.js +0 -1
- package/template/dist/client/assets/ContentListPage-B63sUB6N.js +0 -1
- package/template/dist/client/assets/DashboardPage-tUMilc7Z.js +0 -11
- package/template/dist/client/assets/LoadingSpinner-DVYOLSRM.js +0 -6
- package/template/dist/client/assets/LoginPage-g9mSLIMC.js +0 -6
- package/template/dist/client/assets/NotificationPage-COTzp-HD.js +0 -1
- package/template/dist/client/assets/OrdersPage-BsPh4oEI.js +0 -11
- package/template/dist/client/assets/PluginsPage-BNtAe_yo.js +0 -6
- package/template/dist/client/assets/ProfilePage-dL_iSuZN.js +0 -16
- package/template/dist/client/assets/PublishPage-D96FnbLA.js +0 -1
- package/template/dist/client/assets/TopicsPage-DyLjZa4D.js +0 -6
- package/template/dist/client/assets/admin-Bh1vfz_L.js +0 -486
- package/template/dist/client/assets/index-1bA-ixFv.js +0 -114
- package/template/dist/client/assets/index-CWh3vXC_.css +0 -1
- package/template/dist/client/assets/main-DHnArIp_.js +0 -82
- package/template/dist/client/assets/pluginStore-XQfsm3iR.js +0 -1
- package/template/dist/client/content/content-1/index.html +0 -18
- package/template/dist/client/content/content-13/index.html +0 -18
- package/template/dist/client/content/content-14/index.html +0 -18
- package/template/dist/client/content/content-15/index.html +0 -18
- package/template/dist/client/content/content-19/index.html +0 -18
- package/template/dist/client/content/content-2/index.html +0 -18
- package/template/dist/client/content/content-20/index.html +0 -18
- package/template/dist/cloudflare/chunk-YY6FRMAQ.js +0 -14
- package/template/dist/cloudflare/db-7J42RQ3T.js +0 -1
- package/template/dist/cloudflare/permission-service-impl-TGXVSSSA.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/core/ws-client.ts","../../src/shared/core/sse-client.ts","../../src/cli/rpc/client.ts","../../src/cli/utils/api.ts","../../src/cli/utils/xcli-bridge.ts","../../src/cli/modules/todo/index.ts","../../src/cli/modules/notification/index.ts","../../src/cli/modules/config/index.ts","../../src/cli/modules/index.ts","../../src/cli/index.ts"],"names":["z","ok","fail","app"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @framework-baseline 4437e01c1b0bcabb\n *\n * 此文件属于框架层代码。如需修改,请添加以下说明:\n *\n * @framework-modify\n * @reason WSClientImpl 不再 extends WebSocket,改为动态基类模式兼容 browser/node 环境\n * @impact 所有使用 WSClientImpl 的地方不再需要 WebSocket 类型断言\n */\n\nexport type WSStatus = 'connecting' | 'open' | 'closed' | 'reconnecting'\n\nexport interface WSProtocol {\n rpc: Record<string, { in: unknown; out: unknown }>\n events: Record<string, unknown>\n}\n\nexport interface WSClient<T extends WSProtocol = WSProtocol> {\n readonly status: WSStatus\n getSocket(): WebSocket | null\n call<K extends keyof T['rpc']>(\n method: K,\n params: T['rpc'][K] extends { in: infer I } ? I : never,\n timeout?: number\n ): Promise<T['rpc'][K] extends { out: infer O } ? O : never>\n emit<K extends keyof T['events']>(type: K, payload: T['events'][K]): void\n on<K extends keyof T['events']>(type: K, handler: (payload: T['events'][K]) => void): () => void\n onStatusChange(handler: (status: WSStatus) => void): () => void\n close(): void\n}\n\ntype PendingRequest = {\n resolve: (val: unknown) => void\n reject: (err: unknown) => void\n timer: ReturnType<typeof setTimeout>\n}\n\ninterface WSMessageBase {\n id?: string\n method?: string\n type?: string\n payload?: unknown\n result?: unknown\n error?: string\n}\n\nconst _hasWebSocket = typeof globalThis !== 'undefined' && 'WebSocket' in globalThis\n\nconst WS_OPEN = _hasWebSocket ? (globalThis.WebSocket as typeof WebSocket).OPEN : 1\nconst WS_CONNECTING = _hasWebSocket ? (globalThis.WebSocket as typeof WebSocket).CONNECTING : 0\n\nconst WebSocketClass: typeof WebSocket | null = _hasWebSocket\n ? (globalThis.WebSocket as typeof WebSocket)\n : null\n\nclass StubWebSocket {\n binaryType: BinaryType = 'blob'\n bufferedAmount = 0\n extensions = ''\n onclose: ((ev: CloseEvent) => void) | null = null\n onerror: ((ev: Event) => void) | null = null\n onmessage: ((ev: MessageEvent) => void) | null = null\n onopen: ((ev: Event) => void) | null = null\n protocol = ''\n readyState = 0\n url = ''\n send(_data: string | ArrayBufferLike | Blob | ArrayBufferView) {\n return 0 as never\n }\n close(_code?: number, _reason?: string) {}\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent() {\n return true\n }\n static readonly CONNECTING = 0\n static readonly OPEN = 1\n static readonly CLOSING = 2\n static readonly CLOSED = 3\n}\n\ntype WSBase = WebSocket | StubWebSocket\n\nfunction createWSBase(url: string): WSBase {\n if (WebSocketClass) {\n return new WebSocketClass(url)\n }\n return new StubWebSocket()\n}\n\nexport class WSClientImpl<P extends WSProtocol = WSProtocol> implements WSClient<P> {\n private ws: WSBase\n private handlers = new Map<string, ((payload: unknown) => void)[]>()\n private pendingRequests = new Map<string, PendingRequest>()\n private statusHandlers: ((status: WSStatus) => void)[] = []\n private messageBuffer: string[] = []\n private _status: WSStatus = 'closed'\n\n get status(): WSStatus {\n return this._status\n }\n\n getSocket(): WebSocket | null {\n return (this.ws instanceof StubWebSocket ? null : this.ws) as WebSocket | null\n }\n\n constructor(url: string | URL) {\n this.ws = createWSBase(url.toString())\n this.attachSocket()\n }\n\n private attachSocket() {\n const ws = this.ws\n if (ws.readyState === WS_OPEN) {\n this._status = 'open'\n } else if (ws.readyState === WS_CONNECTING) {\n this._status = 'connecting'\n } else {\n this._status = 'closed'\n }\n ws.onmessage = msg => this.handleMessage(msg)\n ws.onclose = () => {\n if (this._status !== 'closed') {\n this.handleClose()\n }\n }\n ws.onerror = () => {\n if (this._status !== 'closed') {\n this.updateStatus('closed')\n }\n }\n ws.onopen = () => {\n if (this._status !== 'open') {\n this.handleOpen()\n }\n }\n }\n\n private handleOpen() {\n this.updateStatus('open')\n while (this.messageBuffer.length > 0) {\n const msg = this.messageBuffer.shift()\n if (msg) this.ws.send(msg)\n }\n }\n\n private handleClose() {\n this.updateStatus('closed')\n }\n\n private handleMessage(event: MessageEvent) {\n try {\n const data: WSMessageBase = JSON.parse(event.data)\n\n if ('id' in data && !('method' in data)) {\n const pending = this.pendingRequests.get(data.id!)\n if (pending) {\n clearTimeout(pending.timer)\n this.pendingRequests.delete(data.id!)\n if (data.error) pending.reject(new Error(data.error))\n else pending.resolve(data.result)\n }\n } else if ('type' in data) {\n const callbacks = this.handlers.get(data.type!)\n callbacks?.forEach(cb => cb(data.payload))\n }\n } catch (e) {\n console.error('Failed to parse WS message', e)\n }\n }\n\n private updateStatus(status: WSStatus) {\n this._status = status\n this.statusHandlers.forEach(h => h(status))\n }\n\n async call<K extends keyof P['rpc']>(\n method: K,\n params: P['rpc'][K] extends { in: infer I } ? I : never,\n timeout = 10000\n ): Promise<P['rpc'][K] extends { out: infer O } ? O : never> {\n return new Promise((resolve, reject) => {\n const id = Math.random().toString(36).slice(2)\n const timer = setTimeout(() => {\n this.pendingRequests.delete(id)\n reject(new Error(`RPC Timeout: ${String(method)}`))\n }, timeout)\n\n this.pendingRequests.set(id, {\n resolve: resolve as (val: unknown) => void,\n reject,\n timer,\n })\n\n this.sendRaw({ id, method, params })\n })\n }\n\n emit<K extends keyof P['events']>(type: K, payload: P['events'][K]) {\n this.sendRaw({ type, payload })\n }\n\n on<K extends keyof P['events']>(type: K, handler: (payload: P['events'][K]) => void) {\n const list = this.handlers.get(type as string) || []\n list.push(handler as (payload: unknown) => void)\n this.handlers.set(type as string, list)\n return () => {\n const filtered = (this.handlers.get(type as string) || []).filter(h => h !== handler)\n this.handlers.set(type as string, filtered)\n }\n }\n\n onStatusChange(handler: (status: WSStatus) => void) {\n this.statusHandlers.push(handler)\n return () => {\n this.statusHandlers = this.statusHandlers.filter(h => h !== handler)\n }\n }\n\n close(): void {\n this.ws.close()\n }\n\n private sendRaw(data: unknown) {\n const msg = JSON.stringify(data)\n if (this.ws.readyState === WS_OPEN) {\n this.ws.send(msg)\n } else {\n this.messageBuffer.push(msg)\n }\n }\n}\n\nexport function createWSClient<P extends WSProtocol>(url: string | URL): WSClient<P> {\n return new WSClientImpl<P>(url)\n}\n","/**\n * @framework-baseline 0a1efed4372dadaa\n *\n * 此文件属于框架层代码。如需修改,请添加以下说明:\n *\n * @framework-modify\n * @reason 使用 fetch API 替代 EventSource,支持自定义 headers(认证)\n * @impact SSE 客户端现在支持 Authorization header\n */\n\nexport interface SSEProtocol {\n events: Record<string, unknown>\n}\n\nexport interface SSEClient<P extends SSEProtocol = SSEProtocol> {\n readonly status: 'connecting' | 'open' | 'closed'\n on<K extends keyof P['events']>(type: K, handler: (payload: P['events'][K]) => void): () => void\n onStatusChange(handler: (status: 'connecting' | 'open' | 'closed') => void): () => void\n onError(handler: (error: Error) => void): () => void\n abort(): void\n}\n\nexport class SSEClientImpl<P extends SSEProtocol = SSEProtocol> implements SSEClient<P> {\n private abortController: AbortController | null = null\n private handlers = new Map<string, ((payload: unknown) => void)[]>()\n private statusHandlers: ((status: 'connecting' | 'open' | 'closed') => void)[] = []\n private errorHandlers: ((error: Error) => void)[] = []\n private _status: 'connecting' | 'open' | 'closed' = 'connecting'\n private reconnectAttempts = 0\n private maxReconnectAttempts = 5\n private reconnectDelay = 1000\n private url: string | URL\n private headers: Record<string, string>\n\n constructor(url: string | URL, headers: Record<string, string> = {}) {\n this.url = url\n this.headers = headers\n this.connect()\n }\n\n get status() {\n return this._status\n }\n\n private async connect() {\n this._status = 'connecting'\n this.abortController = new AbortController()\n\n try {\n const response = await fetch(this.url.toString(), {\n headers: {\n Accept: 'text/event-stream',\n ...this.headers,\n },\n signal: this.abortController.signal,\n })\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n\n this._status = 'open'\n this.reconnectAttempts = 0\n this.statusHandlers.forEach(h => h('open'))\n\n const reader = response.body?.getReader()\n if (!reader) {\n throw new Error('No response body')\n }\n\n const decoder = new TextDecoder()\n let buffer = ''\n let eventType = 'message'\n let dataBuffer = ''\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n\n // Process complete messages (separated by \\n\\n)\n const messages = buffer.split('\\n\\n')\n // Keep the last incomplete message in buffer\n buffer = messages.pop() || ''\n\n for (const message of messages) {\n const lines = message.split('\\n')\n eventType = 'message'\n dataBuffer = ''\n\n for (const line of lines) {\n if (line.startsWith('event:')) {\n eventType = line.slice(6).trim()\n } else if (line.startsWith('data:')) {\n dataBuffer = line.slice(5).trim()\n }\n }\n\n if (dataBuffer) {\n this.handleMessage(eventType, dataBuffer)\n }\n }\n }\n\n this._status = 'closed'\n this.statusHandlers.forEach(h => h('closed'))\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n this._status = 'closed'\n this.statusHandlers.forEach(h => h('closed'))\n return\n }\n\n this.errorHandlers.forEach(h => h(error as Error))\n this.attemptReconnect()\n }\n }\n\n private attemptReconnect() {\n if (this.reconnectAttempts < this.maxReconnectAttempts) {\n this.reconnectAttempts++\n setTimeout(() => {\n this.connect()\n }, this.reconnectDelay * this.reconnectAttempts)\n } else {\n this._status = 'closed'\n this.statusHandlers.forEach(h => h('closed'))\n }\n }\n\n private handleMessage(eventType: string, data: string) {\n try {\n const parsed = JSON.parse(data)\n const handlers = this.handlers.get(eventType)\n handlers?.forEach(h => h(parsed))\n } catch {\n const handlers = this.handlers.get(eventType)\n handlers?.forEach(h => h(data))\n }\n }\n\n on<K extends keyof P['events']>(type: K, handler: (payload: P['events'][K]) => void): () => void {\n const eventName = type as string\n const list = this.handlers.get(eventName) || []\n list.push(handler as (payload: unknown) => void)\n this.handlers.set(eventName, list)\n\n return () => {\n const filtered = (this.handlers.get(eventName) || []).filter(h => h !== handler)\n this.handlers.set(eventName, filtered)\n }\n }\n\n onStatusChange(handler: (status: 'connecting' | 'open' | 'closed') => void): () => void {\n this.statusHandlers.push(handler)\n handler(this._status)\n return () => {\n this.statusHandlers = this.statusHandlers.filter(h => h !== handler)\n }\n }\n\n onError(handler: (error: Error) => void): () => void {\n this.errorHandlers.push(handler)\n return () => {\n this.errorHandlers = this.errorHandlers.filter(h => h !== handler)\n }\n }\n\n abort(): void {\n if (this.abortController) {\n this.abortController.abort()\n this.abortController = null\n }\n this._status = 'closed'\n this.statusHandlers.forEach(h => h('closed'))\n }\n}\n\nexport function createSSEClient<P extends SSEProtocol>(\n url: string | URL,\n headers: Record<string, string> = {}\n): SSEClient<P> {\n return new SSEClientImpl<P>(url, headers)\n}\n","import { hc } from 'hono/client'\nimport type { ClientApiType, AppType } from '@server/index'\nimport { WSClientImpl } from '@shared/core/ws-client'\nimport { SSEClientImpl } from '@shared/core/sse-client'\n\nexport type { AppType }\n\n/**\n * CLI RPC 请求扩展参数\n */\nexport interface CliFetchExtendOptions {\n /** 是否显示详细日志 */\n verbose?: boolean\n /** 超时时间 */\n timeout?: number\n}\n\nexport function createRPCClient(baseUrl: string) {\n return hc<ClientApiType>(baseUrl, {\n webSocket: url => new WSClientImpl(url) as unknown as WebSocket,\n sse: url => new SSEClientImpl(url),\n })\n}\n","import { createRPCClient } from '../rpc/client'\n\nconst DEFAULT_BASE_URL = 'http://localhost:3010'\n\nlet globalBaseUrl = process.env.BIOMIMIC_API_URL || DEFAULT_BASE_URL\n\nexport function setBaseUrl(url: string) {\n globalBaseUrl = url\n}\n\nexport function getBaseUrl(): string {\n return globalBaseUrl\n}\n\nexport function getClient() {\n return createRPCClient(globalBaseUrl)\n}\n","/**\n * Bridge between zod v4 (template) and xcli-core's zod v3 types.\n *\n * xcli-core uses zod v3 internally, but the template uses zod v4.\n * At runtime, both versions' .parse() methods work the same way.\n * This helper bridges the type mismatch at the xcli-core boundary.\n */\nimport type { ZodType } from 'zod'\n\n/**\n * Cast a zod v4 schema for xcli-core's site.command() parameters field.\n * xcli-core's TypeScript types expect zod v3 ZodSchema, which is\n * structurally different from zod v4's ZodType. However, the runtime\n * .parse() API is identical, so this cast is safe.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function asXcliSchema<T extends ZodType>(schema: T): any {\n return schema\n}\n","import type { SiteInstance } from '@dyyz1993/xcli-core'\nimport { ok, fail } from '@dyyz1993/xcli-core'\nimport { z } from 'zod'\nimport { getClient } from '@cli/utils/api'\nimport { asXcliSchema } from '@cli/utils/xcli-bridge'\n\nexport function registerTodoCommands(site: SiteInstance) {\n site.command('list', {\n description: 'List all todos',\n parameters: asXcliSchema(\n z.object({\n limit: z.coerce.number().default(20).describe('Limit results'),\n })\n ),\n handler: async () => {\n try {\n const client = getClient()\n const res = await client.api.todos.$get()\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to list todos')\n }\n },\n })\n\n site.command('get', {\n description: 'Get a todo by ID',\n parameters: asXcliSchema(\n z.object({\n id: z.string().describe('Todo ID'),\n })\n ),\n handler: async (params: { id: string }) => {\n try {\n const client = getClient()\n const res = await client.api.todos[':id'].$get({ param: { id: params.id } })\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to get todo')\n }\n },\n })\n\n site.command('create', {\n description: 'Create a new todo',\n parameters: asXcliSchema(\n z.object({\n title: z.string().min(1).describe('Todo title'),\n description: z.string().optional().describe('Todo description'),\n })\n ),\n handler: async (params: { title: string; description?: string }) => {\n try {\n const client = getClient()\n const res = await client.api.todos.$post({ json: params })\n const data = await res.json()\n return ok(data, ['Todo created'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to create todo')\n }\n },\n })\n\n site.command('update', {\n description: 'Update a todo',\n parameters: asXcliSchema(\n z.object({\n id: z.string().describe('Todo ID'),\n title: z.string().optional().describe('New title'),\n description: z.string().optional().describe('New description'),\n status: z.enum(['pending', 'in_progress', 'completed']).optional().describe('New status'),\n })\n ),\n handler: async (params: {\n id: string\n title?: string\n description?: string\n status?: 'pending' | 'in_progress' | 'completed'\n }) => {\n try {\n const { id, ...body } = params\n const client = getClient()\n const res = await client.api.todos[':id'].$put({\n param: { id },\n json: body,\n })\n const data = await res.json()\n return ok(data, ['Todo updated'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to update todo')\n }\n },\n })\n\n site.command('delete', {\n description: 'Delete a todo',\n parameters: asXcliSchema(\n z.object({\n id: z.string().describe('Todo ID'),\n })\n ),\n handler: async (params: { id: string }) => {\n try {\n const client = getClient()\n const res = await client.api.todos[':id'].$delete({ param: { id: params.id } })\n const data = await res.json()\n return ok(data, ['Todo deleted'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to delete todo')\n }\n },\n })\n}\n","import type { SiteInstance } from '@dyyz1993/xcli-core'\nimport { ok, fail } from '@dyyz1993/xcli-core'\nimport { z } from 'zod'\nimport { getClient } from '@cli/utils/api'\nimport { asXcliSchema } from '@cli/utils/xcli-bridge'\n\nexport function registerNotificationCommands(site: SiteInstance) {\n site.command('list', {\n description: 'List all notifications',\n parameters: asXcliSchema(\n z.object({\n 'unread-only': z.boolean().default(false).describe('Show only unread'),\n limit: z.coerce.number().default(20).describe('Limit results'),\n })\n ),\n handler: async (params: { 'unread-only': boolean; limit: number }) => {\n try {\n const client = getClient()\n const res = await client.api.notifications.$get({\n query: { unreadOnly: String(params['unread-only']), limit: String(params.limit) },\n })\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to list notifications')\n }\n },\n })\n\n site.command('create', {\n description: 'Create a new notification',\n parameters: asXcliSchema(\n z.object({\n title: z.string().min(1).describe('Notification title'),\n message: z.string().min(1).describe('Notification message'),\n type: z.enum(['info', 'warning', 'success', 'error']).default('info').describe('Type'),\n })\n ),\n handler: async (params: {\n title: string\n message: string\n type: 'info' | 'warning' | 'success' | 'error'\n }) => {\n try {\n const client = getClient()\n const res = await client.api.notifications.$post({ json: params })\n const data = await res.json()\n return ok(data, ['Notification created'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to create notification')\n }\n },\n })\n\n site.command('unread-count', {\n description: 'Get unread notification count',\n parameters: asXcliSchema(z.object({})),\n handler: async () => {\n try {\n const client = getClient()\n const res = await client.api.notifications['unread-count'].$get()\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to get unread count')\n }\n },\n })\n\n site.command('mark-read', {\n description: 'Mark a notification as read',\n parameters: asXcliSchema(\n z.object({\n id: z.string().describe('Notification ID'),\n })\n ),\n handler: async (params: { id: string }) => {\n try {\n const client = getClient()\n const res = await client.api.notifications[':id'].read.$patch({ param: { id: params.id } })\n const data = await res.json()\n return ok(data, ['Marked as read'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to mark as read')\n }\n },\n })\n\n site.command('delete', {\n description: 'Delete a notification',\n parameters: asXcliSchema(\n z.object({\n id: z.string().describe('Notification ID'),\n })\n ),\n handler: async (params: { id: string }) => {\n try {\n const client = getClient()\n const res = await client.api.notifications[':id'].$delete({ param: { id: params.id } })\n const data = await res.json()\n return ok(data, ['Notification deleted'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to delete notification')\n }\n },\n })\n}\n","import type { SiteInstance } from '@dyyz1993/xcli-core'\nimport { ok, fail } from '@dyyz1993/xcli-core'\nimport { z } from 'zod'\nimport { getBaseUrl, setBaseUrl, getClient } from '@cli/utils/api'\nimport { asXcliSchema } from '@cli/utils/xcli-bridge'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\n\nconst CONFIG_DIR = path.join(os.homedir(), '.biomimic')\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json')\n\ninterface Config {\n baseUrl: string\n stats?: {\n totalCalls: number\n lastCallAt?: string\n commands?: Record<string, number>\n }\n [key: string]: string | number | boolean | undefined | Config['stats']\n}\n\nfunction loadConfig(): Config {\n try {\n if (fs.existsSync(CONFIG_FILE)) {\n const content = fs.readFileSync(CONFIG_FILE, 'utf-8')\n return JSON.parse(content)\n }\n } catch {\n // ignore\n }\n return { baseUrl: 'http://localhost:3010' }\n}\n\nfunction saveConfig(config: Config) {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true })\n }\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2))\n}\n\nexport function registerConfigCommands(site: SiteInstance) {\n site.command('config-get', {\n description: 'Show current configuration',\n parameters: asXcliSchema(\n z.object({\n key: z.string().optional().describe('Get specific config key'),\n })\n ),\n handler: async (params: { key?: string }) => {\n const cfg = loadConfig()\n if (params.key) {\n const value = cfg[params.key]\n return ok({ [params.key]: value ?? 'not set' })\n }\n return ok(cfg)\n },\n })\n\n site.command('config-set', {\n description: 'Set configuration value',\n parameters: asXcliSchema(\n z.object({\n url: z.string().optional().describe('Set server URL'),\n })\n ),\n handler: async (params: { url?: string }) => {\n const cfg = loadConfig()\n if (params.url) {\n cfg.baseUrl = params.url\n setBaseUrl(params.url)\n }\n saveConfig(cfg)\n return ok(cfg, ['Configuration saved'])\n },\n })\n\n site.command('config-url', {\n description: 'Show or set server URL',\n parameters: asXcliSchema(\n z.object({\n url: z.string().optional().describe('New server URL'),\n })\n ),\n handler: async (params: { url?: string }) => {\n if (params.url) {\n const cfg = loadConfig()\n cfg.baseUrl = params.url\n setBaseUrl(params.url)\n saveConfig(cfg)\n return ok({ url: params.url }, [`Server URL set to: ${params.url}`])\n }\n return ok({ url: getBaseUrl() })\n },\n })\n\n site.command('config-status', {\n description: 'Check server connection status',\n parameters: asXcliSchema(z.object({})),\n handler: async () => {\n try {\n const client = getClient()\n type HealthClient = { health: { $get: () => Promise<Response> } }\n const res = await (client as unknown as HealthClient).health.$get()\n const data = await res.json()\n return ok(data, ['Server is reachable'])\n } catch (error) {\n return fail(`Server not reachable: ${getBaseUrl()} - ${String(error)}`)\n }\n },\n })\n\n site.command('config-reset', {\n description: 'Reset configuration to defaults',\n parameters: asXcliSchema(z.object({})),\n handler: async () => {\n const defaultConfig: Config = { baseUrl: 'http://localhost:3010' }\n saveConfig(defaultConfig)\n setBaseUrl(defaultConfig.baseUrl)\n return ok(defaultConfig, ['Configuration reset to defaults'])\n },\n })\n\n site.command('config-path', {\n description: 'Show config file path',\n parameters: asXcliSchema(z.object({})),\n handler: async () => {\n return ok({ path: CONFIG_FILE })\n },\n })\n}\n\nexport { loadConfig, saveConfig, CONFIG_FILE }\n","import type { Core } from '@dyyz1993/xcli-core'\nimport { registerTodoCommands } from './todo'\nimport { registerNotificationCommands } from './notification'\nimport { registerConfigCommands } from './config'\n\n/**\n * Register all builtin CLI commands to xcli-core.\n * Each register function receives a SiteInstance for command registration.\n */\nexport function registerBuiltinCommands(app: Core) {\n const api = app.loader.getAPI()\n\n // Create a builtin site representing the local server\n const site = api.createSite({\n name: 'local-server',\n url: 'http://localhost:3010',\n })\n\n registerTodoCommands(site)\n registerNotificationCommands(site)\n registerConfigCommands(site)\n}\n\nexport { registerTodoCommands, registerNotificationCommands, registerConfigCommands }\n","import { Core, type CoreConfig } from '@dyyz1993/xcli-core'\nimport { registerBuiltinCommands } from './modules'\n\nconst coreConfig: CoreConfig = {\n name: 'biomimic',\n version: '0.1.0',\n description: 'Biomimic CLI - RPC service & code generation tools',\n configDirName: '.biomimic',\n envPrefix: 'BIOMIMIC',\n pluginDirs: [],\n}\n\nconst app = new Core(coreConfig)\n\n// Register builtin commands (todo/notification/config modules)\nregisterBuiltinCommands(app)\n\n// Execute CLI\nconst exitCode = await app.run(process.argv.slice(2))\nprocess.exit(exitCode)\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/shared/core/ws-client.ts","../../src/shared/core/sse-client.ts","../../src/cli/rpc/client.ts","../../src/cli/utils/api.ts","../../src/cli/modules/todo/index.ts","../../src/cli/modules/notification/index.ts","../../src/cli/modules/config/index.ts","../../src/cli/modules/plugin/index.ts","../../src/cli/modules/auth/index.ts","../../src/cli/modules/index.ts","../../src/cli/index.ts"],"names":["z","ok","fail","app"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @framework-baseline 4437e01c1b0bcabb\n *\n * 此文件属于框架层代码。如需修改,请添加以下说明:\n *\n * @framework-modify\n * @reason WSClientImpl 不再 extends WebSocket,改为动态基类模式兼容 browser/node 环境\n * @impact 所有使用 WSClientImpl 的地方不再需要 WebSocket 类型断言\n */\n\nexport type WSStatus = 'connecting' | 'open' | 'closed' | 'reconnecting'\n\nexport interface WSProtocol {\n rpc: Record<string, { in: unknown; out: unknown }>\n events: Record<string, unknown>\n}\n\nexport interface WSClient<T extends WSProtocol = WSProtocol> {\n readonly status: WSStatus\n getSocket(): WebSocket | null\n call<K extends keyof T['rpc']>(\n method: K,\n params: T['rpc'][K] extends { in: infer I } ? I : never,\n timeout?: number\n ): Promise<T['rpc'][K] extends { out: infer O } ? O : never>\n emit<K extends keyof T['events']>(type: K, payload: T['events'][K]): void\n on<K extends keyof T['events']>(type: K, handler: (payload: T['events'][K]) => void): () => void\n onStatusChange(handler: (status: WSStatus) => void): () => void\n close(): void\n}\n\ntype PendingRequest = {\n resolve: (val: unknown) => void\n reject: (err: unknown) => void\n timer: ReturnType<typeof setTimeout>\n}\n\ninterface WSMessageBase {\n id?: string\n method?: string\n type?: string\n payload?: unknown\n result?: unknown\n error?: string\n}\n\nconst _hasWebSocket = typeof globalThis !== 'undefined' && 'WebSocket' in globalThis\n\nconst WS_OPEN = _hasWebSocket ? (globalThis.WebSocket as typeof WebSocket).OPEN : 1\nconst WS_CONNECTING = _hasWebSocket ? (globalThis.WebSocket as typeof WebSocket).CONNECTING : 0\n\nconst WebSocketClass: typeof WebSocket | null = _hasWebSocket\n ? (globalThis.WebSocket as typeof WebSocket)\n : null\n\nclass StubWebSocket {\n binaryType: BinaryType = 'blob'\n bufferedAmount = 0\n extensions = ''\n onclose: ((ev: CloseEvent) => void) | null = null\n onerror: ((ev: Event) => void) | null = null\n onmessage: ((ev: MessageEvent) => void) | null = null\n onopen: ((ev: Event) => void) | null = null\n protocol = ''\n readyState = 0\n url = ''\n send(_data: string | ArrayBufferLike | Blob | ArrayBufferView) {\n return 0 as never\n }\n close(_code?: number, _reason?: string) {}\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent() {\n return true\n }\n static readonly CONNECTING = 0\n static readonly OPEN = 1\n static readonly CLOSING = 2\n static readonly CLOSED = 3\n}\n\ntype WSBase = WebSocket | StubWebSocket\n\nfunction createWSBase(url: string): WSBase {\n if (WebSocketClass) {\n return new WebSocketClass(url)\n }\n return new StubWebSocket()\n}\n\nexport class WSClientImpl<P extends WSProtocol = WSProtocol> implements WSClient<P> {\n private ws: WSBase\n private handlers = new Map<string, ((payload: unknown) => void)[]>()\n private pendingRequests = new Map<string, PendingRequest>()\n private statusHandlers: ((status: WSStatus) => void)[] = []\n private messageBuffer: string[] = []\n private _status: WSStatus = 'closed'\n\n get status(): WSStatus {\n return this._status\n }\n\n getSocket(): WebSocket | null {\n return (this.ws instanceof StubWebSocket ? null : this.ws) as WebSocket | null\n }\n\n constructor(url: string | URL) {\n this.ws = createWSBase(url.toString())\n this.attachSocket()\n }\n\n private attachSocket() {\n const ws = this.ws\n if (ws.readyState === WS_OPEN) {\n this._status = 'open'\n } else if (ws.readyState === WS_CONNECTING) {\n this._status = 'connecting'\n } else {\n this._status = 'closed'\n }\n ws.onmessage = msg => this.handleMessage(msg)\n ws.onclose = () => {\n if (this._status !== 'closed') {\n this.handleClose()\n }\n }\n ws.onerror = () => {\n if (this._status !== 'closed') {\n this.updateStatus('closed')\n }\n }\n ws.onopen = () => {\n if (this._status !== 'open') {\n this.handleOpen()\n }\n }\n }\n\n private handleOpen() {\n this.updateStatus('open')\n while (this.messageBuffer.length > 0) {\n const msg = this.messageBuffer.shift()\n if (msg) this.ws.send(msg)\n }\n }\n\n private handleClose() {\n this.updateStatus('closed')\n }\n\n private handleMessage(event: MessageEvent) {\n try {\n const data: WSMessageBase = JSON.parse(event.data)\n\n if ('id' in data && !('method' in data)) {\n const pending = this.pendingRequests.get(data.id!)\n if (pending) {\n clearTimeout(pending.timer)\n this.pendingRequests.delete(data.id!)\n if (data.error) pending.reject(new Error(data.error))\n else pending.resolve(data.result)\n }\n } else if ('type' in data) {\n const callbacks = this.handlers.get(data.type!)\n callbacks?.forEach(cb => cb(data.payload))\n }\n } catch (e) {\n console.error('Failed to parse WS message', e)\n }\n }\n\n private updateStatus(status: WSStatus) {\n this._status = status\n this.statusHandlers.forEach(h => h(status))\n }\n\n async call<K extends keyof P['rpc']>(\n method: K,\n params: P['rpc'][K] extends { in: infer I } ? I : never,\n timeout = 10000\n ): Promise<P['rpc'][K] extends { out: infer O } ? O : never> {\n return new Promise((resolve, reject) => {\n const id = Math.random().toString(36).slice(2)\n const timer = setTimeout(() => {\n this.pendingRequests.delete(id)\n reject(new Error(`RPC Timeout: ${String(method)}`))\n }, timeout)\n\n this.pendingRequests.set(id, {\n resolve: resolve as (val: unknown) => void,\n reject,\n timer,\n })\n\n this.sendRaw({ id, method, params })\n })\n }\n\n emit<K extends keyof P['events']>(type: K, payload: P['events'][K]) {\n this.sendRaw({ type, payload })\n }\n\n on<K extends keyof P['events']>(type: K, handler: (payload: P['events'][K]) => void) {\n const list = this.handlers.get(type as string) || []\n list.push(handler as (payload: unknown) => void)\n this.handlers.set(type as string, list)\n return () => {\n const filtered = (this.handlers.get(type as string) || []).filter(h => h !== handler)\n this.handlers.set(type as string, filtered)\n }\n }\n\n onStatusChange(handler: (status: WSStatus) => void) {\n this.statusHandlers.push(handler)\n return () => {\n this.statusHandlers = this.statusHandlers.filter(h => h !== handler)\n }\n }\n\n close(): void {\n this.ws.close()\n }\n\n private sendRaw(data: unknown) {\n const msg = JSON.stringify(data)\n if (this.ws.readyState === WS_OPEN) {\n this.ws.send(msg)\n } else {\n this.messageBuffer.push(msg)\n }\n }\n}\n\nexport function createWSClient<P extends WSProtocol>(url: string | URL): WSClient<P> {\n return new WSClientImpl<P>(url)\n}\n","/**\n * @framework-baseline 0a1efed4372dadaa\n *\n * 此文件属于框架层代码。如需修改,请添加以下说明:\n *\n * @framework-modify\n * @reason 使用 fetch API 替代 EventSource,支持自定义 headers(认证)\n * @impact SSE 客户端现在支持 Authorization header\n */\n\nexport interface SSEProtocol {\n events: Record<string, unknown>\n}\n\nexport interface SSEClient<P extends SSEProtocol = SSEProtocol> {\n readonly status: 'connecting' | 'open' | 'closed'\n on<K extends keyof P['events']>(type: K, handler: (payload: P['events'][K]) => void): () => void\n onStatusChange(handler: (status: 'connecting' | 'open' | 'closed') => void): () => void\n onError(handler: (error: Error) => void): () => void\n abort(): void\n}\n\nexport class SSEClientImpl<P extends SSEProtocol = SSEProtocol> implements SSEClient<P> {\n private abortController: AbortController | null = null\n private handlers = new Map<string, ((payload: unknown) => void)[]>()\n private statusHandlers: ((status: 'connecting' | 'open' | 'closed') => void)[] = []\n private errorHandlers: ((error: Error) => void)[] = []\n private _status: 'connecting' | 'open' | 'closed' = 'connecting'\n private reconnectAttempts = 0\n private maxReconnectAttempts = 5\n private reconnectDelay = 1000\n private url: string | URL\n private headers: Record<string, string>\n\n constructor(url: string | URL, headers: Record<string, string> = {}) {\n this.url = url\n this.headers = headers\n this.connect()\n }\n\n get status() {\n return this._status\n }\n\n private async connect() {\n this._status = 'connecting'\n this.abortController = new AbortController()\n\n try {\n const response = await fetch(this.url.toString(), {\n headers: {\n Accept: 'text/event-stream',\n ...this.headers,\n },\n signal: this.abortController.signal,\n })\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`)\n }\n\n this._status = 'open'\n this.reconnectAttempts = 0\n this.statusHandlers.forEach(h => h('open'))\n\n const reader = response.body?.getReader()\n if (!reader) {\n throw new Error('No response body')\n }\n\n const decoder = new TextDecoder()\n let buffer = ''\n let eventType = 'message'\n let dataBuffer = ''\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n\n // Process complete messages (separated by \\n\\n)\n const messages = buffer.split('\\n\\n')\n // Keep the last incomplete message in buffer\n buffer = messages.pop() || ''\n\n for (const message of messages) {\n const lines = message.split('\\n')\n eventType = 'message'\n dataBuffer = ''\n\n for (const line of lines) {\n if (line.startsWith('event:')) {\n eventType = line.slice(6).trim()\n } else if (line.startsWith('data:')) {\n dataBuffer = line.slice(5).trim()\n }\n }\n\n if (dataBuffer) {\n this.handleMessage(eventType, dataBuffer)\n }\n }\n }\n\n this._status = 'closed'\n this.statusHandlers.forEach(h => h('closed'))\n } catch (error) {\n if ((error as Error).name === 'AbortError') {\n this._status = 'closed'\n this.statusHandlers.forEach(h => h('closed'))\n return\n }\n\n this.errorHandlers.forEach(h => h(error as Error))\n this.attemptReconnect()\n }\n }\n\n private attemptReconnect() {\n if (this.reconnectAttempts < this.maxReconnectAttempts) {\n this.reconnectAttempts++\n setTimeout(() => {\n this.connect()\n }, this.reconnectDelay * this.reconnectAttempts)\n } else {\n this._status = 'closed'\n this.statusHandlers.forEach(h => h('closed'))\n }\n }\n\n private handleMessage(eventType: string, data: string) {\n try {\n const parsed = JSON.parse(data)\n const handlers = this.handlers.get(eventType)\n handlers?.forEach(h => h(parsed))\n } catch {\n const handlers = this.handlers.get(eventType)\n handlers?.forEach(h => h(data))\n }\n }\n\n on<K extends keyof P['events']>(type: K, handler: (payload: P['events'][K]) => void): () => void {\n const eventName = type as string\n const list = this.handlers.get(eventName) || []\n list.push(handler as (payload: unknown) => void)\n this.handlers.set(eventName, list)\n\n return () => {\n const filtered = (this.handlers.get(eventName) || []).filter(h => h !== handler)\n this.handlers.set(eventName, filtered)\n }\n }\n\n onStatusChange(handler: (status: 'connecting' | 'open' | 'closed') => void): () => void {\n this.statusHandlers.push(handler)\n handler(this._status)\n return () => {\n this.statusHandlers = this.statusHandlers.filter(h => h !== handler)\n }\n }\n\n onError(handler: (error: Error) => void): () => void {\n this.errorHandlers.push(handler)\n return () => {\n this.errorHandlers = this.errorHandlers.filter(h => h !== handler)\n }\n }\n\n abort(): void {\n if (this.abortController) {\n this.abortController.abort()\n this.abortController = null\n }\n this._status = 'closed'\n this.statusHandlers.forEach(h => h('closed'))\n }\n}\n\nexport function createSSEClient<P extends SSEProtocol>(\n url: string | URL,\n headers: Record<string, string> = {}\n): SSEClient<P> {\n return new SSEClientImpl<P>(url, headers)\n}\n","import { hc } from 'hono/client'\nimport type { ClientApiType, AppType } from '@server/index'\nimport { WSClientImpl } from '@shared/core/ws-client'\nimport { SSEClientImpl } from '@shared/core/sse-client'\n\nexport type { AppType }\n\n/**\n * CLI RPC 请求扩展参数\n */\nexport interface CliFetchExtendOptions {\n /** 是否显示详细日志 */\n verbose?: boolean\n /** 超时时间 */\n timeout?: number\n}\n\nexport function createRPCClient(baseUrl: string) {\n return hc<ClientApiType>(baseUrl, {\n webSocket: url => new WSClientImpl(url) as unknown as WebSocket,\n sse: url => new SSEClientImpl(url),\n })\n}\n","import { createRPCClient } from '../rpc/client'\n\nconst DEFAULT_BASE_URL = 'http://localhost:3010'\n\nlet globalBaseUrl = process.env.BIOMIMIC_API_URL || DEFAULT_BASE_URL\n\nexport function setBaseUrl(url: string) {\n globalBaseUrl = url\n}\n\nexport function getBaseUrl(): string {\n return globalBaseUrl\n}\n\nexport function getClient() {\n return createRPCClient(globalBaseUrl)\n}\n","import type { SiteInstance } from '@dyyz1993/xcli-core'\nimport { ok, fail } from '@dyyz1993/xcli-core'\nimport { z } from 'zod'\nimport { getClient } from '@cli/utils/api'\n\nexport function registerTodoCommands(site: SiteInstance) {\n site.command('list', {\n description: 'List all todos',\n parameters: z.object({\n limit: z.coerce.number().default(20).describe('Limit results'),\n }),\n handler: async () => {\n try {\n const client = getClient()\n const res = await client.api.todos.$get()\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to list todos')\n }\n },\n })\n\n site.command('get', {\n description: 'Get a todo by ID',\n parameters: z.object({\n id: z.string().describe('Todo ID'),\n }),\n handler: async (params: unknown) => {\n const p = params as { id: string }\n try {\n const client = getClient()\n const res = await client.api.todos[':id'].$get({ param: { id: p.id } })\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to get todo')\n }\n },\n })\n\n site.command('create', {\n description: 'Create a new todo',\n parameters: z.object({\n title: z.string().min(1).describe('Todo title'),\n description: z.string().optional().describe('Todo description'),\n }),\n handler: async (params: unknown) => {\n const p = params as { title: string; description?: string }\n try {\n const client = getClient()\n const res = await client.api.todos.$post({ json: p })\n const data = await res.json()\n return ok(data, ['Todo created'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to create todo')\n }\n },\n })\n\n site.command('update', {\n description: 'Update a todo',\n parameters: z.object({\n id: z.string().describe('Todo ID'),\n title: z.string().optional().describe('New title'),\n description: z.string().optional().describe('New description'),\n status: z.enum(['pending', 'in_progress', 'completed']).optional().describe('New status'),\n }),\n handler: async (params: unknown) => {\n const p = params as {\n id: string\n title?: string\n description?: string\n status?: 'pending' | 'in_progress' | 'completed'\n }\n try {\n const { id, ...body } = p\n const client = getClient()\n const res = await client.api.todos[':id'].$put({\n param: { id },\n json: body,\n })\n const data = await res.json()\n return ok(data, ['Todo updated'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to update todo')\n }\n },\n })\n\n site.command('delete', {\n description: 'Delete a todo',\n parameters: z.object({\n id: z.string().describe('Todo ID'),\n }),\n handler: async (params: unknown) => {\n const p = params as { id: string }\n try {\n const client = getClient()\n const res = await client.api.todos[':id'].$delete({ param: { id: p.id } })\n const data = await res.json()\n return ok(data, ['Todo deleted'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to delete todo')\n }\n },\n })\n}\n","import type { SiteInstance } from '@dyyz1993/xcli-core'\nimport { ok, fail } from '@dyyz1993/xcli-core'\nimport { z } from 'zod'\nimport { getClient } from '@cli/utils/api'\n\nexport function registerNotificationCommands(site: SiteInstance) {\n site.command('list', {\n description: 'List all notifications',\n parameters: z.object({\n 'unread-only': z.boolean().default(false).describe('Show only unread'),\n limit: z.coerce.number().default(20).describe('Limit results'),\n }),\n handler: async (params: unknown) => {\n const p = params as { 'unread-only': boolean; limit: number }\n try {\n const client = getClient()\n const res = await client.api.notifications.$get({\n query: { unreadOnly: String(p['unread-only']), limit: String(p.limit) },\n })\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to list notifications')\n }\n },\n })\n\n site.command('create', {\n description: 'Create a new notification',\n parameters: z.object({\n title: z.string().min(1).describe('Notification title'),\n message: z.string().min(1).describe('Notification message'),\n type: z.enum(['info', 'warning', 'success', 'error']).default('info').describe('Type'),\n }),\n handler: async (params: unknown) => {\n const p = params as {\n title: string\n message: string\n type: 'info' | 'warning' | 'success' | 'error'\n }\n try {\n const client = getClient()\n const res = await client.api.notifications.$post({ json: p })\n const data = await res.json()\n return ok(data, ['Notification created'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to create notification')\n }\n },\n })\n\n site.command('unread-count', {\n description: 'Get unread notification count',\n parameters: z.object({}),\n handler: async () => {\n try {\n const client = getClient()\n const res = await client.api.notifications['unread-count'].$get()\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to get unread count')\n }\n },\n })\n\n site.command('mark-read', {\n description: 'Mark a notification as read',\n parameters: z.object({\n id: z.string().describe('Notification ID'),\n }),\n handler: async (params: unknown) => {\n const p = params as { id: string }\n try {\n const client = getClient()\n const res = await client.api.notifications[':id'].read.$patch({ param: { id: p.id } })\n const data = await res.json()\n return ok(data, ['Marked as read'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to mark as read')\n }\n },\n })\n\n site.command('delete', {\n description: 'Delete a notification',\n parameters: z.object({\n id: z.string().describe('Notification ID'),\n }),\n handler: async (params: unknown) => {\n const p = params as { id: string }\n try {\n const client = getClient()\n const res = await client.api.notifications[':id'].$delete({ param: { id: p.id } })\n const data = await res.json()\n return ok(data, ['Notification deleted'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to delete notification')\n }\n },\n })\n}\n","import type { SiteInstance } from '@dyyz1993/xcli-core'\nimport { ok, fail } from '@dyyz1993/xcli-core'\nimport { z } from 'zod'\nimport { getBaseUrl, setBaseUrl, getClient } from '@cli/utils/api'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\n\nconst CONFIG_DIR = path.join(os.homedir(), '.biomimic')\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json')\n\ninterface Config {\n baseUrl: string\n stats?: {\n totalCalls: number\n lastCallAt?: string\n commands?: Record<string, number>\n }\n [key: string]: string | number | boolean | undefined | Config['stats']\n}\n\nfunction loadConfig(): Config {\n try {\n if (fs.existsSync(CONFIG_FILE)) {\n const content = fs.readFileSync(CONFIG_FILE, 'utf-8')\n return JSON.parse(content)\n }\n } catch {\n // ignore\n }\n return { baseUrl: 'http://localhost:3010' }\n}\n\nfunction saveConfig(config: Config) {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true })\n }\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2))\n}\n\nexport function registerConfigCommands(site: SiteInstance) {\n site.command('config-get', {\n description: 'Show current configuration',\n parameters: z.object({\n key: z.string().optional().describe('Get specific config key'),\n }),\n handler: async (params: unknown) => {\n const p = params as { key?: string }\n const cfg = loadConfig()\n if (p.key) {\n const value = cfg[p.key]\n return ok({ [p.key]: value ?? 'not set' })\n }\n return ok(cfg)\n },\n })\n\n site.command('config-set', {\n description: 'Set configuration value',\n parameters: z.object({\n url: z.string().optional().describe('Set server URL'),\n }),\n handler: async (params: unknown) => {\n const p = params as { url?: string }\n const cfg = loadConfig()\n if (p.url) {\n cfg.baseUrl = p.url\n setBaseUrl(p.url)\n }\n saveConfig(cfg)\n return ok(cfg, ['Configuration saved'])\n },\n })\n\n site.command('config-url', {\n description: 'Show or set server URL',\n parameters: z.object({\n url: z.string().optional().describe('New server URL'),\n }),\n handler: async (params: unknown) => {\n const p = params as { url?: string }\n if (p.url) {\n const cfg = loadConfig()\n cfg.baseUrl = p.url\n setBaseUrl(p.url)\n saveConfig(cfg)\n return ok({ url: p.url }, [`Server URL set to: ${p.url}`])\n }\n return ok({ url: getBaseUrl() })\n },\n })\n\n site.command('config-status', {\n description: 'Check server connection status',\n parameters: z.object({}),\n handler: async () => {\n try {\n const client = getClient()\n type HealthClient = { health: { $get: () => Promise<Response> } }\n const res = await (client as unknown as HealthClient).health.$get()\n const data = await res.json()\n return ok(data, ['Server is reachable'])\n } catch (error) {\n return fail(`Server not reachable: ${getBaseUrl()} - ${String(error)}`)\n }\n },\n })\n\n site.command('config-reset', {\n description: 'Reset configuration to defaults',\n parameters: z.object({}),\n handler: async () => {\n const defaultConfig: Config = { baseUrl: 'http://localhost:3010' }\n saveConfig(defaultConfig)\n setBaseUrl(defaultConfig.baseUrl)\n return ok(defaultConfig, ['Configuration reset to defaults'])\n },\n })\n\n site.command('config-path', {\n description: 'Show config file path',\n parameters: z.object({}),\n handler: async () => {\n return ok({ path: CONFIG_FILE })\n },\n })\n}\n\nexport { loadConfig, saveConfig, CONFIG_FILE }\n","import type { SiteInstance } from '@dyyz1993/xcli-core'\nimport { ok, fail } from '@dyyz1993/xcli-core'\nimport { z } from 'zod'\nimport { getClient } from '@cli/utils/api'\n\nexport function registerPluginCommands(site: SiteInstance) {\n site.command('list', {\n description: 'List all plugins',\n parameters: z.object({\n limit: z.coerce.number().default(20).describe('Limit results'),\n page: z.coerce.number().default(1).describe('Page number'),\n }),\n handler: async (params: unknown) => {\n const p = params as { limit: number; page: number }\n try {\n const client = getClient()\n const res = await client.api.plugins.$get({\n query: { limit: String(p.limit), page: String(p.page) },\n })\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to list plugins')\n }\n },\n })\n\n site.command('search', {\n description: 'Search plugins',\n parameters: z.object({\n query: z.string().min(1).describe('Search query'),\n }),\n handler: async (params: unknown) => {\n const p = params as { query: string }\n try {\n const client = getClient()\n const res = await client.api.plugins.search.$get({ query: { q: p.query } })\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to search plugins')\n }\n },\n })\n\n site.command('get', {\n description: 'Get plugin details',\n parameters: z.object({\n slug: z.string().describe('Plugin slug'),\n }),\n handler: async (params: unknown) => {\n const p = params as { slug: string }\n try {\n const client = getClient()\n const res = await client.api.plugins[':slug'].$get({ param: { slug: p.slug } })\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to get plugin')\n }\n },\n })\n\n site.command('install', {\n description: 'Track plugin install',\n parameters: z.object({\n slug: z.string().describe('Plugin slug'),\n }),\n handler: async (params: unknown) => {\n const p = params as { slug: string }\n try {\n const client = getClient()\n const res = await client.api.plugins[':slug'].install.$post({ param: { slug: p.slug } })\n const data = await res.json()\n return ok(data, ['Install tracked'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to track install')\n }\n },\n })\n\n site.command('categories', {\n description: 'List plugin categories',\n parameters: z.object({}),\n handler: async () => {\n try {\n const client = getClient()\n const res = await client.api.categories.$get()\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to list categories')\n }\n },\n })\n\n site.command('stats', {\n description: 'Show marketplace statistics',\n parameters: z.object({}),\n handler: async () => {\n try {\n const client = getClient()\n const res = await client.api.stats.$get()\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to get stats')\n }\n },\n })\n}\n","import type { SiteInstance } from '@dyyz1993/xcli-core'\nimport { ok, fail } from '@dyyz1993/xcli-core'\nimport { z } from 'zod'\nimport { getClient } from '@cli/utils/api'\n\nexport function registerAuthCommands(site: SiteInstance) {\n site.command('register', {\n description: 'Register a new developer account',\n parameters: z.object({\n username: z.string().min(2).max(50).describe('Username'),\n email: z.string().email().describe('Email'),\n password: z.string().min(6).describe('Password'),\n }),\n handler: async (params: unknown) => {\n const p = params as { username: string; email: string; password: string }\n try {\n const client = getClient()\n const res = await client.api.auth.register.$post({ json: p })\n const data = await res.json()\n return ok(data, ['Registration successful'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to register')\n }\n },\n })\n\n site.command('login', {\n description: 'Login to get API key',\n parameters: z.object({\n account: z.string().describe('Email or username'),\n password: z.string().min(6).describe('Password'),\n }),\n handler: async (params: unknown) => {\n const p = params as { account: string; password: string }\n try {\n const client = getClient()\n const res = await client.api.auth.login.$post({ json: p })\n const data = await res.json()\n return ok(data, ['Login successful'])\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to login')\n }\n },\n })\n\n site.command('verify', {\n description: 'Verify API key',\n parameters: z.object({\n token: z.string().describe('API key to verify'),\n }),\n handler: async (params: unknown) => {\n const p = params as { token: string }\n try {\n const client = getClient()\n const res = await client.api.auth.verify.$get({\n headers: { Authorization: `Bearer ${p.token}` },\n })\n const data = await res.json()\n return ok(data)\n } catch (err) {\n return fail(err instanceof Error ? err.message : 'Failed to verify')\n }\n },\n })\n}\n","import type { Core } from '@dyyz1993/xcli-core'\nimport { registerTodoCommands } from './todo'\nimport { registerNotificationCommands } from './notification'\nimport { registerConfigCommands } from './config'\nimport { registerPluginCommands } from './plugin'\nimport { registerAuthCommands } from './auth'\n\n/**\n * Register all builtin CLI commands to xcli-core.\n * Each register function receives a SiteInstance for command registration.\n */\nexport function registerBuiltinCommands(app: Core) {\n const api = app.loader.getAPI()\n\n // Create a builtin site representing the local server\n const site = api.createSite({\n name: 'local-server',\n url: 'http://localhost:3010',\n })\n\n registerTodoCommands(site)\n registerNotificationCommands(site)\n registerConfigCommands(site)\n registerPluginCommands(site)\n registerAuthCommands(site)\n}\n\nexport {\n registerTodoCommands,\n registerNotificationCommands,\n registerConfigCommands,\n registerPluginCommands,\n registerAuthCommands,\n}\n","import { Core, type CoreConfig } from '@dyyz1993/xcli-core'\nimport { registerBuiltinCommands } from './modules'\n\nconst coreConfig: CoreConfig = {\n name: 'biomimic',\n version: '0.1.0',\n description: 'Biomimic CLI - RPC service & code generation tools',\n configDirName: '.biomimic',\n envPrefix: 'BIOMIMIC',\n pluginDirs: [],\n}\n\nconst app = new Core(coreConfig)\n\n// Register builtin commands (todo/notification/config modules)\nregisterBuiltinCommands(app)\n\n// Execute CLI\nconst exitCode = await app.run(process.argv.slice(2))\nprocess.exit(exitCode)\n"]}
|
|
@@ -5,16 +5,21 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Admin Dashboard</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/admin-
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/index-
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
16
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
17
|
-
<link rel="
|
|
8
|
+
<script type="module" crossorigin src="/assets/admin-D2iHWNOg.js"></script>
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/assets/index-B3CRby6r.js">
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/api-request-DIJocPxr.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/SaveOutlined-CLQ2tsSY.js">
|
|
12
|
+
<link rel="modulepreload" crossorigin href="/assets/sse-client-DGQ072hl.js">
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-CrOQEdJ2.js">
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/circle-check-big-CrZdwS75.js">
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/circle-x-CvN9r3fW.js">
|
|
16
|
+
<link rel="modulepreload" crossorigin href="/assets/index-CC_zy73y.js">
|
|
17
|
+
<link rel="modulepreload" crossorigin href="/assets/clock-CTeSZBiH.js">
|
|
18
|
+
<link rel="modulepreload" crossorigin href="/assets/activity-CgTz9Mrd.js">
|
|
19
|
+
<link rel="modulepreload" crossorigin href="/assets/eye-CwlZZEsj.js">
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/assets/plus-DDZfPiDJ.js">
|
|
21
|
+
<link rel="modulepreload" crossorigin href="/assets/App-BpFUIC-5.js">
|
|
22
|
+
<link rel="stylesheet" crossorigin href="/assets/index-09IqiOaE.css">
|
|
18
23
|
</head>
|
|
19
24
|
<body>
|
|
20
25
|
<div id="root"></div>
|