@pisell/core 1.0.69 → 1.0.70
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/es/app/app.d.ts +4 -0
- package/es/request/index.d.ts +15 -6
- package/es/request/index.js +38 -0
- package/es/request/sse.d.ts +45 -0
- package/es/request/sse.js +164 -0
- package/es/routes/index.d.ts +1 -1
- package/es/tasks/index.d.ts +1 -1
- package/lib/app/app.d.ts +4 -0
- package/lib/request/index.d.ts +15 -6
- package/lib/request/index.js +25 -1
- package/lib/request/sse.d.ts +45 -0
- package/lib/request/sse.js +115 -0
- package/lib/routes/index.d.ts +1 -1
- package/lib/tasks/index.d.ts +1 -1
- package/package.json +3 -2
package/es/app/app.d.ts
CHANGED
|
@@ -54,6 +54,10 @@ declare class App {
|
|
|
54
54
|
put: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
|
|
55
55
|
remove: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
|
|
56
56
|
custom: (url: string, config: import("../request").RequestSetting | undefined) => any;
|
|
57
|
+
sse: <TMeta = import("../request/sse").SSEMetaData, TData = import("../request/sse").SSEDataPayload<any>, TComplete = import("../request/sse").SSECompletePayload>(url: string, data: Record<string, any> | undefined, config: import("../request").RequestSetting & {
|
|
58
|
+
method?: "GET" | "POST" | undefined;
|
|
59
|
+
actions?: import("../request/sse").SSEActions<TMeta, TData, TComplete> | undefined;
|
|
60
|
+
}) => Promise<() => void>;
|
|
57
61
|
setConfig: (newConfig: Partial<import("../request").RequestConfig>) => void;
|
|
58
62
|
getConfig: () => import("../request").RequestConfig;
|
|
59
63
|
};
|
package/es/request/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { RequestWrapperProps, RequestConfig } from "./type";
|
|
1
|
+
import { RequestWrapperProps, RequestConfig, RequestSetting } from "./type";
|
|
2
|
+
import { SSEConfig, SSEActions, SSEMetaData, SSEDataPayload, SSECompletePayload } from "./sse";
|
|
2
3
|
export declare const createRequest: (props: RequestWrapperProps) => Promise<unknown>;
|
|
3
4
|
/**
|
|
4
5
|
* 请求
|
|
@@ -11,13 +12,21 @@ export declare const post: (url: RequestWrapperProps["url"], data: RequestWrappe
|
|
|
11
12
|
export declare const put: (url: RequestWrapperProps["url"], data: RequestWrapperProps["data"], config: RequestWrapperProps["config"]) => Promise<any>;
|
|
12
13
|
export declare const remove: (url: RequestWrapperProps["url"], data: RequestWrapperProps["data"], config: RequestWrapperProps["config"]) => Promise<any>;
|
|
13
14
|
export declare const custom: (url: RequestWrapperProps["url"], config: RequestWrapperProps["config"]) => any;
|
|
15
|
+
export declare const sse: <TMeta = SSEMetaData, TData = SSEDataPayload<any>, TComplete = SSECompletePayload>(url: SSEConfig["url"], data: Record<string, any> | undefined, config: RequestSetting & {
|
|
16
|
+
method?: SSEConfig["method"];
|
|
17
|
+
actions?: SSEActions<TMeta, TData, TComplete> | undefined;
|
|
18
|
+
}) => Promise<() => void>;
|
|
14
19
|
export * from "./type";
|
|
15
20
|
declare const _default: {
|
|
16
|
-
get: (url: string, data: any, config:
|
|
17
|
-
post: (url: string, data: any, config:
|
|
18
|
-
put: (url: string, data: any, config:
|
|
19
|
-
remove: (url: string, data: any, config:
|
|
20
|
-
custom: (url: string, config:
|
|
21
|
+
get: (url: string, data: any, config: RequestSetting | undefined) => Promise<any>;
|
|
22
|
+
post: (url: string, data: any, config: RequestSetting | undefined) => Promise<any>;
|
|
23
|
+
put: (url: string, data: any, config: RequestSetting | undefined) => Promise<any>;
|
|
24
|
+
remove: (url: string, data: any, config: RequestSetting | undefined) => Promise<any>;
|
|
25
|
+
custom: (url: string, config: RequestSetting | undefined) => any;
|
|
26
|
+
sse: <TMeta = SSEMetaData, TData = SSEDataPayload<any>, TComplete = SSECompletePayload>(url: string, data: Record<string, any> | undefined, config: RequestSetting & {
|
|
27
|
+
method?: "GET" | "POST" | undefined;
|
|
28
|
+
actions?: SSEActions<TMeta, TData, TComplete> | undefined;
|
|
29
|
+
}) => Promise<() => void>;
|
|
21
30
|
setConfig: (newConfig: Partial<RequestConfig>) => void;
|
|
22
31
|
getConfig: () => RequestConfig;
|
|
23
32
|
};
|
package/es/request/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
var _excluded = ["actions", "method", "headers"];
|
|
1
2
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
4
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
2
5
|
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
6
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
7
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
@@ -16,6 +19,7 @@ import { getUniqueId } from "@pisell/utils";
|
|
|
16
19
|
import axios from "axios";
|
|
17
20
|
import { getConfig, setConfig } from "./config";
|
|
18
21
|
import { getApp } from "../app";
|
|
22
|
+
import { createSSE } from "./sse";
|
|
19
23
|
// 实例
|
|
20
24
|
var axiosInstance = axios.create(axiosConfig);
|
|
21
25
|
|
|
@@ -339,6 +343,39 @@ export var custom = function custom(url, config) {
|
|
|
339
343
|
config: config
|
|
340
344
|
});
|
|
341
345
|
};
|
|
346
|
+
export var sse = /*#__PURE__*/function () {
|
|
347
|
+
var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(url, data, config) {
|
|
348
|
+
var actions, _config$method, method, _config$headers, customHeaders, restConfig, builtConfig, isPost;
|
|
349
|
+
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
350
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
351
|
+
case 0:
|
|
352
|
+
actions = config.actions, _config$method = config.method, method = _config$method === void 0 ? "GET" : _config$method, _config$headers = config.headers, customHeaders = _config$headers === void 0 ? {} : _config$headers, restConfig = _objectWithoutProperties(config, _excluded); // 复用 interceptorsRequest 统一处理 URL 转换和认证 headers 注入
|
|
353
|
+
_context5.next = 3;
|
|
354
|
+
return interceptorsRequest(_objectSpread({
|
|
355
|
+
url: url,
|
|
356
|
+
method: method,
|
|
357
|
+
headers: _objectSpread({}, customHeaders)
|
|
358
|
+
}, restConfig || {}));
|
|
359
|
+
case 3:
|
|
360
|
+
builtConfig = _context5.sent;
|
|
361
|
+
isPost = method === "POST";
|
|
362
|
+
return _context5.abrupt("return", createSSE({
|
|
363
|
+
url: builtConfig.url,
|
|
364
|
+
method: method,
|
|
365
|
+
headers: builtConfig.headers,
|
|
366
|
+
params: isPost ? undefined : data,
|
|
367
|
+
body: isPost ? data : undefined
|
|
368
|
+
}, actions !== null && actions !== void 0 ? actions : {}));
|
|
369
|
+
case 6:
|
|
370
|
+
case "end":
|
|
371
|
+
return _context5.stop();
|
|
372
|
+
}
|
|
373
|
+
}, _callee5);
|
|
374
|
+
}));
|
|
375
|
+
return function sse(_x13, _x14, _x15) {
|
|
376
|
+
return _ref5.apply(this, arguments);
|
|
377
|
+
};
|
|
378
|
+
}();
|
|
342
379
|
export * from "./type";
|
|
343
380
|
export default {
|
|
344
381
|
get: get,
|
|
@@ -346,6 +383,7 @@ export default {
|
|
|
346
383
|
put: put,
|
|
347
384
|
remove: remove,
|
|
348
385
|
custom: custom,
|
|
386
|
+
sse: sse,
|
|
349
387
|
setConfig: setConfig,
|
|
350
388
|
getConfig: getConfig
|
|
351
389
|
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface SSEMetaData {
|
|
2
|
+
total: number;
|
|
3
|
+
store_id?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SSEProgress {
|
|
6
|
+
current: number;
|
|
7
|
+
total: number;
|
|
8
|
+
last_version: number;
|
|
9
|
+
since_version: number;
|
|
10
|
+
}
|
|
11
|
+
export interface SSEDataPayload<TItem = any> {
|
|
12
|
+
items: TItem[];
|
|
13
|
+
progress?: SSEProgress;
|
|
14
|
+
}
|
|
15
|
+
export interface SSECompletePayload {
|
|
16
|
+
count: number;
|
|
17
|
+
last_version: number;
|
|
18
|
+
}
|
|
19
|
+
export interface SSEErrorPayload {
|
|
20
|
+
message: string;
|
|
21
|
+
code?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SSEActions<TMeta = SSEMetaData, TData = SSEDataPayload, TComplete = SSECompletePayload> {
|
|
24
|
+
onOpen?: () => void;
|
|
25
|
+
onMeta?: (data: TMeta) => void;
|
|
26
|
+
onProgress?: (data: SSEProgress) => void;
|
|
27
|
+
onData?: (data: TData) => void;
|
|
28
|
+
onTypeDone?: (data: TComplete) => void;
|
|
29
|
+
onDone?: (data: TComplete) => void;
|
|
30
|
+
onError?: (err: SSEErrorPayload | Error) => void;
|
|
31
|
+
}
|
|
32
|
+
export interface SSEConfig {
|
|
33
|
+
url: string;
|
|
34
|
+
params?: Record<string, any>;
|
|
35
|
+
method?: 'GET' | 'POST';
|
|
36
|
+
body?: Record<string, any>;
|
|
37
|
+
headers?: Record<string, string>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 底层 SSE 请求封装,基于 @microsoft/fetch-event-source
|
|
41
|
+
* 支持自定义 headers(解决原生 EventSource 无法携带 Authorization 的问题)
|
|
42
|
+
*
|
|
43
|
+
* @returns abort 函数,组件卸载时调用以关闭连接
|
|
44
|
+
*/
|
|
45
|
+
export declare function createSSE<TMeta = SSEMetaData, TData = SSEDataPayload, TComplete = SSECompletePayload>(config: SSEConfig, actions: SSEActions<TMeta, TData, TComplete>): () => void;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
5
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
7
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
9
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
10
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
11
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
12
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
14
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
15
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
16
|
+
import { fetchEventSource } from '@microsoft/fetch-event-source';
|
|
17
|
+
/**
|
|
18
|
+
* 构建带 query 参数的完整 URL
|
|
19
|
+
*/
|
|
20
|
+
function buildUrl(url, params) {
|
|
21
|
+
if (!params || Object.keys(params).length === 0) return url;
|
|
22
|
+
var query = Object.entries(params).filter(function (_ref) {
|
|
23
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
24
|
+
v = _ref2[1];
|
|
25
|
+
return v !== undefined && v !== null;
|
|
26
|
+
}).map(function (_ref3) {
|
|
27
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
28
|
+
k = _ref4[0],
|
|
29
|
+
v = _ref4[1];
|
|
30
|
+
return "".concat(encodeURIComponent(k), "=").concat(encodeURIComponent(v));
|
|
31
|
+
}).join('&');
|
|
32
|
+
return query ? "".concat(url, "?").concat(query) : url;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 安全解析 SSE 事件的 JSON data
|
|
37
|
+
*/
|
|
38
|
+
function parseEventData(raw) {
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(raw);
|
|
41
|
+
} catch (_unused) {
|
|
42
|
+
console.warn('[SSE] Failed to parse event data:', raw);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 底层 SSE 请求封装,基于 @microsoft/fetch-event-source
|
|
49
|
+
* 支持自定义 headers(解决原生 EventSource 无法携带 Authorization 的问题)
|
|
50
|
+
*
|
|
51
|
+
* @returns abort 函数,组件卸载时调用以关闭连接
|
|
52
|
+
*/
|
|
53
|
+
export function createSSE(config, actions) {
|
|
54
|
+
var url = config.url,
|
|
55
|
+
params = config.params,
|
|
56
|
+
_config$method = config.method,
|
|
57
|
+
method = _config$method === void 0 ? 'GET' : _config$method,
|
|
58
|
+
body = config.body,
|
|
59
|
+
_config$headers = config.headers,
|
|
60
|
+
headers = _config$headers === void 0 ? {} : _config$headers;
|
|
61
|
+
var onMeta = actions.onMeta,
|
|
62
|
+
onProgress = actions.onProgress,
|
|
63
|
+
onData = actions.onData,
|
|
64
|
+
onTypeDone = actions.onTypeDone,
|
|
65
|
+
onDone = actions.onDone,
|
|
66
|
+
onError = actions.onError,
|
|
67
|
+
onOpen = actions.onOpen;
|
|
68
|
+
var controller = new AbortController();
|
|
69
|
+
var fullUrl = buildUrl(url, params);
|
|
70
|
+
fetchEventSource(fullUrl, {
|
|
71
|
+
method: method,
|
|
72
|
+
headers: _objectSpread({
|
|
73
|
+
'Content-Type': 'application/json',
|
|
74
|
+
'Accept': 'text/event-stream'
|
|
75
|
+
}, headers),
|
|
76
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
77
|
+
signal: controller.signal,
|
|
78
|
+
openWhenHidden: true,
|
|
79
|
+
onopen: function () {
|
|
80
|
+
var _onopen = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(response) {
|
|
81
|
+
var errorData;
|
|
82
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
83
|
+
while (1) switch (_context.prev = _context.next) {
|
|
84
|
+
case 0:
|
|
85
|
+
if (response.ok) {
|
|
86
|
+
_context.next = 5;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
errorData = {
|
|
90
|
+
message: "SSE connection failed: ".concat(response.status, " ").concat(response.statusText),
|
|
91
|
+
code: response.status
|
|
92
|
+
};
|
|
93
|
+
onError === null || onError === void 0 || onError(errorData);
|
|
94
|
+
controller.abort();
|
|
95
|
+
return _context.abrupt("return");
|
|
96
|
+
case 5:
|
|
97
|
+
onOpen === null || onOpen === void 0 || onOpen();
|
|
98
|
+
case 6:
|
|
99
|
+
case "end":
|
|
100
|
+
return _context.stop();
|
|
101
|
+
}
|
|
102
|
+
}, _callee);
|
|
103
|
+
}));
|
|
104
|
+
function onopen(_x) {
|
|
105
|
+
return _onopen.apply(this, arguments);
|
|
106
|
+
}
|
|
107
|
+
return onopen;
|
|
108
|
+
}(),
|
|
109
|
+
onmessage: function onmessage(event) {
|
|
110
|
+
switch (event.event) {
|
|
111
|
+
case 'meta':
|
|
112
|
+
{
|
|
113
|
+
var _data = parseEventData(event.data);
|
|
114
|
+
if (_data !== null) onMeta === null || onMeta === void 0 || onMeta(_data);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case 'progress':
|
|
118
|
+
{
|
|
119
|
+
var _data2 = parseEventData(event.data);
|
|
120
|
+
if (_data2 !== null) onProgress === null || onProgress === void 0 || onProgress(_data2);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
case 'data':
|
|
124
|
+
{
|
|
125
|
+
var _data3 = parseEventData(event.data);
|
|
126
|
+
if (_data3 !== null) onData === null || onData === void 0 || onData(_data3);
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
case 'type_done':
|
|
130
|
+
{
|
|
131
|
+
var _data4 = parseEventData(event.data);
|
|
132
|
+
if (_data4 !== null) onTypeDone === null || onTypeDone === void 0 || onTypeDone(_data4);
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
case 'done':
|
|
136
|
+
{
|
|
137
|
+
var _data5 = parseEventData(event.data);
|
|
138
|
+
if (_data5 !== null) onDone === null || onDone === void 0 || onDone(_data5);
|
|
139
|
+
controller.abort();
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
case 'error':
|
|
143
|
+
{
|
|
144
|
+
var _data6 = parseEventData(event.data);
|
|
145
|
+
onError === null || onError === void 0 || onError(_data6 !== null && _data6 !== void 0 ? _data6 : {
|
|
146
|
+
message: 'Unknown SSE error'
|
|
147
|
+
});
|
|
148
|
+
controller.abort();
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
default:
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
onerror: function onerror(err) {
|
|
156
|
+
if (controller.signal.aborted) return;
|
|
157
|
+
onError === null || onError === void 0 || onError(err instanceof Error ? err : new Error(String(err)));
|
|
158
|
+
throw err;
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
return function () {
|
|
162
|
+
return controller.abort();
|
|
163
|
+
};
|
|
164
|
+
}
|
package/es/routes/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export declare class RouterManager {
|
|
|
20
20
|
get(name: string): RouteType;
|
|
21
21
|
has(name: string): boolean;
|
|
22
22
|
remove(name: string): void;
|
|
23
|
-
renderComponent(item: RouteType, children?: React.ReactNode): string | number | boolean |
|
|
23
|
+
renderComponent(item: RouteType, children?: React.ReactNode): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
|
|
24
24
|
getPageByRoute(route: string): ApplicationInterface | undefined;
|
|
25
25
|
getRouterComponent({ fallback }: {
|
|
26
26
|
fallback?: React.ReactNode;
|
package/es/tasks/index.d.ts
CHANGED
|
@@ -108,7 +108,7 @@ export declare class TasksManager {
|
|
|
108
108
|
*/
|
|
109
109
|
getQueueStatus(module: string, queueId: string): {
|
|
110
110
|
isRunning: boolean;
|
|
111
|
-
status: "
|
|
111
|
+
status: "completed" | "uncompleted";
|
|
112
112
|
progress: {
|
|
113
113
|
total: number;
|
|
114
114
|
completed: number;
|
package/lib/app/app.d.ts
CHANGED
|
@@ -54,6 +54,10 @@ declare class App {
|
|
|
54
54
|
put: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
|
|
55
55
|
remove: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
|
|
56
56
|
custom: (url: string, config: import("../request").RequestSetting | undefined) => any;
|
|
57
|
+
sse: <TMeta = import("../request/sse").SSEMetaData, TData = import("../request/sse").SSEDataPayload<any>, TComplete = import("../request/sse").SSECompletePayload>(url: string, data: Record<string, any> | undefined, config: import("../request").RequestSetting & {
|
|
58
|
+
method?: "GET" | "POST" | undefined;
|
|
59
|
+
actions?: import("../request/sse").SSEActions<TMeta, TData, TComplete> | undefined;
|
|
60
|
+
}) => Promise<() => void>;
|
|
57
61
|
setConfig: (newConfig: Partial<import("../request").RequestConfig>) => void;
|
|
58
62
|
getConfig: () => import("../request").RequestConfig;
|
|
59
63
|
};
|
package/lib/request/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { RequestWrapperProps, RequestConfig } from "./type";
|
|
1
|
+
import { RequestWrapperProps, RequestConfig, RequestSetting } from "./type";
|
|
2
|
+
import { SSEConfig, SSEActions, SSEMetaData, SSEDataPayload, SSECompletePayload } from "./sse";
|
|
2
3
|
export declare const createRequest: (props: RequestWrapperProps) => Promise<unknown>;
|
|
3
4
|
/**
|
|
4
5
|
* 请求
|
|
@@ -11,13 +12,21 @@ export declare const post: (url: RequestWrapperProps["url"], data: RequestWrappe
|
|
|
11
12
|
export declare const put: (url: RequestWrapperProps["url"], data: RequestWrapperProps["data"], config: RequestWrapperProps["config"]) => Promise<any>;
|
|
12
13
|
export declare const remove: (url: RequestWrapperProps["url"], data: RequestWrapperProps["data"], config: RequestWrapperProps["config"]) => Promise<any>;
|
|
13
14
|
export declare const custom: (url: RequestWrapperProps["url"], config: RequestWrapperProps["config"]) => any;
|
|
15
|
+
export declare const sse: <TMeta = SSEMetaData, TData = SSEDataPayload<any>, TComplete = SSECompletePayload>(url: SSEConfig["url"], data: Record<string, any> | undefined, config: RequestSetting & {
|
|
16
|
+
method?: SSEConfig["method"];
|
|
17
|
+
actions?: SSEActions<TMeta, TData, TComplete> | undefined;
|
|
18
|
+
}) => Promise<() => void>;
|
|
14
19
|
export * from "./type";
|
|
15
20
|
declare const _default: {
|
|
16
|
-
get: (url: string, data: any, config:
|
|
17
|
-
post: (url: string, data: any, config:
|
|
18
|
-
put: (url: string, data: any, config:
|
|
19
|
-
remove: (url: string, data: any, config:
|
|
20
|
-
custom: (url: string, config:
|
|
21
|
+
get: (url: string, data: any, config: RequestSetting | undefined) => Promise<any>;
|
|
22
|
+
post: (url: string, data: any, config: RequestSetting | undefined) => Promise<any>;
|
|
23
|
+
put: (url: string, data: any, config: RequestSetting | undefined) => Promise<any>;
|
|
24
|
+
remove: (url: string, data: any, config: RequestSetting | undefined) => Promise<any>;
|
|
25
|
+
custom: (url: string, config: RequestSetting | undefined) => any;
|
|
26
|
+
sse: <TMeta = SSEMetaData, TData = SSEDataPayload<any>, TComplete = SSECompletePayload>(url: string, data: Record<string, any> | undefined, config: RequestSetting & {
|
|
27
|
+
method?: "GET" | "POST" | undefined;
|
|
28
|
+
actions?: SSEActions<TMeta, TData, TComplete> | undefined;
|
|
29
|
+
}) => Promise<() => void>;
|
|
21
30
|
setConfig: (newConfig: Partial<RequestConfig>) => void;
|
|
22
31
|
getConfig: () => RequestConfig;
|
|
23
32
|
};
|
package/lib/request/index.js
CHANGED
|
@@ -37,7 +37,8 @@ __export(request_exports, {
|
|
|
37
37
|
post: () => post,
|
|
38
38
|
put: () => put,
|
|
39
39
|
remove: () => remove,
|
|
40
|
-
request: () => request
|
|
40
|
+
request: () => request,
|
|
41
|
+
sse: () => sse
|
|
41
42
|
});
|
|
42
43
|
module.exports = __toCommonJS(request_exports);
|
|
43
44
|
var import_cancelToken = require("./cancelToken");
|
|
@@ -48,6 +49,7 @@ var import_utils2 = require("@pisell/utils");
|
|
|
48
49
|
var import_axios = __toESM(require("axios"));
|
|
49
50
|
var import_config = require("./config");
|
|
50
51
|
var import_app = require("../app");
|
|
52
|
+
var import_sse = require("./sse");
|
|
51
53
|
__reExport(request_exports, require("./type"), module.exports);
|
|
52
54
|
var axiosInstance = import_axios.default.create(import_constants.axiosConfig);
|
|
53
55
|
axiosInstance.interceptors.request.use(import_utils.interceptorsRequest, import_utils.interceptorsRequestError);
|
|
@@ -257,12 +259,33 @@ var custom = (url, config) => {
|
|
|
257
259
|
config
|
|
258
260
|
});
|
|
259
261
|
};
|
|
262
|
+
var sse = async (url, data, config) => {
|
|
263
|
+
const { actions, method = "GET", headers: customHeaders = {}, ...restConfig } = config;
|
|
264
|
+
const builtConfig = await (0, import_utils.interceptorsRequest)({
|
|
265
|
+
url,
|
|
266
|
+
method,
|
|
267
|
+
headers: { ...customHeaders },
|
|
268
|
+
...restConfig || {}
|
|
269
|
+
});
|
|
270
|
+
const isPost = method === "POST";
|
|
271
|
+
return (0, import_sse.createSSE)(
|
|
272
|
+
{
|
|
273
|
+
url: builtConfig.url,
|
|
274
|
+
method,
|
|
275
|
+
headers: builtConfig.headers,
|
|
276
|
+
params: isPost ? void 0 : data,
|
|
277
|
+
body: isPost ? data : void 0
|
|
278
|
+
},
|
|
279
|
+
actions ?? {}
|
|
280
|
+
);
|
|
281
|
+
};
|
|
260
282
|
var request_default = {
|
|
261
283
|
get,
|
|
262
284
|
post,
|
|
263
285
|
put,
|
|
264
286
|
remove,
|
|
265
287
|
custom,
|
|
288
|
+
sse,
|
|
266
289
|
setConfig: import_config.setConfig,
|
|
267
290
|
getConfig: import_config.getConfig
|
|
268
291
|
};
|
|
@@ -275,5 +298,6 @@ var request_default = {
|
|
|
275
298
|
put,
|
|
276
299
|
remove,
|
|
277
300
|
request,
|
|
301
|
+
sse,
|
|
278
302
|
...require("./type")
|
|
279
303
|
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface SSEMetaData {
|
|
2
|
+
total: number;
|
|
3
|
+
store_id?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SSEProgress {
|
|
6
|
+
current: number;
|
|
7
|
+
total: number;
|
|
8
|
+
last_version: number;
|
|
9
|
+
since_version: number;
|
|
10
|
+
}
|
|
11
|
+
export interface SSEDataPayload<TItem = any> {
|
|
12
|
+
items: TItem[];
|
|
13
|
+
progress?: SSEProgress;
|
|
14
|
+
}
|
|
15
|
+
export interface SSECompletePayload {
|
|
16
|
+
count: number;
|
|
17
|
+
last_version: number;
|
|
18
|
+
}
|
|
19
|
+
export interface SSEErrorPayload {
|
|
20
|
+
message: string;
|
|
21
|
+
code?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SSEActions<TMeta = SSEMetaData, TData = SSEDataPayload, TComplete = SSECompletePayload> {
|
|
24
|
+
onOpen?: () => void;
|
|
25
|
+
onMeta?: (data: TMeta) => void;
|
|
26
|
+
onProgress?: (data: SSEProgress) => void;
|
|
27
|
+
onData?: (data: TData) => void;
|
|
28
|
+
onTypeDone?: (data: TComplete) => void;
|
|
29
|
+
onDone?: (data: TComplete) => void;
|
|
30
|
+
onError?: (err: SSEErrorPayload | Error) => void;
|
|
31
|
+
}
|
|
32
|
+
export interface SSEConfig {
|
|
33
|
+
url: string;
|
|
34
|
+
params?: Record<string, any>;
|
|
35
|
+
method?: 'GET' | 'POST';
|
|
36
|
+
body?: Record<string, any>;
|
|
37
|
+
headers?: Record<string, string>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 底层 SSE 请求封装,基于 @microsoft/fetch-event-source
|
|
41
|
+
* 支持自定义 headers(解决原生 EventSource 无法携带 Authorization 的问题)
|
|
42
|
+
*
|
|
43
|
+
* @returns abort 函数,组件卸载时调用以关闭连接
|
|
44
|
+
*/
|
|
45
|
+
export declare function createSSE<TMeta = SSEMetaData, TData = SSEDataPayload, TComplete = SSECompletePayload>(config: SSEConfig, actions: SSEActions<TMeta, TData, TComplete>): () => void;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/request/sse.ts
|
|
20
|
+
var sse_exports = {};
|
|
21
|
+
__export(sse_exports, {
|
|
22
|
+
createSSE: () => createSSE
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(sse_exports);
|
|
25
|
+
var import_fetch_event_source = require("@microsoft/fetch-event-source");
|
|
26
|
+
function buildUrl(url, params) {
|
|
27
|
+
if (!params || Object.keys(params).length === 0) return url;
|
|
28
|
+
const query = Object.entries(params).filter(([, v]) => v !== void 0 && v !== null).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join("&");
|
|
29
|
+
return query ? `${url}?${query}` : url;
|
|
30
|
+
}
|
|
31
|
+
function parseEventData(raw) {
|
|
32
|
+
try {
|
|
33
|
+
return JSON.parse(raw);
|
|
34
|
+
} catch {
|
|
35
|
+
console.warn("[SSE] Failed to parse event data:", raw);
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function createSSE(config, actions) {
|
|
40
|
+
const { url, params, method = "GET", body, headers = {} } = config;
|
|
41
|
+
const { onMeta, onProgress, onData, onTypeDone, onDone, onError, onOpen } = actions;
|
|
42
|
+
const controller = new AbortController();
|
|
43
|
+
const fullUrl = buildUrl(url, params);
|
|
44
|
+
(0, import_fetch_event_source.fetchEventSource)(fullUrl, {
|
|
45
|
+
method,
|
|
46
|
+
headers: {
|
|
47
|
+
"Content-Type": "application/json",
|
|
48
|
+
"Accept": "text/event-stream",
|
|
49
|
+
...headers
|
|
50
|
+
},
|
|
51
|
+
body: body ? JSON.stringify(body) : void 0,
|
|
52
|
+
signal: controller.signal,
|
|
53
|
+
openWhenHidden: true,
|
|
54
|
+
onopen: async (response) => {
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
const errorData = {
|
|
57
|
+
message: `SSE connection failed: ${response.status} ${response.statusText}`,
|
|
58
|
+
code: response.status
|
|
59
|
+
};
|
|
60
|
+
onError == null ? void 0 : onError(errorData);
|
|
61
|
+
controller.abort();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
onOpen == null ? void 0 : onOpen();
|
|
65
|
+
},
|
|
66
|
+
onmessage: (event) => {
|
|
67
|
+
switch (event.event) {
|
|
68
|
+
case "meta": {
|
|
69
|
+
const data = parseEventData(event.data);
|
|
70
|
+
if (data !== null) onMeta == null ? void 0 : onMeta(data);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case "progress": {
|
|
74
|
+
const data = parseEventData(event.data);
|
|
75
|
+
if (data !== null) onProgress == null ? void 0 : onProgress(data);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case "data": {
|
|
79
|
+
const data = parseEventData(event.data);
|
|
80
|
+
if (data !== null) onData == null ? void 0 : onData(data);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
case "type_done": {
|
|
84
|
+
const data = parseEventData(event.data);
|
|
85
|
+
if (data !== null) onTypeDone == null ? void 0 : onTypeDone(data);
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case "done": {
|
|
89
|
+
const data = parseEventData(event.data);
|
|
90
|
+
if (data !== null) onDone == null ? void 0 : onDone(data);
|
|
91
|
+
controller.abort();
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case "error": {
|
|
95
|
+
const data = parseEventData(event.data);
|
|
96
|
+
onError == null ? void 0 : onError(data ?? { message: "Unknown SSE error" });
|
|
97
|
+
controller.abort();
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
default:
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
onerror: (err) => {
|
|
105
|
+
if (controller.signal.aborted) return;
|
|
106
|
+
onError == null ? void 0 : onError(err instanceof Error ? err : new Error(String(err)));
|
|
107
|
+
throw err;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
return () => controller.abort();
|
|
111
|
+
}
|
|
112
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
113
|
+
0 && (module.exports = {
|
|
114
|
+
createSSE
|
|
115
|
+
});
|
package/lib/routes/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export declare class RouterManager {
|
|
|
20
20
|
get(name: string): RouteType;
|
|
21
21
|
has(name: string): boolean;
|
|
22
22
|
remove(name: string): void;
|
|
23
|
-
renderComponent(item: RouteType, children?: React.ReactNode): string | number | boolean |
|
|
23
|
+
renderComponent(item: RouteType, children?: React.ReactNode): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
|
|
24
24
|
getPageByRoute(route: string): ApplicationInterface | undefined;
|
|
25
25
|
getRouterComponent({ fallback }: {
|
|
26
26
|
fallback?: React.ReactNode;
|
package/lib/tasks/index.d.ts
CHANGED
|
@@ -108,7 +108,7 @@ export declare class TasksManager {
|
|
|
108
108
|
*/
|
|
109
109
|
getQueueStatus(module: string, queueId: string): {
|
|
110
110
|
isRunning: boolean;
|
|
111
|
-
status: "
|
|
111
|
+
status: "completed" | "uncompleted";
|
|
112
112
|
progress: {
|
|
113
113
|
total: number;
|
|
114
114
|
completed: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pisell/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.70",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"module": "./es/index.js",
|
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
"js-md5": "^0.8.3",
|
|
30
30
|
"axios": "^1.7.2",
|
|
31
31
|
"@aws-sdk/client-s3": "^3.456.0",
|
|
32
|
-
"dexie": "^4.2.1"
|
|
32
|
+
"dexie": "^4.2.1",
|
|
33
|
+
"@microsoft/fetch-event-source": "2.0.1"
|
|
33
34
|
},
|
|
34
35
|
"files": [
|
|
35
36
|
"es",
|