ant-design-x-vue-next
Version:
Ant Design X for Vue — community continuation aligned with @ant-design/x
2 lines (1 loc) • 6.52 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const y=require("vue"),de=require("./useSyncState.js"),H=require("../_util/hooks/use-event-callback.js"),b=require("./conversationStore.js");function k(h){return Array.isArray(h)?h:[h]}function ve(h){return h.name==="AbortError"||h.name==="TimeoutError"||h.name==="StreamTimeoutError"}const _=new Map;function me(h){const{defaultMessages:q,agent:L,requestFallback:X,requestPlaceholder:R,parser:W,transformMessage:G,provider:r,transformStream:ee,resolveAbortController:O,conversationKey:j}=h,z=y.ref(0),C=y.ref(null),D=y.ref(!1),T=new Map,te=Symbol("ConversationKey"),se=()=>j===void 0?te:y.toValue(j),i=y.ref(se()),x=e=>(e||[]).map((t,s)=>({id:`default_${s}`,status:"local",...t})),ne=e=>{if(typeof q=="function"){const t=q({conversationKey:e});return t&&typeof t.then=="function"?[]:x(t)}return x(q)},ae=e=>{const t=b.getConversationMessages(e);return t.length>0?t:ne(e)},[p,w]=de.default(ae(i.value),()=>{}),d=e=>{w(t=>{const s=typeof e=="function"?e(t):e;return b.setConversationMessages(i.value,s),s})};let B=()=>{};const E=e=>{const t=T.get(e);t!=null&&t.length&&(T.delete(e),t.forEach(({requestParams:s,opts:n})=>{B(s,n)}))},J=async e=>{const t=b.getConversationMessages(e);if(t.length>0){w(t),E(e);return}if(typeof q!="function"){const n=x(q);w(n),b.setConversationMessages(e,n),E(e);return}const s=q({conversationKey:e});if(!s||typeof s.then!="function"){const n=x(s);w(n),b.setConversationMessages(e,n),E(e);return}D.value=!0;try{const n=await s;if(i.value!==e)return;const c=x(n);w(c),b.setConversationMessages(e,c)}catch(n){console.error("[useXChat] defaultMessages load failed",n),i.value===e&&w([])}finally{i.value===e&&(D.value=!1,E(e))}};if(typeof q=="function"&&b.getConversationMessages(i.value).length===0){const e=q({conversationKey:i.value});e&&typeof e.then=="function"&&J(i.value)}y.watch(()=>j===void 0?void 0:y.toValue(j),e=>{if(e===void 0||e===i.value)return;b.setConversationMessages(i.value,p.value),i.value=e;const t=b.getConversationMessages(e);if(t.length>0){w(t),E(e);return}J(e)});const $=(e,t,s)=>{const n={id:`msg_${z.value}`,message:e,status:t};return s&&(n.extraInfo=s),z.value+=1,n},re=y.computed(()=>{const e=[];return p.value.forEach(t=>{const s=W?W(t.message):t.message,n=k(s);n.forEach((c,g)=>{let m=t.id;n.length>1&&(m=`${m}_${g}`),e.push({id:m,message:c,status:t.status,extraInfo:t.extraInfo})})}),e}),Q=e=>e.filter(t=>t.status!=="loading"&&t.status!=="error").map(t=>t.message),A=()=>Q(p.value);r&&r.injectGetMessages(()=>A());const N=e=>{const{chunk:t,chunks:s,originMessage:n}=e;if(typeof G=="function")return G(e);if(r)return r.transformMessage(e);if(t)return t;if(Array.isArray(s)){const c=(s==null?void 0:s.length)>0?s==null?void 0:s[(s==null?void 0:s.length)-1]:void 0;return n||c}return s},oe=y.computed(()=>_.get(i.value)===!0),ue=H.useEventCallback(()=>{var e;if(r!=null&&r.request){r.request.abort(),_.set(i.value,!1);return}(e=C.value)==null||e.abort()}),le=(e,t)=>{const s=p.value.find(c=>c.id===e);if(!s)return!1;const n=typeof t=="function"?t(s):t;return d(c=>c.map(g=>g.id===e?{...g,...n,id:g.id}:g)),!0},ie=e=>p.value.some(s=>s.id===e)?(d(s=>s.filter(n=>n.id!==e)),!0):!1,U=(e,t)=>{const s=!!(r!=null&&r.hasRequest&&r.request);if(!s&&!L)throw new Error("The agent parameter is required when using the onRequest method in an agent generated by useXAgent. Or configure provider with a manual createManualXRequest.");const{updatingId:n,reload:c,extraInfo:g}=t||{};let m=null,M,S=[],V={};if(e&&typeof e=="object"&&"message"in e){const{message:o,...a}=e;M=o,S=[M],V=a}else if(r&&e&&typeof e=="object"&&!Array.isArray(e)){const o=r.transformLocalMessage(e);S=k(o),M=S[S.length-1]??e,V={...e}}else M=e,S=[M];let K=null;c?(m=n??null,K=n??null,d(o=>o.map(a=>{if(a.id!==n)return a;if(R){const u=typeof R=="function"?R(M,{messages:Q(o)}):R;return{...a,status:"loading",message:u,...g?{extraInfo:g}:{}}}return{...a,status:"loading",...g?{extraInfo:g}:{}}}))):d(o=>{let a=[...o,...S.map(u=>$(u,"local",g))];if(R){let u;typeof R=="function"?u=R(M,{messages:Q(a)}):u=R;const f=$(u,"loading");m=f.id,a=[...a,f]}return a}),_.set(i.value,!0);const F=(o,a,u,f)=>{let l=p.value.find(v=>v.id===K);if(l)d(v=>v.map(I=>{if(I.id===K){const P=N({originMessage:I.message,chunk:a,chunks:u,status:o,...f?{responseHeaders:f}:{}});return{...I,message:P,status:o}}return I}));else{const v=N({chunk:a,status:o,chunks:u,...f?{responseHeaders:f}:{}});l=$(v,o),d(I=>[...I.filter(ge=>ge.id!==m),l]),K=l.id}return l},Y=async o=>{const a=m,u=K;if(_.set(i.value,!1),ve(o)){d(f=>f.filter(l=>!(a!=null&&l.id===a&&a!==u)).map(l=>u!=null&&l.id===u?{...l,status:"abort"}:l)),C.value=null;return}if(X){let f;typeof X=="function"?f=await X(M,{error:o,messages:A()}):f=X,c&&u!=null?d(l=>l.map(v=>v.id===u?{...v,message:f,status:"error"}:v)):d(l=>[...l.filter(v=>v.id!==a&&v.id!==u),$(f,"error")])}else c&&u!=null?d(f=>f.map(l=>l.id===u?{...l,status:"error"}:l)):d(f=>f.filter(l=>l.id!==a&&l.id!==u));C.value=null};if(s&&(r!=null&&r.request)){r.injectRequest({onUpdate:(a,u)=>F("updating",a,[],u),onSuccess:(a,u)=>{F("success",void 0,a,u),_.set(i.value,!1),C.value=null},onError:a=>{Y(a instanceof Error?a:new Error(String(a)))}});const o=r.transformParams(e&&typeof e=="object"?e:{message:M},A(),r.request.options);r.request.run(o);return}const Z={message:M,messages:A(),...V},fe=r?r.transformParams(Z,A()):Z;L.request(fe,{onUpdate:o=>{F("updating",o,[])},onSuccess:o=>{F("success",void 0,o),_.set(i.value,!1),C.value=null},onError:async o=>{await Y(o)},onStream:o=>{C.value=o,O==null||O(o)}},ee)},ce=H.useEventCallback((e,t)=>{U(e,t)});return B=(e,t)=>{U(e,t)},{onRequest:ce,onReload:(e,t,s)=>{if(!L&&!(r!=null&&r.hasRequest&&r.request))throw new Error("The agent parameter is required when using the onReload method, or configure provider with createManualXRequest.");const n=p.value.findIndex(g=>g.id===e);if(n<0)throw new Error(`message [${e}] is not found`);let c=t;if(c===void 0){const g=[...p.value.slice(0,n)].reverse().find(m=>m.status==="local");if(!g)throw new Error(`message [${e}] has no previous user message to reload`);c=g.message}U(c,{updatingId:e,reload:!0,extraInfo:s==null?void 0:s.extraInfo})},abort:ue,messages:p,parsedMessages:re,setMessages:d,setMessage:le,removeMessage:ie,conversationKey:i,isRequesting:oe,isDefaultMessagesRequesting:D,queueRequest:(e,t,s)=>{const n=T.get(e)||[];n.push({requestParams:t,opts:s}),T.set(e,n),e===i.value&&!D.value&&E(e)}}}exports.default=me;