@laravel/stream-vue 0.3.11 → 0.3.12
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.es.js +77 -82
- package/dist/index.umd.js +1 -1
- package/package.json +12 -12
package/dist/index.es.js
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import { toRef as x, ref as
|
|
1
|
+
import { toRef as x, ref as g, onMounted as O, onUnmounted as I, watch as J, readonly as v } from "vue";
|
|
2
2
|
const T = "data: ", ee = (n, {
|
|
3
3
|
eventName: e = "update",
|
|
4
4
|
endSignal: a = "</stream>",
|
|
5
5
|
glue: t = " ",
|
|
6
|
-
replace:
|
|
6
|
+
replace: c = !1,
|
|
7
7
|
onMessage: M = () => null,
|
|
8
|
-
onComplete:
|
|
9
|
-
onError:
|
|
8
|
+
onComplete: F = () => null,
|
|
9
|
+
onError: R = () => null
|
|
10
10
|
} = {}) => {
|
|
11
|
-
const
|
|
11
|
+
const m = x(n), h = g(""), u = g([]), S = Array.isArray(e) ? e : [e];
|
|
12
12
|
let s = null;
|
|
13
|
-
const
|
|
13
|
+
const l = () => {
|
|
14
14
|
h.value = "", u.value = [];
|
|
15
15
|
}, f = (r = !1) => {
|
|
16
|
-
|
|
17
|
-
s
|
|
18
|
-
}), s
|
|
19
|
-
},
|
|
16
|
+
S.forEach((o) => {
|
|
17
|
+
s?.removeEventListener(o, y);
|
|
18
|
+
}), s?.close(), s = null, r && l();
|
|
19
|
+
}, y = (r) => {
|
|
20
20
|
if ([a, `${T}${a}`].includes(r.data)) {
|
|
21
|
-
f(),
|
|
21
|
+
f(), F();
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
c && l(), u.value.push(
|
|
25
25
|
r.data.startsWith(T) ? r.data.substring(T.length) : r.data
|
|
26
26
|
), h.value = u.value.join(t), M(r);
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
s.addEventListener(r,
|
|
32
|
-
}), s.addEventListener("error",
|
|
27
|
+
}, b = (r) => {
|
|
28
|
+
R(r), f();
|
|
29
|
+
}, C = () => {
|
|
30
|
+
l(), s = new EventSource(m.value), S.forEach((r) => {
|
|
31
|
+
s.addEventListener(r, y);
|
|
32
|
+
}), s.addEventListener("error", b);
|
|
33
33
|
};
|
|
34
34
|
return O(() => {
|
|
35
|
-
|
|
35
|
+
C();
|
|
36
36
|
}), I(() => {
|
|
37
37
|
f();
|
|
38
|
-
}), J(
|
|
39
|
-
r !==
|
|
38
|
+
}), J(m, (r, o) => {
|
|
39
|
+
r !== o && (f(), C());
|
|
40
40
|
}), {
|
|
41
|
-
message:
|
|
42
|
-
messageParts:
|
|
41
|
+
message: v(h),
|
|
42
|
+
messageParts: v(u),
|
|
43
43
|
close: f,
|
|
44
|
-
clearMessage:
|
|
44
|
+
clearMessage: l
|
|
45
45
|
};
|
|
46
46
|
}, K = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
|
|
47
47
|
let V = (n = 21) => {
|
|
@@ -50,8 +50,8 @@ let V = (n = 21) => {
|
|
|
50
50
|
e += K[a[n] & 63];
|
|
51
51
|
return e;
|
|
52
52
|
};
|
|
53
|
-
const
|
|
54
|
-
|
|
53
|
+
const w = /* @__PURE__ */ new Map(), W = (n, e) => {
|
|
54
|
+
w.has(n) || w.set(n, {
|
|
55
55
|
onData: [],
|
|
56
56
|
onError: [],
|
|
57
57
|
onFinish: [],
|
|
@@ -59,25 +59,25 @@ const F = /* @__PURE__ */ new Map(), W = (n, e) => {
|
|
|
59
59
|
onCancel: [],
|
|
60
60
|
onBeforeSend: []
|
|
61
61
|
});
|
|
62
|
-
const a =
|
|
62
|
+
const a = w.get(n);
|
|
63
63
|
return e.onData && a.onData.push(e.onData), e.onError && a.onError.push(e.onError), e.onFinish && a.onFinish.push(e.onFinish), e.onResponse && a.onResponse.push(e.onResponse), e.onCancel && a.onCancel.push(e.onCancel), e.onBeforeSend && a.onBeforeSend.push(e.onBeforeSend), () => {
|
|
64
64
|
Y(n, e);
|
|
65
65
|
};
|
|
66
|
-
},
|
|
67
|
-
const t =
|
|
68
|
-
return t ? t[e].map((
|
|
66
|
+
}, E = (n, e, ...a) => {
|
|
67
|
+
const t = w.get(n);
|
|
68
|
+
return t ? t[e].map((c) => c(...a)) : [];
|
|
69
69
|
}, p = (n) => {
|
|
70
|
-
|
|
70
|
+
E(n, "onFinish");
|
|
71
71
|
}, P = (n, e) => {
|
|
72
|
-
|
|
72
|
+
E(n, "onError", e);
|
|
73
73
|
}, $ = (n, e) => {
|
|
74
|
-
|
|
74
|
+
E(n, "onResponse", e);
|
|
75
75
|
}, G = (n) => {
|
|
76
|
-
|
|
76
|
+
E(n, "onCancel");
|
|
77
77
|
}, H = (n, e) => {
|
|
78
|
-
|
|
78
|
+
E(n, "onData", e);
|
|
79
79
|
}, Q = (n, e) => {
|
|
80
|
-
const a =
|
|
80
|
+
const a = E(n, "onBeforeSend", e);
|
|
81
81
|
for (const t of a) {
|
|
82
82
|
if (t === !1)
|
|
83
83
|
return !1;
|
|
@@ -86,7 +86,7 @@ const F = /* @__PURE__ */ new Map(), W = (n, e) => {
|
|
|
86
86
|
}
|
|
87
87
|
return null;
|
|
88
88
|
}, Y = (n, e) => {
|
|
89
|
-
const a =
|
|
89
|
+
const a = w.get(n);
|
|
90
90
|
a && (e.onData && (a.onData = a.onData.filter(
|
|
91
91
|
(t) => t !== e.onData
|
|
92
92
|
)), e.onError && (a.onError = a.onError.filter(
|
|
@@ -112,57 +112,52 @@ const F = /* @__PURE__ */ new Map(), W = (n, e) => {
|
|
|
112
112
|
jsonData: null
|
|
113
113
|
};
|
|
114
114
|
return L.set(n, a), a;
|
|
115
|
-
}, q = (n) => (d.has(n) || d.set(n, []), d.get(n)), N = (n) => {
|
|
116
|
-
var e;
|
|
117
|
-
return d.has(n) && ((e = d.get(n)) == null ? void 0 : e.length);
|
|
118
|
-
}, Z = (n, e) => (q(n).push(e), () => {
|
|
115
|
+
}, q = (n) => (d.has(n) || d.set(n, []), d.get(n)), N = (n) => d.has(n) && d.get(n)?.length, Z = (n, e) => (q(n).push(e), () => {
|
|
119
116
|
d.set(
|
|
120
117
|
n,
|
|
121
118
|
q(n).filter((a) => a !== e)
|
|
122
119
|
), N(n) || (L.delete(n), d.delete(n));
|
|
123
120
|
}), _ = (n, e) => {
|
|
124
|
-
var t;
|
|
125
121
|
L.set(n, {
|
|
126
122
|
...A(n),
|
|
127
123
|
...e
|
|
128
124
|
});
|
|
129
125
|
const a = A(n);
|
|
130
|
-
|
|
126
|
+
d.get(n)?.forEach((t) => t(a));
|
|
131
127
|
}, U = (n, e = {}) => {
|
|
132
|
-
const a = x(n), t = e.id ?? V(),
|
|
133
|
-
var g;
|
|
128
|
+
const a = x(n), t = e.id ?? V(), c = g(A(t)), M = (() => {
|
|
134
129
|
const r = {
|
|
135
130
|
"Content-Type": "application/json",
|
|
136
131
|
"X-STREAM-ID": t
|
|
137
|
-
},
|
|
138
|
-
return
|
|
139
|
-
})(),
|
|
140
|
-
let u,
|
|
132
|
+
}, o = e.csrfToken ?? document.querySelector('meta[name="csrf-token"]')?.getAttribute("content");
|
|
133
|
+
return o && (r["X-CSRF-TOKEN"] = o), r;
|
|
134
|
+
})(), F = g(c.value.data), R = g(c.value.jsonData), m = g(c.value.isFetching), h = g(c.value.isStreaming);
|
|
135
|
+
let u, S;
|
|
141
136
|
const s = (r) => {
|
|
142
137
|
_(t, r);
|
|
143
|
-
},
|
|
144
|
-
|
|
138
|
+
}, l = () => {
|
|
139
|
+
c.value.controller.abort(), (m || h) && G(t), s({
|
|
145
140
|
isFetching: !1,
|
|
146
141
|
isStreaming: !1
|
|
147
142
|
});
|
|
148
143
|
}, f = (r) => {
|
|
149
|
-
const
|
|
144
|
+
const o = new AbortController(), j = {
|
|
150
145
|
method: "POST",
|
|
151
|
-
signal:
|
|
146
|
+
signal: o.signal,
|
|
152
147
|
headers: {
|
|
153
148
|
...M,
|
|
154
149
|
...e.headers ?? {}
|
|
155
150
|
},
|
|
156
151
|
body: JSON.stringify(r ?? {}),
|
|
157
152
|
credentials: e.credentials ?? "same-origin"
|
|
158
|
-
}, k = Q(t,
|
|
153
|
+
}, k = Q(t, j);
|
|
159
154
|
k !== !1 && (s({
|
|
160
155
|
isFetching: !0,
|
|
161
|
-
controller:
|
|
162
|
-
}), fetch(a.value, k ??
|
|
156
|
+
controller: o
|
|
157
|
+
}), fetch(a.value, k ?? j).then(async (i) => {
|
|
163
158
|
if (!i.ok) {
|
|
164
|
-
const
|
|
165
|
-
throw new Error(
|
|
159
|
+
const D = await i.text();
|
|
160
|
+
throw new Error(D);
|
|
166
161
|
}
|
|
167
162
|
if (!i.body)
|
|
168
163
|
throw new Error(
|
|
@@ -171,31 +166,31 @@ const F = /* @__PURE__ */ new Map(), W = (n, e) => {
|
|
|
171
166
|
return $(t, i), s({
|
|
172
167
|
isFetching: !1,
|
|
173
168
|
isStreaming: !0
|
|
174
|
-
}),
|
|
169
|
+
}), C(i.body.getReader());
|
|
175
170
|
}).catch((i) => {
|
|
176
171
|
s({
|
|
177
172
|
isFetching: !1,
|
|
178
173
|
isStreaming: !1
|
|
179
174
|
}), P(t, i), p(t);
|
|
180
175
|
}));
|
|
181
|
-
},
|
|
182
|
-
|
|
183
|
-
},
|
|
176
|
+
}, y = (r) => {
|
|
177
|
+
l(), f(r), b();
|
|
178
|
+
}, b = () => {
|
|
184
179
|
s({
|
|
185
180
|
data: "",
|
|
186
181
|
jsonData: null
|
|
187
182
|
});
|
|
188
|
-
},
|
|
189
|
-
const i = new TextDecoder("utf-8").decode(k),
|
|
183
|
+
}, C = async (r, o = "") => r.read().then(({ done: j, value: k }) => {
|
|
184
|
+
const i = new TextDecoder("utf-8").decode(k), D = o + i;
|
|
190
185
|
H(t, i);
|
|
191
186
|
const B = {
|
|
192
|
-
data:
|
|
187
|
+
data: D
|
|
193
188
|
};
|
|
194
|
-
if (!
|
|
195
|
-
return s(B),
|
|
189
|
+
if (!j)
|
|
190
|
+
return s(B), C(r, D);
|
|
196
191
|
if (B.isStreaming = !1, e.json)
|
|
197
192
|
try {
|
|
198
|
-
B.jsonData = JSON.parse(
|
|
193
|
+
B.jsonData = JSON.parse(D);
|
|
199
194
|
} catch (X) {
|
|
200
195
|
P(t, X);
|
|
201
196
|
}
|
|
@@ -203,28 +198,28 @@ const F = /* @__PURE__ */ new Map(), W = (n, e) => {
|
|
|
203
198
|
});
|
|
204
199
|
return O(() => {
|
|
205
200
|
u = Z(t, (r) => {
|
|
206
|
-
|
|
207
|
-
}),
|
|
201
|
+
c.value = A(t), m.value = r.isFetching, h.value = r.isStreaming, F.value = r.data, R.value = r.jsonData;
|
|
202
|
+
}), S = W(t, e), window.addEventListener("beforeunload", l), e.initialInput && f(e.initialInput);
|
|
208
203
|
}), I(() => {
|
|
209
|
-
u && u(),
|
|
210
|
-
}), J(a, (r,
|
|
211
|
-
r !==
|
|
204
|
+
u && u(), S && S(), window.removeEventListener("beforeunload", l), N(t) || l();
|
|
205
|
+
}), J(a, (r, o) => {
|
|
206
|
+
r !== o && (l(), b());
|
|
212
207
|
}), {
|
|
213
|
-
data:
|
|
214
|
-
jsonData:
|
|
215
|
-
isFetching:
|
|
216
|
-
isStreaming:
|
|
208
|
+
data: v(F),
|
|
209
|
+
jsonData: v(R),
|
|
210
|
+
isFetching: v(m),
|
|
211
|
+
isStreaming: v(h),
|
|
217
212
|
id: t,
|
|
218
|
-
send:
|
|
219
|
-
cancel:
|
|
220
|
-
clearData:
|
|
213
|
+
send: y,
|
|
214
|
+
cancel: l,
|
|
215
|
+
clearData: b
|
|
221
216
|
};
|
|
222
217
|
}, ne = (n, e = {}) => {
|
|
223
|
-
const { jsonData: a, data: t, ...
|
|
218
|
+
const { jsonData: a, data: t, ...c } = U(n, {
|
|
224
219
|
...e,
|
|
225
220
|
json: !0
|
|
226
221
|
});
|
|
227
|
-
return { data: a, strData: t, ...
|
|
222
|
+
return { data: a, strData: t, ...c };
|
|
228
223
|
};
|
|
229
224
|
export {
|
|
230
225
|
ee as useEventStream,
|
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(u,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],s):(u=typeof globalThis<"u"?globalThis:u||self,s(u.LaravelStreamVue={},u.Vue))})(this,function(u,s){"use strict";const T="data: ",x=(n,{eventName:e="update",endSignal:
|
|
1
|
+
(function(u,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],s):(u=typeof globalThis<"u"?globalThis:u||self,s(u.LaravelStreamVue={},u.Vue))})(this,(function(u,s){"use strict";const T="data: ",x=(n,{eventName:e="update",endSignal:r="</stream>",glue:t=" ",replace:c=!1,onMessage:p=()=>null,onComplete:j=()=>null,onError:k=()=>null}={})=>{const y=s.toRef(n),g=s.ref(""),h=s.ref([]),E=Array.isArray(e)?e:[e];let o=null;const i=()=>{g.value="",h.value=[]},m=(a=!1)=>{E.forEach(l=>{o?.removeEventListener(l,v)}),o?.close(),o=null,a&&i()},v=a=>{if([r,`${T}${r}`].includes(a.data)){m(),j();return}c&&i(),h.value.push(a.data.startsWith(T)?a.data.substring(T.length):a.data),g.value=h.value.join(t),p(a)},w=a=>{k(a),m()},C=()=>{i(),o=new EventSource(y.value),E.forEach(a=>{o.addEventListener(a,v)}),o.addEventListener("error",w)};return s.onMounted(()=>{C()}),s.onUnmounted(()=>{m()}),s.watch(y,(a,l)=>{a!==l&&(m(),C())}),{message:s.readonly(g),messageParts:s.readonly(h),close:m,clearMessage:i}},I="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";let V=(n=21)=>{let e="",r=crypto.getRandomValues(new Uint8Array(n|=0));for(;n--;)e+=I[r[n]&63];return e};const b=new Map,N=(n,e)=>{b.has(n)||b.set(n,{onData:[],onError:[],onFinish:[],onResponse:[],onCancel:[],onBeforeSend:[]});const r=b.get(n);return e.onData&&r.onData.push(e.onData),e.onError&&r.onError.push(e.onError),e.onFinish&&r.onFinish.push(e.onFinish),e.onResponse&&r.onResponse.push(e.onResponse),e.onCancel&&r.onCancel.push(e.onCancel),e.onBeforeSend&&r.onBeforeSend.push(e.onBeforeSend),()=>{G(n,e)}},S=(n,e,...r)=>{const t=b.get(n);return t?t[e].map(c=>c(...r)):[]},A=n=>{S(n,"onFinish")},P=(n,e)=>{S(n,"onError",e)},X=(n,e)=>{S(n,"onResponse",e)},K=n=>{S(n,"onCancel")},W=(n,e)=>{S(n,"onData",e)},$=(n,e)=>{const r=S(n,"onBeforeSend",e);for(const t of r){if(t===!1)return!1;if(t!==null&&typeof t=="object")return t}return null},G=(n,e)=>{const r=b.get(n);r&&(e.onData&&(r.onData=r.onData.filter(t=>t!==e.onData)),e.onError&&(r.onError=r.onError.filter(t=>t!==e.onError)),e.onFinish&&(r.onFinish=r.onFinish.filter(t=>t!==e.onFinish)),e.onResponse&&(r.onResponse=r.onResponse.filter(t=>t!==e.onResponse)),e.onCancel&&(r.onCancel=r.onCancel.filter(t=>t!==e.onCancel)),e.onBeforeSend&&(r.onBeforeSend=r.onBeforeSend.filter(t=>t!==e.onBeforeSend)))},R=new Map,d=new Map,F=n=>{const e=R.get(n);if(e)return e;const r={controller:new AbortController,data:"",isFetching:!1,isStreaming:!1,jsonData:null};return R.set(n,r),r},q=n=>(d.has(n)||d.set(n,[]),d.get(n)),O=n=>d.has(n)&&d.get(n)?.length,H=(n,e)=>(q(n).push(e),()=>{d.set(n,q(n).filter(r=>r!==e)),O(n)||(R.delete(n),d.delete(n))}),Q=(n,e)=>{R.set(n,{...F(n),...e});const r=F(n);d.get(n)?.forEach(t=>t(r))},J=(n,e={})=>{const r=s.toRef(n),t=e.id??V(),c=s.ref(F(t)),p=(()=>{const a={"Content-Type":"application/json","X-STREAM-ID":t},l=e.csrfToken??document.querySelector('meta[name="csrf-token"]')?.getAttribute("content");return l&&(a["X-CSRF-TOKEN"]=l),a})(),j=s.ref(c.value.data),k=s.ref(c.value.jsonData),y=s.ref(c.value.isFetching),g=s.ref(c.value.isStreaming);let h,E;const o=a=>{Q(t,a)},i=()=>{c.value.controller.abort(),(y||g)&&K(t),o({isFetching:!1,isStreaming:!1})},m=a=>{const l=new AbortController,B={method:"POST",signal:l.signal,headers:{...p,...e.headers??{}},body:JSON.stringify(a??{}),credentials:e.credentials??"same-origin"},L=$(t,B);L!==!1&&(o({isFetching:!0,controller:l}),fetch(r.value,L??B).then(async f=>{if(!f.ok){const D=await f.text();throw new Error(D)}if(!f.body)throw new Error("ReadableStream not yet supported in this browser.");return X(t,f),o({isFetching:!1,isStreaming:!0}),C(f.body.getReader())}).catch(f=>{o({isFetching:!1,isStreaming:!1}),P(t,f),A(t)}))},v=a=>{i(),m(a),w()},w=()=>{o({data:"",jsonData:null})},C=async(a,l="")=>a.read().then(({done:B,value:L})=>{const f=new TextDecoder("utf-8").decode(L),D=l+f;W(t,f);const M={data:D};if(!B)return o(M),C(a,D);if(M.isStreaming=!1,e.json)try{M.jsonData=JSON.parse(D)}catch(Y){P(t,Y)}return o(M),A(t),""});return s.onMounted(()=>{h=H(t,a=>{c.value=F(t),y.value=a.isFetching,g.value=a.isStreaming,j.value=a.data,k.value=a.jsonData}),E=N(t,e),window.addEventListener("beforeunload",i),e.initialInput&&m(e.initialInput)}),s.onUnmounted(()=>{h&&h(),E&&E(),window.removeEventListener("beforeunload",i),O(t)||i()}),s.watch(r,(a,l)=>{a!==l&&(i(),w())}),{data:s.readonly(j),jsonData:s.readonly(k),isFetching:s.readonly(y),isStreaming:s.readonly(g),id:t,send:v,cancel:i,clearData:w}},U=(n,e={})=>{const{jsonData:r,data:t,...c}=J(n,{...e,json:!0});return{data:r,strData:t,...c}};u.useEventStream=x,u.useJsonStream=U,u.useStream=J,Object.defineProperty(u,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@laravel/stream-vue",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.12",
|
|
4
4
|
"description": "Laravel streaming hooks for Vue",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"laravel",
|
|
@@ -39,23 +39,23 @@
|
|
|
39
39
|
],
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/node": "^22.14.0",
|
|
42
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
43
|
-
"@typescript-eslint/parser": "^8.
|
|
44
|
-
"@vitejs/plugin-vue": "^
|
|
45
|
-
"eslint": "^
|
|
42
|
+
"@typescript-eslint/eslint-plugin": "^8.56.0",
|
|
43
|
+
"@typescript-eslint/parser": "^8.56.0",
|
|
44
|
+
"@vitejs/plugin-vue": "^6.0.0",
|
|
45
|
+
"eslint": "^10.0.0",
|
|
46
46
|
"jsdom": "^26.0.0",
|
|
47
|
-
"msw": "^2.
|
|
48
|
-
"prettier": "^3.
|
|
49
|
-
"typescript": "^5.
|
|
50
|
-
"vite": "^
|
|
51
|
-
"vite-plugin-dts": "^4.5.
|
|
52
|
-
"vitest": "^
|
|
47
|
+
"msw": "^2.12.0",
|
|
48
|
+
"prettier": "^3.8.1",
|
|
49
|
+
"typescript": "^5.9.0",
|
|
50
|
+
"vite": "^7.0.0",
|
|
51
|
+
"vite-plugin-dts": "^4.5.4",
|
|
52
|
+
"vitest": "^4.0.0"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"vue": "^3.3.0"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"nanoid": "^5.1.
|
|
58
|
+
"nanoid": "^5.1.6"
|
|
59
59
|
},
|
|
60
60
|
"scripts": {
|
|
61
61
|
"build": "vite build",
|