@pisell/core 1.0.69 → 1.0.71

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 CHANGED
@@ -31,7 +31,7 @@ export interface AppOptions {
31
31
  cmd?: CMDOptions;
32
32
  aws?: AWSOptions;
33
33
  getPisellos?: () => any;
34
- sqlite?: () => any;
34
+ sqlite?: (app: App) => any;
35
35
  }
36
36
  declare class App {
37
37
  private static instance;
@@ -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/app/app.js CHANGED
@@ -96,7 +96,9 @@ var App = /*#__PURE__*/function () {
96
96
  this.cmd = new CMD(this, options === null || options === void 0 ? void 0 : options.cmd);
97
97
  this.aws = new AWS(this, options === null || options === void 0 ? void 0 : options.aws);
98
98
  this.getPisellos = options === null || options === void 0 ? void 0 : options.getPisellos;
99
- this.sqlite = options === null || options === void 0 ? void 0 : options.sqlite;
99
+ if (options !== null && options !== void 0 && options.sqlite) {
100
+ this.sqlite = options.sqlite(this);
101
+ }
100
102
  if (options !== null && options !== void 0 && options.constants) {
101
103
  this.constants = options.constants || {};
102
104
  }
@@ -21,6 +21,6 @@ export declare class History {
21
21
  externalPage: (path: string) => void;
22
22
  goLogin: () => any;
23
23
  getQuery: () => {
24
- [k: string]: any;
24
+ [k: string]: string;
25
25
  };
26
26
  }
@@ -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: import("./type").RequestSetting | undefined) => Promise<any>;
17
- post: (url: string, data: any, config: import("./type").RequestSetting | undefined) => Promise<any>;
18
- put: (url: string, data: any, config: import("./type").RequestSetting | undefined) => Promise<any>;
19
- remove: (url: string, data: any, config: import("./type").RequestSetting | undefined) => Promise<any>;
20
- custom: (url: string, config: import("./type").RequestSetting | undefined) => any;
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
  };
@@ -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
+ }
@@ -20,9 +20,9 @@ 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 | Iterable<React.ReactNode> | React.JSX.Element | null | undefined;
23
+ renderComponent(item: RouteType, children?: React.ReactNode): string | number | boolean | React.ReactFragment | JSX.Element | null | undefined;
24
24
  getPageByRoute(route: string): ApplicationInterface | undefined;
25
25
  getRouterComponent({ fallback }: {
26
26
  fallback?: React.ReactNode;
27
- }): React.JSX.Element[];
27
+ }): JSX.Element[];
28
28
  }
package/lib/app/app.d.ts CHANGED
@@ -31,7 +31,7 @@ export interface AppOptions {
31
31
  cmd?: CMDOptions;
32
32
  aws?: AWSOptions;
33
33
  getPisellos?: () => any;
34
- sqlite?: () => any;
34
+ sqlite?: (app: App) => any;
35
35
  }
36
36
  declare class App {
37
37
  private static instance;
@@ -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/app/app.js CHANGED
@@ -122,7 +122,9 @@ var App = class _App {
122
122
  this.cmd = new import_cmd.default(this, options == null ? void 0 : options.cmd);
123
123
  this.aws = new import_aws.default(this, options == null ? void 0 : options.aws);
124
124
  this.getPisellos = options == null ? void 0 : options.getPisellos;
125
- this.sqlite = options == null ? void 0 : options.sqlite;
125
+ if (options == null ? void 0 : options.sqlite) {
126
+ this.sqlite = options.sqlite(this);
127
+ }
126
128
  if (options == null ? void 0 : options.constants) {
127
129
  this.constants = options.constants || {};
128
130
  }
@@ -21,6 +21,6 @@ export declare class History {
21
21
  externalPage: (path: string) => void;
22
22
  goLogin: () => any;
23
23
  getQuery: () => {
24
- [k: string]: any;
24
+ [k: string]: string;
25
25
  };
26
26
  }
@@ -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: import("./type").RequestSetting | undefined) => Promise<any>;
17
- post: (url: string, data: any, config: import("./type").RequestSetting | undefined) => Promise<any>;
18
- put: (url: string, data: any, config: import("./type").RequestSetting | undefined) => Promise<any>;
19
- remove: (url: string, data: any, config: import("./type").RequestSetting | undefined) => Promise<any>;
20
- custom: (url: string, config: import("./type").RequestSetting | undefined) => any;
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
  };
@@ -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
+ });
@@ -20,9 +20,9 @@ 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 | Iterable<React.ReactNode> | React.JSX.Element | null | undefined;
23
+ renderComponent(item: RouteType, children?: React.ReactNode): string | number | boolean | React.ReactFragment | JSX.Element | null | undefined;
24
24
  getPageByRoute(route: string): ApplicationInterface | undefined;
25
25
  getRouterComponent({ fallback }: {
26
26
  fallback?: React.ReactNode;
27
- }): React.JSX.Element[];
27
+ }): JSX.Element[];
28
28
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pisell/core",
3
- "version": "1.0.69",
3
+ "version": "1.0.71",
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",