@pisell/core 1.0.68 → 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 +107 -0
- package/es/app/app.js +3 -0
- package/es/communicationManager/index.d.ts +59 -0
- package/es/index.d.ts +8 -0
- package/es/locales/index.d.ts +39 -0
- package/es/locales/ja.d.ts +3 -0
- package/es/locales/pt.d.ts +3 -0
- package/es/logger/index.d.ts +135 -0
- package/es/request/index.d.ts +15 -6
- package/es/request/index.js +45 -0
- package/es/request/sse.d.ts +45 -0
- package/es/request/sse.js +164 -0
- package/lib/app/app.d.ts +107 -0
- package/lib/app/app.js +3 -0
- package/lib/communicationManager/index.d.ts +59 -0
- package/lib/index.d.ts +8 -0
- package/lib/locales/index.d.ts +39 -0
- package/lib/locales/ja.d.ts +3 -0
- package/lib/locales/pt.d.ts +3 -0
- package/lib/logger/index.d.ts +135 -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/package.json +3 -2
|
@@ -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/lib/app/app.d.ts
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { RouterManager } from '../routes';
|
|
2
|
+
import { ApplicationManager } from '../applicationManager';
|
|
3
|
+
import { History, HistoryOptions } from '../history';
|
|
4
|
+
import { Data } from '../data';
|
|
5
|
+
import { Locales, LocalesOptions } from '../locales';
|
|
6
|
+
import { Storage, StorageOptions } from '../storage';
|
|
7
|
+
import { MenuManager } from '../menuManager';
|
|
8
|
+
import LoggerManager, { LoggerOptions } from '../logger';
|
|
9
|
+
import { TasksManager } from '../tasks';
|
|
10
|
+
import IndexDBManager, { DBOptions } from '../indexDB';
|
|
11
|
+
import CMD, { CMDOptions } from "../cmd";
|
|
12
|
+
import AWS, { AWSOptions } from "../aws";
|
|
13
|
+
import CommunicationManager from '../communicationManager';
|
|
14
|
+
declare global {
|
|
15
|
+
interface Window {
|
|
16
|
+
app: App;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export interface Bootstrap {
|
|
20
|
+
hooks: {
|
|
21
|
+
[key: string]: () => Promise<void>;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export interface AppOptions {
|
|
25
|
+
logger?: LoggerOptions;
|
|
26
|
+
db?: DBOptions;
|
|
27
|
+
constants?: any;
|
|
28
|
+
history?: HistoryOptions;
|
|
29
|
+
storage?: StorageOptions;
|
|
30
|
+
locales?: LocalesOptions;
|
|
31
|
+
cmd?: CMDOptions;
|
|
32
|
+
aws?: AWSOptions;
|
|
33
|
+
getPisellos?: () => any;
|
|
34
|
+
sqlite?: () => any;
|
|
35
|
+
}
|
|
36
|
+
declare class App {
|
|
37
|
+
private static instance;
|
|
38
|
+
private plugins;
|
|
39
|
+
globalData: any;
|
|
40
|
+
router: RouterManager;
|
|
41
|
+
applicationManager: ApplicationManager;
|
|
42
|
+
history: History;
|
|
43
|
+
data: Data;
|
|
44
|
+
hooks: import("../hooks").HooksExport;
|
|
45
|
+
locales: Locales;
|
|
46
|
+
models: {
|
|
47
|
+
getStore: () => import("../models").Store;
|
|
48
|
+
StoreProvider: typeof import("react-redux").Provider;
|
|
49
|
+
setConfig: (models: any[]) => void;
|
|
50
|
+
};
|
|
51
|
+
request: {
|
|
52
|
+
get: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
|
|
53
|
+
post: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
|
|
54
|
+
put: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
|
|
55
|
+
remove: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
|
|
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>;
|
|
61
|
+
setConfig: (newConfig: Partial<import("../request").RequestConfig>) => void;
|
|
62
|
+
getConfig: () => import("../request").RequestConfig;
|
|
63
|
+
};
|
|
64
|
+
storage: Storage;
|
|
65
|
+
menuManager: MenuManager;
|
|
66
|
+
cookie: {
|
|
67
|
+
setCookie: (name: string, value: string, domain?: string | undefined) => void;
|
|
68
|
+
getCookie: (name: string) => string | null;
|
|
69
|
+
deleteCookie: (name: string, domain?: string | undefined) => void;
|
|
70
|
+
checkCookie: (name: string) => boolean;
|
|
71
|
+
updateCookie: (name: string, value: string, domain?: string | undefined) => void;
|
|
72
|
+
};
|
|
73
|
+
website: {
|
|
74
|
+
setTitle: (title: string) => void;
|
|
75
|
+
setIcon: (paramsIcon: string) => void;
|
|
76
|
+
setAppleWebAppTitle: (title: string) => void;
|
|
77
|
+
};
|
|
78
|
+
logger: LoggerManager;
|
|
79
|
+
pubsub: import("../pubsub").PubSub;
|
|
80
|
+
cmd: CMD;
|
|
81
|
+
aws: AWS;
|
|
82
|
+
tasksManager: TasksManager;
|
|
83
|
+
getPisellos: any;
|
|
84
|
+
sqlite: any;
|
|
85
|
+
bootstrap?: Bootstrap;
|
|
86
|
+
dbManager: IndexDBManager | null;
|
|
87
|
+
constants: {
|
|
88
|
+
channel: string;
|
|
89
|
+
[key: string]: string;
|
|
90
|
+
};
|
|
91
|
+
comm: CommunicationManager;
|
|
92
|
+
private constructor();
|
|
93
|
+
static getInstance(options?: AppOptions): App;
|
|
94
|
+
setGlobalData(globalData: any): void;
|
|
95
|
+
usePlugin(name: string, plugin: any): void;
|
|
96
|
+
usePlugins(plugins: {
|
|
97
|
+
name: string;
|
|
98
|
+
plugin: any;
|
|
99
|
+
}[]): void;
|
|
100
|
+
getPlugin(name: string): any;
|
|
101
|
+
getGlobalData(): any;
|
|
102
|
+
install(): void;
|
|
103
|
+
unInstall(): void;
|
|
104
|
+
setBootstrap(bootstrap: Bootstrap): void;
|
|
105
|
+
getBootstrap(): Bootstrap | undefined;
|
|
106
|
+
}
|
|
107
|
+
export default App;
|
package/lib/app/app.js
CHANGED
|
@@ -95,6 +95,8 @@ var App = class _App {
|
|
|
95
95
|
tasksManager;
|
|
96
96
|
// getPisellos
|
|
97
97
|
getPisellos;
|
|
98
|
+
// sqlLite
|
|
99
|
+
sqlite;
|
|
98
100
|
bootstrap;
|
|
99
101
|
dbManager = null;
|
|
100
102
|
constants = {
|
|
@@ -120,6 +122,7 @@ var App = class _App {
|
|
|
120
122
|
this.cmd = new import_cmd.default(this, options == null ? void 0 : options.cmd);
|
|
121
123
|
this.aws = new import_aws.default(this, options == null ? void 0 : options.aws);
|
|
122
124
|
this.getPisellos = options == null ? void 0 : options.getPisellos;
|
|
125
|
+
this.sqlite = options == null ? void 0 : options.sqlite;
|
|
123
126
|
if (options == null ? void 0 : options.constants) {
|
|
124
127
|
this.constants = options.constants || {};
|
|
125
128
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import App from '../app';
|
|
2
|
+
/**
|
|
3
|
+
* 插件基础类型,通信插件(如 socket、ably)需符合此结构
|
|
4
|
+
* 具体插件可扩展自有方法以支持链式调用
|
|
5
|
+
*/
|
|
6
|
+
export interface CommunicationPlugin {
|
|
7
|
+
destroy?: () => Promise<void>;
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 插件注册选项
|
|
12
|
+
*/
|
|
13
|
+
export interface RegisterOptions {
|
|
14
|
+
/**
|
|
15
|
+
* 是否强制覆盖已存在的同名插件
|
|
16
|
+
* @default false
|
|
17
|
+
*/
|
|
18
|
+
force?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 通信管理器:支持注入、获取、移除多种通信插件(如 socket、ably 等)
|
|
22
|
+
* 管理器自身方法支持链式调用
|
|
23
|
+
*/
|
|
24
|
+
export default class CommunicationManager {
|
|
25
|
+
private app;
|
|
26
|
+
private plugins;
|
|
27
|
+
constructor(app: App);
|
|
28
|
+
/**
|
|
29
|
+
* 注入插件
|
|
30
|
+
* @param name 插件名称,如 'socket'、'ably'
|
|
31
|
+
* @param plugin 插件实例
|
|
32
|
+
* @param options 注册选项,可通过 force 强制覆盖已存在的插件
|
|
33
|
+
* @throws 当插件已存在且未设置 force 时抛出错误
|
|
34
|
+
*/
|
|
35
|
+
register<T extends CommunicationPlugin>(name: string, plugin: T, options?: RegisterOptions): void;
|
|
36
|
+
/**
|
|
37
|
+
* 根据名称获取插件,可对返回值进行链式调用(由插件自身实现)
|
|
38
|
+
* @param name 插件名称
|
|
39
|
+
* @returns 插件实例,未注册时返回 undefined
|
|
40
|
+
*/
|
|
41
|
+
getPlugin<T extends CommunicationPlugin = CommunicationPlugin>(name: string): T | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* 移除指定插件
|
|
44
|
+
* @param name 插件名称
|
|
45
|
+
*/
|
|
46
|
+
remove(name: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* 移除所有插件
|
|
49
|
+
*/
|
|
50
|
+
removeAll(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* 检查是否已注册指定插件
|
|
53
|
+
*/
|
|
54
|
+
has(name: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* 获取已注册的插件名称列表
|
|
57
|
+
*/
|
|
58
|
+
getPluginNames(): string[];
|
|
59
|
+
}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { default as request } from './request';
|
|
2
|
+
export { default as hooks } from './hooks';
|
|
3
|
+
export { default as models } from './models';
|
|
4
|
+
export { default as pubsub } from './pubsub';
|
|
5
|
+
export { default as socket } from './socket';
|
|
6
|
+
export * from './applicationManager';
|
|
7
|
+
export * from './app';
|
|
8
|
+
export * from './communicationManager';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Locale, LibraryItem, LoadLibraryByUrlParams } from "./type";
|
|
2
|
+
import App from "../app";
|
|
3
|
+
export interface LocalesOptions {
|
|
4
|
+
locale?: Locale;
|
|
5
|
+
library?: {
|
|
6
|
+
[key in Locale]: LibraryItem;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export declare class Locales {
|
|
10
|
+
private app;
|
|
11
|
+
locale: string;
|
|
12
|
+
library: {
|
|
13
|
+
[key in Locale]: LibraryItem;
|
|
14
|
+
};
|
|
15
|
+
constructor(app: App, options?: LocalesOptions);
|
|
16
|
+
getLocale: () => string;
|
|
17
|
+
getCurrentTexts: (locale?: Locale) => {
|
|
18
|
+
[key: string]: string;
|
|
19
|
+
};
|
|
20
|
+
setLocale: (locale: Locale, reload?: boolean) => void;
|
|
21
|
+
getText: (id: string, locale?: Locale) => string;
|
|
22
|
+
isCN: () => boolean;
|
|
23
|
+
loadLibraryByUrl: (urls: LoadLibraryByUrlParams) => Promise<{
|
|
24
|
+
[x: string]: LibraryItem;
|
|
25
|
+
}>;
|
|
26
|
+
loadLibraryByItems(libraryList: LibraryItem[]): void;
|
|
27
|
+
loadLibrary: (urls: LoadLibraryByUrlParams) => Promise<{
|
|
28
|
+
[x: string]: LibraryItem;
|
|
29
|
+
}>;
|
|
30
|
+
translation: (text: string | {
|
|
31
|
+
[key: string]: string;
|
|
32
|
+
}, locale?: Locale) => string | number;
|
|
33
|
+
getLibraryByData: (data: LibraryItem[]) => LibraryItem;
|
|
34
|
+
createTextsByLibrary: (id: string, library?: {
|
|
35
|
+
[x: string]: LibraryItem;
|
|
36
|
+
} | undefined) => {
|
|
37
|
+
[x: string]: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import App from "../app";
|
|
2
|
+
export declare type LogConsoleType = "info" | "warning" | "error" | "debug";
|
|
3
|
+
/**
|
|
4
|
+
* 日志项接口
|
|
5
|
+
*/
|
|
6
|
+
interface LogItem {
|
|
7
|
+
logId?: string | number;
|
|
8
|
+
type: LogConsoleType;
|
|
9
|
+
title: string;
|
|
10
|
+
date?: string;
|
|
11
|
+
metadata?: any;
|
|
12
|
+
feishu?: any;
|
|
13
|
+
}
|
|
14
|
+
interface LogFile {
|
|
15
|
+
fileName: string;
|
|
16
|
+
date: string;
|
|
17
|
+
fileContent: LogFileContent;
|
|
18
|
+
}
|
|
19
|
+
interface LogFileContent {
|
|
20
|
+
metadata: any;
|
|
21
|
+
logs: LogItem[];
|
|
22
|
+
}
|
|
23
|
+
export interface LoggerOptions {
|
|
24
|
+
prefix?: string;
|
|
25
|
+
checkInterval?: number;
|
|
26
|
+
feishuConfig?: any;
|
|
27
|
+
retentionDays?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 日志管理器类
|
|
31
|
+
*/
|
|
32
|
+
declare class LoggerManager {
|
|
33
|
+
private logBuffer;
|
|
34
|
+
private timer;
|
|
35
|
+
private checkInterval;
|
|
36
|
+
private prefix;
|
|
37
|
+
private metadata;
|
|
38
|
+
private db;
|
|
39
|
+
private app;
|
|
40
|
+
private feishuConfig;
|
|
41
|
+
private retentionDays;
|
|
42
|
+
private metadataFunction;
|
|
43
|
+
private status;
|
|
44
|
+
/**
|
|
45
|
+
* 构造函数
|
|
46
|
+
* @param prefix 日志前缀
|
|
47
|
+
* @param checkInterval 检查间隔时间,默认5分钟
|
|
48
|
+
*/
|
|
49
|
+
constructor(app: App, options?: LoggerOptions);
|
|
50
|
+
init(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* 初始化 IndexDB
|
|
53
|
+
*/
|
|
54
|
+
private initDB;
|
|
55
|
+
/**
|
|
56
|
+
* 设置元数据
|
|
57
|
+
* @param metadata 元数据
|
|
58
|
+
*/
|
|
59
|
+
setMetadata(metadata: any): void;
|
|
60
|
+
setMetadataFunction(metadataFunction: () => any): void;
|
|
61
|
+
/**
|
|
62
|
+
* 初始化定时器
|
|
63
|
+
*/
|
|
64
|
+
initTimer(): void;
|
|
65
|
+
private setStatus;
|
|
66
|
+
stop(): void;
|
|
67
|
+
/**
|
|
68
|
+
* 添加日志
|
|
69
|
+
* @param log 日志项
|
|
70
|
+
*/
|
|
71
|
+
addLog(log: LogItem): void;
|
|
72
|
+
/**
|
|
73
|
+
* 发送飞书通知
|
|
74
|
+
* @param log 日志项
|
|
75
|
+
*/
|
|
76
|
+
private sendFeishuNotification;
|
|
77
|
+
/**
|
|
78
|
+
* 创建日志文件名
|
|
79
|
+
* @returns 日志文件名
|
|
80
|
+
*/
|
|
81
|
+
private createFileName;
|
|
82
|
+
/**
|
|
83
|
+
* 创建AWS日志文件名
|
|
84
|
+
* @param isManual 紧急上传
|
|
85
|
+
* @returns 日志文件名
|
|
86
|
+
*/
|
|
87
|
+
createAWSFileName(urgent?: boolean): Promise<any>;
|
|
88
|
+
/**
|
|
89
|
+
* 创建日志文件
|
|
90
|
+
* @param _fileName 文件名
|
|
91
|
+
* @returns 日志文件对象
|
|
92
|
+
*/
|
|
93
|
+
private createFile;
|
|
94
|
+
/**
|
|
95
|
+
* 存储日志到持久化存储
|
|
96
|
+
*/
|
|
97
|
+
storeLog(urgent?: boolean): Promise<void>;
|
|
98
|
+
uploadIndexDBLog(): Promise<void>;
|
|
99
|
+
private storeLogToIndexDB;
|
|
100
|
+
/**
|
|
101
|
+
* 清理旧日志,只保留最近指定天数的日志
|
|
102
|
+
*/
|
|
103
|
+
private cleanupOldLogs;
|
|
104
|
+
/**
|
|
105
|
+
* 获取日志文件列表
|
|
106
|
+
* @returns 日志文件列表
|
|
107
|
+
*/
|
|
108
|
+
getLogFiles(): Promise<LogFile[]>;
|
|
109
|
+
/**
|
|
110
|
+
* 获取指定日志文件的内容
|
|
111
|
+
* @param fileName 日志文件名
|
|
112
|
+
* @returns 日志文件内容
|
|
113
|
+
*/
|
|
114
|
+
getLogFile(fileName: string): Promise<LogFile | null>;
|
|
115
|
+
/**
|
|
116
|
+
* 清空指定日志文件
|
|
117
|
+
* @param fileName 日志文件名,不指定则清空所有日志
|
|
118
|
+
* @returns 是否成功
|
|
119
|
+
*/
|
|
120
|
+
clearLogs(fileName?: string): Promise<boolean>;
|
|
121
|
+
/**
|
|
122
|
+
* 设置日志保留天数
|
|
123
|
+
* @param days 保留天数
|
|
124
|
+
*/
|
|
125
|
+
setRetentionDays(days: number): void;
|
|
126
|
+
/**
|
|
127
|
+
* 手动触发清理旧日志
|
|
128
|
+
*/
|
|
129
|
+
manualCleanup(): Promise<void>;
|
|
130
|
+
/**
|
|
131
|
+
* 销毁实例
|
|
132
|
+
*/
|
|
133
|
+
destroy(): void;
|
|
134
|
+
}
|
|
135
|
+
export default LoggerManager;
|
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
|
});
|