|
| 1 | +// 一次性脚本: 连 yjs 拿 demo-final 最近 5 个 ontology 节点 data 字段 |
| 2 | +// 用法: node server/inspect-ontology.mjs [room] |
| 3 | +import * as Y from 'yjs' |
| 4 | +import { WebsocketProvider } from 'y-websocket' |
| 5 | +import WebSocket from 'ws' |
| 6 | + |
| 7 | +if (typeof globalThis.WebSocket === 'undefined') globalThis.WebSocket = WebSocket |
| 8 | + |
| 9 | +const ROOM = process.argv[2] || 'demo-final' |
| 10 | +const WS = process.env.Y_WS_URL || 'ws://127.0.0.1:1234' |
| 11 | + |
| 12 | +const doc = new Y.Doc() |
| 13 | +const provider = new WebsocketProvider(WS, ROOM, doc, { connect: true, WebSocketPolyfill: WebSocket }) |
| 14 | +await new Promise((resolve, reject) => { |
| 15 | + const t = setTimeout(() => reject(new Error('sync timeout')), 8000) |
| 16 | + provider.once('synced', () => { clearTimeout(t); resolve() }) |
| 17 | +}) |
| 18 | + |
| 19 | +const yNodes = doc.getMap('nodes') |
| 20 | +const onts = [] |
| 21 | +yNodes.forEach((n, k) => { |
| 22 | + if (n?.type === 'ontologyNode' && !n.data?.isConclusion) { |
| 23 | + onts.push({ id: k, type: n.type, dataKeys: Object.keys(n.data || {}), data: n.data }) |
| 24 | + } |
| 25 | +}) |
| 26 | + |
| 27 | +// 按 created_at 倒序排, 取最近 8 个 |
| 28 | +onts.sort((a, b) => Number(b.data?.created_at || 0) - Number(a.data?.created_at || 0)) |
| 29 | +console.log(JSON.stringify({ total: onts.length, samples: onts.slice(0, 8) }, null, 2)) |
| 30 | + |
| 31 | +provider.disconnect() |
| 32 | +provider.destroy() |
| 33 | +doc.destroy() |
| 34 | +process.exit(0) |
0 commit comments