@chatbi-v/mocks 2.0.2 → 2.0.3
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/index.cjs +24 -0
- package/dist/index.mjs +15 -748
- package/package.json +5 -4
- package/dist/index.plugin.js +0 -8508
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";var z=Object.create;var $=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var ee=Object.getPrototypeOf,te=Object.prototype.hasOwnProperty;var ne=(n,e)=>{for(var t in e)$(n,t,{get:e[t],enumerable:!0})},U=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Y(e))!te.call(n,s)&&s!==t&&$(n,s,{get:()=>e[s],enumerable:!(o=X(e,s))||o.enumerable});return n};var T=(n,e,t)=>(t=n!=null?z(ee(n)):{},U(e||!n||!n.__esModule?$(t,"default",{value:n,enumerable:!0}):t,n)),oe=n=>U($({},"__esModule",{value:!0}),n);var me={};ne(me,{ChatStreamStrategy:()=>w,HistoryStreamStrategy:()=>x,JsonStrategy:()=>_,MOCK_FAVORITES:()=>F,MOCK_SCENES:()=>Q,MOCK_SESSIONS:()=>K,MOCK_USER:()=>B,MockAdapter:()=>G,MockResponseGenerator:()=>M,SsePageStrategy:()=>A,SseStrategy:()=>I,StrategyFactory:()=>b,createChatStream:()=>ae,createHistoryStream:()=>ie,eventsToStream:()=>P,flatEvents:()=>R,generateMockMessages:()=>ce,installFetchMock:()=>J,installSSEMock:()=>re,mockData:()=>pe,processTemplate:()=>v,setupMock:()=>se,sleep:()=>C});module.exports=oe(me);var L=require("@chatbi-v/core");var u=require("@chatbi-v/core"),q=T(require("mockjs"));var E=T(require("mockjs"));var D=require("@chatbi-v/core"),M=class{events=[];sessionId;agentName;currentTodos=[];constructor(e="Assistant",t){this.sessionId=t||"conv_"+D.dateUtils.now(),this.agentName=e}emitHistory(e){return e.forEach(t=>{let o={content:t.content,sessionId:this.sessionId,role:t.role,completed:!0,agentName:this.agentName,createTime:t.createTime};this.pushEvent("data",o),t.todos&&this.pushEvent("todos",{items:t.todos})}),this}initPlan(e){return this.currentTodos=e.map(t=>({content:t,status:"PENDING"})),this.pushTodos(),this}updatePlanStatus(e){return this.currentTodos=this.currentTodos.map((t,o)=>o<e?{...t,status:"COMPLETED"}:o===e?{...t,status:"IN_PROGRESS"}:{...t,status:"PENDING"}),this.pushTodos(),this}completePlan(){return this.currentTodos=this.currentTodos.map(e=>({...e,status:"COMPLETED"})),this.pushTodos(),this}addLog(e,t="info",o){return this.pushEvent("log",{type:t,content:e,agentName:o||this.agentName}),this}addError(e,t){return this.pushEvent("error",{errorCode:e,errorMessage:t}),this}streamContent(e,t=20){for(let o=0;o<e.length;o+=t){let s=e.slice(o,o+t);this.pushEvent("data",{content:s,sessionId:this.sessionId,completed:!1,agentName:this.agentName})}return this}finish(){return this.pushEvent("data",{content:"",sessionId:this.sessionId,completed:!0,agentName:this.agentName}),this}emitA2UI(e){let t=JSON.stringify(e,null,2);return this.streamContent(t)}toString(){return this.events.join(`
|
|
2
|
+
`)}pushTodos(){this.pushEvent("todos",{items:this.currentTodos})}pushEvent(e,t){this.events.push(`event: ${e}
|
|
3
|
+
data: ${JSON.stringify(t)}
|
|
4
|
+
`)}};var O=T(require("dayjs")),j=T(require("mockjs")),C=n=>new Promise(e=>setTimeout(e,n));function v(n,e){if(typeof n=="string"){if(/^\{\{.*\}\}$/.test(n)){let t=n.slice(2,-2).trim();try{let o=Object.keys(e),s=Object.values(e);return new Function(...o,`return ${t}`)(...s)}catch(o){return console.warn(`[Mock] Failed to evaluate template: ${n}`,o),n}}return n}if(Array.isArray(n))return n.map(t=>v(t,e));if(typeof n=="object"&&n!==null){let t={};for(let o in n)t[o]=v(n[o],e);return t}return n}function R(n,e={}){let t={$query:e,$body:e,$param:e?.param||e};j.default.Random.extend({$query:()=>t.$query,$body:()=>t.$body,$param:()=>t.$param});let o=j.default.mock(n);return Object.values(o).flat().map(s=>v(s,t)).sort((s,i)=>{let a=typeof s.delay=="number"?s.delay:parseInt(String(s.delay||0)),r=typeof i.delay=="number"?i.delay:parseInt(String(i.delay||0));return a-r})}function P(n){let e=new TextEncoder;return new ReadableStream({start(t){if(!n||n.length===0){t.close();return}(async()=>{try{let o=(0,O.default)().valueOf();for(let s of n){let i=typeof s.delay=="number"?s.delay:parseInt(String(s.delay||0)),a=(0,O.default)().valueOf()-o,r=Math.max(0,i-a);r>0&&await C(r);let c=`event: ${s.event}
|
|
5
|
+
data: ${JSON.stringify(s.data)}
|
|
6
|
+
|
|
7
|
+
`;t.enqueue(e.encode(c))}t.close()}catch(o){t.error(o)}})()}})}var w=class{generate(e){let t=e,o=t.agentName||"BI\u52A9\u624B",s=new M(o),i=t.data?E.default.mock(t.data):{};t.plan&&s.initPlan(t.plan),t.timeline&&t.timeline.forEach(r=>{if(r.planIndex!==void 0&&s.updatePlanStatus(r.planIndex),r.log){let c=typeof r.log=="string"?r.log:r.log.content,p=typeof r.log=="object"?r.log.level:"info",m=typeof r.log=="object"?r.log.agent:void 0;s.addLog(c,p,m)}});let a;return typeof t.content=="function"?a=t.content(i):a=t.content,typeof a=="object"&&a!==null?s.emitA2UI(a):s.streamContent(a),s.completePlan(),s.finish(),s.toString().split(`
|
|
8
|
+
|
|
9
|
+
`).map(r=>r+`
|
|
10
|
+
|
|
11
|
+
`)}},x=class{generate(e){let t=e,o=new M("BI\u52A9\u624B"),s=E.default.mock(t.template),i=[...t.prepend||[],...s.list||s];return o.emitHistory(i),o.toString().split(`
|
|
12
|
+
|
|
13
|
+
`).map(a=>a+`
|
|
14
|
+
|
|
15
|
+
`)}},_=class{process(e,t){let o=e;return o.responseSchema?E.default.mock(o.responseSchema):{}}},I=class{process(e,t={}){let o=e;return o.responseSchema?R(o.responseSchema,t):[]}},A=class{process(e,t={}){let o=e;if(!o.responseSchema)return[];let s=R(o.responseSchema,t);if(o.pageEvent){let a={$query:t,$body:t,$param:t?.param||t};E.default.Random.extend({$query:()=>a.$query,$body:()=>a.$body,$param:()=>a.$param});let r=E.default.mock(o.pageEvent);r=v(r,a);let c=0;if(s.length>0){let m=s[s.length-1];c=typeof m.delay=="number"?m.delay:parseInt(String(m.delay||0))}(typeof r.delay=="number"?r.delay:parseInt(String(r.delay||0)))<=c&&(r.delay=c+20),s.push(r)}let i=s.sort((a,r)=>{let c=typeof a.delay=="number"?a.delay:parseInt(String(a.delay||0)),p=typeof r.delay=="number"?r.delay:parseInt(String(r.delay||0));return c-p});return console.log(i),i}},b={getStrategy(n="json"){switch(n){case"sse":return new I;case"sse-page":return new A;default:return new _}}};var l=(0,u.createLogger)("MockAdapter"),G=class n{delay;static strategies={chat_stream:new w,history_stream:new x};constructor(e=300){this.delay=e}static registerStrategy(e,t){this.strategies[e]=t}async request(e,t){let o=t?.delay??this.delay;return new Promise((s,i)=>{setTimeout(()=>{try{if(!t||!t.responseSchema){l.warn(`\u672A\u627E\u5230\u54CD\u5E94\u67B6\u6784\u914D\u7F6E: ${e.url}`),s({});return}let a=t.responseSchema,r;typeof a=="function"&&(a=a(e));let c={type:t.type,status:t.status||200,pageEvent:t.pageEvent,responseSchema:a,...typeof a=="object"?a:{}};if(c.status!==200){let p=new Error(`Request failed with status code ${c.status}`);p.response={status:c.status,data:q.default.mock(a),headers:{}},i(p);return}if(typeof a=="string")r=a;else if(this.isLegacySchema(a)){let p=n.strategies[a._type];if(p){r=p.generate(a).join("").replace(/event: data\ndata: /g,"").replace(/\n\n/g,"");try{r=JSON.parse(r)}catch{}}else l.warn(`\u672A\u627E\u5230\u5BF9\u5E94\u7684\u7B56\u7565\u7C7B\u578B: ${a._type}`),r={}}else{let p=c.type||"json";r=b.getStrategy(p).process(c,e.params||e.data)}l.info(`Request: ${e.method} ${e.url}`,e.data||e.params),l.info("Response:",r),s(r)}catch(a){i(a)}},o)})}async stream(e,t,o){let{onMessage:s,onFinish:i,onError:a}=t,r=e.signal,c=o?.delay??this.delay;return new Promise(p=>{if(r&&r.aborted){i&&i(),p();return}setTimeout(async()=>{try{if(!o||!o.responseSchema){l.warn(`\u672A\u627E\u5230\u6D41\u5F0F\u54CD\u5E94\u67B6\u6784: ${e.url}`),i&&i(),p();return}let m=u.dateUtils.now();l.info(`[SSE Start] Request: ${e.method} ${e.url}`,{params:e.data||e.params,time:u.dateUtils.dayjs().toISOString()});let g=o.responseSchema;typeof g=="function"&&(g=g(e));let S={type:o.type,pageEvent:o.pageEvent,responseSchema:g,...typeof g=="object"?g:{}};if(this.isNewConfig(S)){let y=S.type||"sse",h=b.getStrategy(y).process(S,e.params||e.data);if(Array.isArray(h)){let N=u.dateUtils.now(),k=0;l.info(`[SSE Processing] Generated ${h.length} events for ${y} strategy`);for(let d of h){if(r&&r.aborted){l.info(`[SSE Abort] Stream aborted by user after ${u.dateUtils.now()-m}ms`);break}let V=typeof d.delay=="number"?d.delay:parseInt(String(d.delay||0)),W=u.dateUtils.now()-N,H=Math.max(0,V-W);if(H>0&&await C(H),r&&r.aborted)break;let Z=`event: ${d.event}
|
|
16
|
+
data: ${JSON.stringify(d.data)}
|
|
17
|
+
|
|
18
|
+
`;["error","todos","page"].includes(d.event)?l.info(`[SSE Event] Emitting special event: ${d.event}`,d.data):(k===0||k===h.length-1)&&l.info(`[SSE Event] Emitting ${k===0?"first":"last"} data event`,{preview:JSON.stringify(d.data).slice(0,50)+"..."}),s&&s(Z),k++}}}else{let y=[];if(typeof g=="string")y=g.split(`
|
|
19
|
+
|
|
20
|
+
`).map(f=>f+`
|
|
21
|
+
|
|
22
|
+
`);else if(this.isLegacySchema(g))y=this.generateAdvancedChunks(g);else{let f=q.default.mock(g);y=[`data: ${JSON.stringify(f)}
|
|
23
|
+
|
|
24
|
+
`]}for(let f of y){if(r&&r.aborted){l.info("[SSE Abort] Stream aborted by user");break}f.trim()&&(s&&s(f),await new Promise(h=>setTimeout(h,200)))}}(!r||!r.aborted)&&(l.info(`[SSE Complete] Stream finished successfully in ${u.dateUtils.now()-m}ms`),i&&i()),p()}catch(m){l.error("[SSE Error] Stream processing failed",m),a&&a(m),p()}},c)})}isLegacySchema(e){return e&&typeof e=="object"&&"_type"in e}isNewConfig(e){return e&&typeof e=="object"&&(["json","sse","sse-page"].includes(e.type)||"responseSchema"in e)}generateAdvancedChunks(e){let t=n.strategies[e._type];return t?t.generate(e):(l.warn(`\u672A\u627E\u5230\u5BF9\u5E94\u7684\u7B56\u7565\u7C7B\u578B: ${e._type}`),[])}};function J(n){window._originalFetch||(window._originalFetch=window.fetch),window.fetch=async(e,t={})=>{let o=typeof e=="string"?e:e instanceof URL?e.toString():e.url,s=(t.method||"GET").toUpperCase(),a=Object.values(n).find(y=>{if(!y.url)return!1;let f=y.url.replace(/:[a-zA-Z0-9_]+/g,"([^/]+)"),h=new RegExp(`^${f}$`),[N]=o.split("?"),k=(y.method||"GET").toUpperCase();return h.test(N)&&k===s});if(!a)return window._originalFetch(e,t);console.log(`[Mock] Intercepted ${s} ${o}`,a),await C(a.delay||0);let r=a.type||"json",c=a.status||200,p=b.getStrategy(r),m=new URL(o,window.location.origin),g=Object.fromEntries(m.searchParams),S=p.process(a,g);if(r==="json")return new Response(JSON.stringify(S),{status:c,headers:{"Content-Type":"application/json"}});if(r==="sse"||r==="sse-page"){let f=P(S);return new Response(f,{status:c,headers:{"Content-Type":"text/event-stream"}})}return window._originalFetch(e,t)}}function re(){}function se(n){typeof window<"u"&&(J(n),void 0)}function ae(n){return{_type:"chat_stream",...n}}function ie(n){return{_type:"history_stream",...n}}var B={id:"u_001",name:"Admin User",avatar:"https://api.dicebear.com/7.x/avataaars/svg?seed=Admin",role:"admin"},K=[{id:"s_001",title:"2024 Q1 \u9500\u552E\u5206\u6790",date:"2024-03-15",lastMessage:"\u597D\u7684\uFF0C\u6B63\u5728\u4E3A\u60A8\u5206\u6790 Q1 \u9500\u552E\u6570\u636E..."},{id:"s_002",title:"\u7528\u6237\u589E\u957F\u8D8B\u52BF",date:"2024-03-10",lastMessage:"\u7528\u6237\u589E\u957F\u66F2\u7EBF\u663E\u793A..."},{id:"s_003",title:"\u7ADE\u54C1\u5206\u6790\u62A5\u544A",date:"2024-03-08",lastMessage:"\u4E3B\u8981\u7ADE\u54C1 A \u7684\u5E02\u573A\u4EFD\u989D..."},{id:"s_004",title:"\u8425\u9500\u6D3B\u52A8\u590D\u76D8",date:"2024-03-05",lastMessage:"ROI \u63D0\u5347\u4E86 15%..."},{id:"s_005",title:"\u8D22\u52A1\u62A5\u8868\u5BA1\u8BA1",date:"2024-03-01",lastMessage:"\u8BF7\u786E\u8BA4\u4EE5\u4E0B\u8D22\u52A1\u6307\u6807..."}],F=[{id:"fav-1",title:"\u5B63\u5EA6\u9500\u552E\u603B\u7ED3",date:"2025/12/15"},{id:"fav-2",title:"\u5E74\u5EA6\u9884\u7B97\u89C4\u5212",date:"2025/12/10"},{id:"fav-3",title:"\u6838\u5FC3\u6307\u6807\u76D1\u63A7",date:"2025/11/20"}],Q=[{id:"1",name:"\u9500\u552E\u6570\u636E\u5206\u6790",description:"\u5168\u65B9\u4F4D\u5206\u6790\u9500\u552E\u4E1A\u7EE9\uFF0C\u5305\u62EC\u533A\u57DF\u3001\u4EA7\u54C1\u3001\u65F6\u95F4\u7EF4\u5EA6",code:"SALES_001",creator:"\u7BA1\u7406\u5458",createTime:"2023-01-01",tableCount:5,kbCount:2,qaCount:10,cover:"https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=800&q=80"},{id:"2",name:"\u4EBA\u529B\u8D44\u6E90\u6982\u89C8",description:"\u5458\u5DE5\u5165\u804C\u3001\u79BB\u804C\u3001\u7EE9\u6548\u5206\u5E03\u4E0E\u57F9\u8BAD\u60C5\u51B5\u5206\u6790",code:"HR_001",creator:"HR \u7ECF\u7406",createTime:"2023-02-15",tableCount:3,kbCount:1,qaCount:5,cover:"https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=800&q=80"},{id:"3",name:"\u4F9B\u5E94\u94FE\u4F18\u5316",description:"\u5E93\u5B58\u5468\u8F6C\u3001\u7269\u6D41\u6210\u672C\u4E0E\u4F9B\u5E94\u5546\u7EE9\u6548\u8BC4\u4F30",code:"SCM_001",creator:"\u4F9B\u5E94\u94FE\u603B\u76D1",createTime:"2023-03-20",tableCount:8,kbCount:0,qaCount:15,cover:"https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?w=800&q=80"}],ce=n=>[{key:`msg_${n}_1`,role:"assistant",content:`\u60A8\u597D\uFF01\u6211\u662F\u60A8\u7684\u667A\u80FD\u52A9\u624B\u3002\u5F53\u524D\u4F1A\u8BDD ID: ${n}\u3002\u8BF7\u95EE\u6709\u4EC0\u4E48\u53EF\u4EE5\u5E2E\u60A8\uFF1F`,time:L.dateUtils.dayjs(L.dateUtils.now()-1e4).toISOString()}],pe={user:B,sessions:K,favorites:F,scenes:Q,favoritesList:F};0&&(module.exports={ChatStreamStrategy,HistoryStreamStrategy,JsonStrategy,MOCK_FAVORITES,MOCK_SCENES,MOCK_SESSIONS,MOCK_USER,MockAdapter,MockResponseGenerator,SsePageStrategy,SseStrategy,StrategyFactory,createChatStream,createHistoryStream,eventsToStream,flatEvents,generateMockMessages,installFetchMock,installSSEMock,mockData,processTemplate,setupMock,sleep});
|