@pisell/core 1.0.64 → 1.0.66

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.
@@ -27,32 +27,56 @@ axiosInstance.interceptors.response.use(interceptorsResponse, interceptorsRespon
27
27
 
28
28
  // 请求计数
29
29
  var requestCount = 0;
30
- var DEFAULT_REQUEST_TIMING_METRICS = {
31
- duration: 0,
32
- dnsLookupDuration: 0,
33
- tcpHandshakeDuration: 0,
34
- redirectDuration: 0,
35
- stalledDuration: 0,
36
- ttfbDuration: 0,
37
- requestDuration: 0,
38
- tlsHandshakeDuration: 0
39
- };
40
- var requestTimingStore = new Map();
41
30
  var hasInitializedRequestObserver = false;
42
- function getRequestTimingKey(requestUrl) {
43
- if (typeof window === "undefined") return requestUrl;
44
- try {
45
- return new URL(requestUrl, window.location.href).href.split("#")[0];
46
- } catch (_unused) {
47
- return requestUrl;
48
- }
31
+ function formatDurationInMs(duration) {
32
+ return "".concat(duration.toFixed(2), "ms");
49
33
  }
50
- function pushRequestTimingEntry(entry) {
51
- var timingKey = getRequestTimingKey(entry.name);
52
- var existingEntries = requestTimingStore.get(timingKey) || [];
53
- existingEntries.push(entry);
54
- if (existingEntries.length > 30) existingEntries.shift();
55
- requestTimingStore.set(timingKey, existingEntries);
34
+ function getSafeDuration(start, end) {
35
+ if (start <= 0) return 0;
36
+ if (end <= 0) return 0;
37
+ if (end < start) return 0;
38
+ return end - start;
39
+ }
40
+ var isFilterUrl = function isFilterUrl(url) {
41
+ var _logger$filterUrls;
42
+ var _getConfig = getConfig(),
43
+ logger = _getConfig.logger;
44
+ return logger === null || logger === void 0 || (_logger$filterUrls = logger.filterUrls) === null || _logger$filterUrls === void 0 ? void 0 : _logger$filterUrls.some(function (filterUrl) {
45
+ return url.includes(filterUrl);
46
+ });
47
+ };
48
+ function reportSlowRequestByObserver(entry) {
49
+ var _getConfig2 = getConfig(),
50
+ logger = _getConfig2.logger;
51
+ var maxRequestTime = 2000;
52
+ var requestUrl = entry.name || "";
53
+ var dnsLookupDuration = getSafeDuration(entry.domainLookupStart, entry.domainLookupEnd);
54
+ var tcpHandshakeDuration = getSafeDuration(entry.connectStart, entry.connectEnd);
55
+ var redirectDuration = getSafeDuration(entry.redirectStart, entry.redirectEnd);
56
+ var stalledDuration = getSafeDuration(entry.fetchStart, entry.requestStart);
57
+ var ttfbDuration = getSafeDuration(entry.requestStart, entry.responseStart);
58
+ var requestDuration = getSafeDuration(entry.requestStart, entry.responseEnd);
59
+ var tlsHandshakeDuration = entry.secureConnectionStart > 0 ? getSafeDuration(entry.secureConnectionStart, entry.connectEnd) : 0;
60
+ if (!requestUrl) return;
61
+ if (isFilterUrl(requestUrl)) return;
62
+ if (entry.duration <= maxRequestTime) return;
63
+ var app = getApp();
64
+ app.logger.addLog({
65
+ type: "warning",
66
+ title: "[ Request ]: Slow - Observer \u8D85\u8FC75s",
67
+ metadata: {
68
+ url: requestUrl,
69
+ duration: formatDurationInMs(entry.duration),
70
+ initiatorType: entry.initiatorType,
71
+ dnsLookupDuration: formatDurationInMs(dnsLookupDuration),
72
+ tcpHandshakeDuration: formatDurationInMs(tcpHandshakeDuration),
73
+ redirectDuration: formatDurationInMs(redirectDuration),
74
+ stalledDuration: formatDurationInMs(stalledDuration),
75
+ ttfbDuration: formatDurationInMs(ttfbDuration),
76
+ requestDuration: formatDurationInMs(requestDuration),
77
+ tlsHandshakeDuration: formatDurationInMs(tlsHandshakeDuration)
78
+ }
79
+ });
56
80
  }
57
81
  function initializeRequestPerformanceObserver() {
58
82
  if (hasInitializedRequestObserver) return;
@@ -65,79 +89,32 @@ function initializeRequestPerformanceObserver() {
65
89
  if (entry.entryType !== "resource") return;
66
90
  var resourceEntry = entry;
67
91
  if (!["fetch", "xmlhttprequest"].includes(resourceEntry.initiatorType)) return;
68
- pushRequestTimingEntry(resourceEntry);
92
+ reportSlowRequestByObserver(resourceEntry);
69
93
  });
70
94
  });
71
- observer.observe({
72
- entryTypes: ["resource"]
73
- });
95
+ try {
96
+ observer.observe({
97
+ type: "resource",
98
+ buffered: true
99
+ });
100
+ } catch (_unused) {
101
+ observer.observe({
102
+ entryTypes: ["resource"]
103
+ });
104
+ }
74
105
  } catch (error) {
75
106
  hasInitializedRequestObserver = false;
76
107
  }
77
108
  }
78
- function readAndConsumeRequestTimingEntry(requestUrl) {
79
- var timingKey = getRequestTimingKey(requestUrl);
80
- var cachedEntries = requestTimingStore.get(timingKey);
81
- if (cachedEntries !== null && cachedEntries !== void 0 && cachedEntries.length) {
82
- var matchedEntry = cachedEntries.shift();
83
- if (!cachedEntries.length) requestTimingStore.delete(timingKey);
84
- return matchedEntry;
85
- }
86
- if (typeof performance === "undefined") return undefined;
87
- var fallbackEntries = performance.getEntriesByName(timingKey, "resource");
88
- for (var index = fallbackEntries.length - 1; index >= 0; index--) {
89
- var entry = fallbackEntries[index];
90
- if (["fetch", "xmlhttprequest"].includes(entry.initiatorType)) return entry;
91
- }
92
- return undefined;
93
- }
94
- function getSafeDuration(start, end) {
95
- if (start <= 0) return 0;
96
- if (end <= 0) return 0;
97
- if (end < start) return 0;
98
- return end - start;
99
- }
100
- function calculateRequestTimingMetrics(entry) {
101
- if (!entry) return DEFAULT_REQUEST_TIMING_METRICS;
102
- var redirectDuration = getSafeDuration(entry.redirectStart, entry.redirectEnd);
103
- var dnsLookupDuration = getSafeDuration(entry.domainLookupStart, entry.domainLookupEnd);
104
- var tcpHandshakeDuration = getSafeDuration(entry.connectStart, entry.connectEnd);
105
- var stalledDuration = getSafeDuration(entry.fetchStart, entry.requestStart);
106
- var ttfbDuration = getSafeDuration(entry.requestStart, entry.responseStart);
107
- var requestDuration = getSafeDuration(entry.requestStart, entry.responseEnd);
108
- var tlsHandshakeDuration = entry.secureConnectionStart > 0 ? getSafeDuration(entry.secureConnectionStart, entry.connectEnd) : 0;
109
- var duration = entry.duration > 0 ? entry.duration : requestDuration;
110
- return {
111
- duration: duration,
112
- dnsLookupDuration: dnsLookupDuration,
113
- tcpHandshakeDuration: tcpHandshakeDuration,
114
- redirectDuration: redirectDuration,
115
- stalledDuration: stalledDuration,
116
- ttfbDuration: ttfbDuration,
117
- requestDuration: requestDuration,
118
- tlsHandshakeDuration: tlsHandshakeDuration
119
- };
120
- }
121
- function formatDurationInMs(duration) {
122
- return "".concat(duration.toFixed(2), "ms");
123
- }
124
109
  initializeRequestPerformanceObserver();
125
- var isFilterUrl = function isFilterUrl(url) {
126
- var _logger$filterUrls;
127
- var _getConfig = getConfig(),
128
- logger = _getConfig.logger;
129
- return logger === null || logger === void 0 || (_logger$filterUrls = logger.filterUrls) === null || _logger$filterUrls === void 0 ? void 0 : _logger$filterUrls.some(function (filterUrl) {
130
- return url.includes(filterUrl);
131
- });
132
- };
133
110
  export var createRequest = function createRequest(props) {
134
111
  var data = props.data,
135
112
  config = props.config,
136
113
  method = props.method,
137
114
  url = props.url;
138
- var _getConfig2 = getConfig(),
139
- getUrl = _getConfig2.getUrl,
140
- logger = _getConfig2.logger;
115
+ var _getConfig3 = getConfig(),
116
+ getUrl = _getConfig3.getUrl,
117
+ logger = _getConfig3.logger;
141
118
  var requestStartTime = typeof performance !== "undefined" ? performance.now() : Date.now();
142
119
  var app = getApp();
143
120
  var requestId = getUniqueId();
@@ -175,10 +152,7 @@ export var createRequest = function createRequest(props) {
175
152
  var isError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
176
153
  var requestId = arguments.length > 3 ? arguments[3] : undefined;
177
154
  try {
178
- var performanceEntry = readAndConsumeRequestTimingEntry(url);
179
- var timingMetrics = calculateRequestTimingMetrics(performanceEntry);
180
- var fallbackDuration = (typeof performance !== "undefined" ? performance.now() : Date.now()) - requestStartTime;
181
- var duration = timingMetrics.duration > 0 ? timingMetrics.duration : fallbackDuration;
155
+ var duration = (typeof performance !== "undefined" ? performance.now() : Date.now()) - requestStartTime;
182
156
  var maxRequestTime = (logger === null || logger === void 0 ? void 0 : logger.maxRequestTime) || 5000;
183
157
 
184
158
  // 如果请求URL在过滤列表中,则不判断超时时间
@@ -199,14 +173,7 @@ export var createRequest = function createRequest(props) {
199
173
  metadata: {
200
174
  error: isError ? JSON.stringify(result) : '',
201
175
  duration: "".concat((duration / 1000).toFixed(2), "s"),
202
- url: url,
203
- dnsLookupDuration: formatDurationInMs(timingMetrics.dnsLookupDuration),
204
- tcpHandshakeDuration: formatDurationInMs(timingMetrics.tcpHandshakeDuration),
205
- redirectDuration: formatDurationInMs(timingMetrics.redirectDuration),
206
- stalledDuration: formatDurationInMs(timingMetrics.stalledDuration),
207
- ttfbDuration: formatDurationInMs(timingMetrics.ttfbDuration),
208
- requestDuration: formatDurationInMs(timingMetrics.requestDuration),
209
- tlsHandshakeDuration: formatDurationInMs(timingMetrics.tlsHandshakeDuration)
176
+ url: url
210
177
  }
211
178
  });
212
179
  } catch (error) {}
@@ -53,32 +53,52 @@ var axiosInstance = import_axios.default.create(import_constants.axiosConfig);
53
53
  axiosInstance.interceptors.request.use(import_utils.interceptorsRequest, import_utils.interceptorsRequestError);
54
54
  axiosInstance.interceptors.response.use(import_utils.interceptorsResponse, import_utils.interceptorsResponseError);
55
55
  var requestCount = 0;
56
- var DEFAULT_REQUEST_TIMING_METRICS = {
57
- duration: 0,
58
- dnsLookupDuration: 0,
59
- tcpHandshakeDuration: 0,
60
- redirectDuration: 0,
61
- stalledDuration: 0,
62
- ttfbDuration: 0,
63
- requestDuration: 0,
64
- tlsHandshakeDuration: 0
65
- };
66
- var requestTimingStore = /* @__PURE__ */ new Map();
67
56
  var hasInitializedRequestObserver = false;
68
- function getRequestTimingKey(requestUrl) {
69
- if (typeof window === "undefined") return requestUrl;
70
- try {
71
- return new URL(requestUrl, window.location.href).href.split("#")[0];
72
- } catch {
73
- return requestUrl;
74
- }
57
+ function formatDurationInMs(duration) {
58
+ return `${duration.toFixed(2)}ms`;
75
59
  }
76
- function pushRequestTimingEntry(entry) {
77
- const timingKey = getRequestTimingKey(entry.name);
78
- const existingEntries = requestTimingStore.get(timingKey) || [];
79
- existingEntries.push(entry);
80
- if (existingEntries.length > 30) existingEntries.shift();
81
- requestTimingStore.set(timingKey, existingEntries);
60
+ function getSafeDuration(start, end) {
61
+ if (start <= 0) return 0;
62
+ if (end <= 0) return 0;
63
+ if (end < start) return 0;
64
+ return end - start;
65
+ }
66
+ var isFilterUrl = (url) => {
67
+ var _a;
68
+ const { logger } = (0, import_config.getConfig)();
69
+ return (_a = logger == null ? void 0 : logger.filterUrls) == null ? void 0 : _a.some((filterUrl) => url.includes(filterUrl));
70
+ };
71
+ function reportSlowRequestByObserver(entry) {
72
+ const { logger } = (0, import_config.getConfig)();
73
+ const maxRequestTime = 2e3;
74
+ const requestUrl = entry.name || "";
75
+ const dnsLookupDuration = getSafeDuration(entry.domainLookupStart, entry.domainLookupEnd);
76
+ const tcpHandshakeDuration = getSafeDuration(entry.connectStart, entry.connectEnd);
77
+ const redirectDuration = getSafeDuration(entry.redirectStart, entry.redirectEnd);
78
+ const stalledDuration = getSafeDuration(entry.fetchStart, entry.requestStart);
79
+ const ttfbDuration = getSafeDuration(entry.requestStart, entry.responseStart);
80
+ const requestDuration = getSafeDuration(entry.requestStart, entry.responseEnd);
81
+ const tlsHandshakeDuration = entry.secureConnectionStart > 0 ? getSafeDuration(entry.secureConnectionStart, entry.connectEnd) : 0;
82
+ if (!requestUrl) return;
83
+ if (isFilterUrl(requestUrl)) return;
84
+ if (entry.duration <= maxRequestTime) return;
85
+ const app = (0, import_app.getApp)();
86
+ app.logger.addLog({
87
+ type: "warning",
88
+ title: `[ Request ]: Slow - Observer 超过5s`,
89
+ metadata: {
90
+ url: requestUrl,
91
+ duration: formatDurationInMs(entry.duration),
92
+ initiatorType: entry.initiatorType,
93
+ dnsLookupDuration: formatDurationInMs(dnsLookupDuration),
94
+ tcpHandshakeDuration: formatDurationInMs(tcpHandshakeDuration),
95
+ redirectDuration: formatDurationInMs(redirectDuration),
96
+ stalledDuration: formatDurationInMs(stalledDuration),
97
+ ttfbDuration: formatDurationInMs(ttfbDuration),
98
+ requestDuration: formatDurationInMs(requestDuration),
99
+ tlsHandshakeDuration: formatDurationInMs(tlsHandshakeDuration)
100
+ }
101
+ });
82
102
  }
83
103
  function initializeRequestPerformanceObserver() {
84
104
  if (hasInitializedRequestObserver) return;
@@ -91,66 +111,19 @@ function initializeRequestPerformanceObserver() {
91
111
  if (entry.entryType !== "resource") return;
92
112
  const resourceEntry = entry;
93
113
  if (!["fetch", "xmlhttprequest"].includes(resourceEntry.initiatorType)) return;
94
- pushRequestTimingEntry(resourceEntry);
114
+ reportSlowRequestByObserver(resourceEntry);
95
115
  });
96
116
  });
97
- observer.observe({ entryTypes: ["resource"] });
117
+ try {
118
+ observer.observe({ type: "resource", buffered: true });
119
+ } catch {
120
+ observer.observe({ entryTypes: ["resource"] });
121
+ }
98
122
  } catch (error) {
99
123
  hasInitializedRequestObserver = false;
100
124
  }
101
125
  }
102
- function readAndConsumeRequestTimingEntry(requestUrl) {
103
- const timingKey = getRequestTimingKey(requestUrl);
104
- const cachedEntries = requestTimingStore.get(timingKey);
105
- if (cachedEntries == null ? void 0 : cachedEntries.length) {
106
- const matchedEntry = cachedEntries.shift();
107
- if (!cachedEntries.length) requestTimingStore.delete(timingKey);
108
- return matchedEntry;
109
- }
110
- if (typeof performance === "undefined") return void 0;
111
- const fallbackEntries = performance.getEntriesByName(timingKey, "resource");
112
- for (let index = fallbackEntries.length - 1; index >= 0; index--) {
113
- const entry = fallbackEntries[index];
114
- if (["fetch", "xmlhttprequest"].includes(entry.initiatorType)) return entry;
115
- }
116
- return void 0;
117
- }
118
- function getSafeDuration(start, end) {
119
- if (start <= 0) return 0;
120
- if (end <= 0) return 0;
121
- if (end < start) return 0;
122
- return end - start;
123
- }
124
- function calculateRequestTimingMetrics(entry) {
125
- if (!entry) return DEFAULT_REQUEST_TIMING_METRICS;
126
- const redirectDuration = getSafeDuration(entry.redirectStart, entry.redirectEnd);
127
- const dnsLookupDuration = getSafeDuration(entry.domainLookupStart, entry.domainLookupEnd);
128
- const tcpHandshakeDuration = getSafeDuration(entry.connectStart, entry.connectEnd);
129
- const stalledDuration = getSafeDuration(entry.fetchStart, entry.requestStart);
130
- const ttfbDuration = getSafeDuration(entry.requestStart, entry.responseStart);
131
- const requestDuration = getSafeDuration(entry.requestStart, entry.responseEnd);
132
- const tlsHandshakeDuration = entry.secureConnectionStart > 0 ? getSafeDuration(entry.secureConnectionStart, entry.connectEnd) : 0;
133
- const duration = entry.duration > 0 ? entry.duration : requestDuration;
134
- return {
135
- duration,
136
- dnsLookupDuration,
137
- tcpHandshakeDuration,
138
- redirectDuration,
139
- stalledDuration,
140
- ttfbDuration,
141
- requestDuration,
142
- tlsHandshakeDuration
143
- };
144
- }
145
- function formatDurationInMs(duration) {
146
- return `${duration.toFixed(2)}ms`;
147
- }
148
126
  initializeRequestPerformanceObserver();
149
- var isFilterUrl = (url) => {
150
- var _a;
151
- const { logger } = (0, import_config.getConfig)();
152
- return (_a = logger == null ? void 0 : logger.filterUrls) == null ? void 0 : _a.some((filterUrl) => url.includes(filterUrl));
153
- };
154
127
  var createRequest = (props) => {
155
128
  const { data, config, method, url } = props;
156
129
  const { getUrl, logger } = (0, import_config.getConfig)();
@@ -181,10 +154,7 @@ var createRequest = (props) => {
181
154
  let _url = (getUrl == null ? void 0 : getUrl(props)) || "";
182
155
  const handleRequestComplete = (url2, result, isError = false, requestId2) => {
183
156
  try {
184
- const performanceEntry = readAndConsumeRequestTimingEntry(url2);
185
- const timingMetrics = calculateRequestTimingMetrics(performanceEntry);
186
- const fallbackDuration = (typeof performance !== "undefined" ? performance.now() : Date.now()) - requestStartTime;
187
- const duration = timingMetrics.duration > 0 ? timingMetrics.duration : fallbackDuration;
157
+ const duration = (typeof performance !== "undefined" ? performance.now() : Date.now()) - requestStartTime;
188
158
  let maxRequestTime = (logger == null ? void 0 : logger.maxRequestTime) || 5e3;
189
159
  if (isFilterUrl(url2)) {
190
160
  maxRequestTime = 99999999;
@@ -199,14 +169,7 @@ var createRequest = (props) => {
199
169
  metadata: {
200
170
  error: isError ? JSON.stringify(result) : "",
201
171
  duration: `${(duration / 1e3).toFixed(2)}s`,
202
- url: url2,
203
- dnsLookupDuration: formatDurationInMs(timingMetrics.dnsLookupDuration),
204
- tcpHandshakeDuration: formatDurationInMs(timingMetrics.tcpHandshakeDuration),
205
- redirectDuration: formatDurationInMs(timingMetrics.redirectDuration),
206
- stalledDuration: formatDurationInMs(timingMetrics.stalledDuration),
207
- ttfbDuration: formatDurationInMs(timingMetrics.ttfbDuration),
208
- requestDuration: formatDurationInMs(timingMetrics.requestDuration),
209
- tlsHandshakeDuration: formatDurationInMs(timingMetrics.tlsHandshakeDuration)
172
+ url: url2
210
173
  }
211
174
  });
212
175
  } catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pisell/core",
3
- "version": "1.0.64",
3
+ "version": "1.0.66",
4
4
  "sideEffects": false,
5
5
  "main": "./lib/index.js",
6
6
  "module": "./es/index.js",
package/es/app/app.d.ts DELETED
@@ -1,101 +0,0 @@
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
- }
35
- declare class App {
36
- private static instance;
37
- private plugins;
38
- globalData: any;
39
- router: RouterManager;
40
- applicationManager: ApplicationManager;
41
- history: History;
42
- data: Data;
43
- hooks: import("../hooks").HooksExport;
44
- locales: Locales;
45
- models: {
46
- getStore: () => import("../models").Store;
47
- StoreProvider: typeof import("react-redux").Provider;
48
- setConfig: (models: any[]) => void;
49
- };
50
- request: {
51
- get: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
52
- post: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
53
- put: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
54
- remove: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
55
- custom: (url: string, config: import("../request").RequestSetting | undefined) => any;
56
- setConfig: (newConfig: Partial<import("../request").RequestConfig>) => void;
57
- getConfig: () => import("../request").RequestConfig;
58
- };
59
- storage: Storage;
60
- menuManager: MenuManager;
61
- cookie: {
62
- setCookie: (name: string, value: string, domain?: string | undefined) => void;
63
- getCookie: (name: string) => string | null;
64
- deleteCookie: (name: string, domain?: string | undefined) => void;
65
- checkCookie: (name: string) => boolean;
66
- updateCookie: (name: string, value: string, domain?: string | undefined) => void;
67
- };
68
- website: {
69
- setTitle: (title: string) => void;
70
- setIcon: (paramsIcon: string) => void;
71
- setAppleWebAppTitle: (title: string) => void;
72
- };
73
- logger: LoggerManager;
74
- pubsub: import("../pubsub").PubSub;
75
- cmd: CMD;
76
- aws: AWS;
77
- tasksManager: TasksManager;
78
- getPisellos: any;
79
- bootstrap?: Bootstrap;
80
- dbManager: IndexDBManager | null;
81
- constants: {
82
- channel: string;
83
- [key: string]: string;
84
- };
85
- comm: CommunicationManager;
86
- private constructor();
87
- static getInstance(options?: AppOptions): App;
88
- setGlobalData(globalData: any): void;
89
- usePlugin(name: string, plugin: any): void;
90
- usePlugins(plugins: {
91
- name: string;
92
- plugin: any;
93
- }[]): void;
94
- getPlugin(name: string): any;
95
- getGlobalData(): any;
96
- install(): void;
97
- unInstall(): void;
98
- setBootstrap(bootstrap: Bootstrap): void;
99
- getBootstrap(): Bootstrap | undefined;
100
- }
101
- export default App;
@@ -1,59 +0,0 @@
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/es/index.d.ts DELETED
@@ -1,8 +0,0 @@
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';
@@ -1,39 +0,0 @@
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
- }
@@ -1,3 +0,0 @@
1
- import { LibraryItem } from './type';
2
- declare const _default: LibraryItem;
3
- export default _default;
@@ -1,3 +0,0 @@
1
- import { LibraryItem } from './type';
2
- declare const _default: LibraryItem;
3
- export default _default;
@@ -1,135 +0,0 @@
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/app/app.d.ts DELETED
@@ -1,101 +0,0 @@
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
- }
35
- declare class App {
36
- private static instance;
37
- private plugins;
38
- globalData: any;
39
- router: RouterManager;
40
- applicationManager: ApplicationManager;
41
- history: History;
42
- data: Data;
43
- hooks: import("../hooks").HooksExport;
44
- locales: Locales;
45
- models: {
46
- getStore: () => import("../models").Store;
47
- StoreProvider: typeof import("react-redux").Provider;
48
- setConfig: (models: any[]) => void;
49
- };
50
- request: {
51
- get: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
52
- post: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
53
- put: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
54
- remove: (url: string, data: any, config: import("../request").RequestSetting | undefined) => Promise<any>;
55
- custom: (url: string, config: import("../request").RequestSetting | undefined) => any;
56
- setConfig: (newConfig: Partial<import("../request").RequestConfig>) => void;
57
- getConfig: () => import("../request").RequestConfig;
58
- };
59
- storage: Storage;
60
- menuManager: MenuManager;
61
- cookie: {
62
- setCookie: (name: string, value: string, domain?: string | undefined) => void;
63
- getCookie: (name: string) => string | null;
64
- deleteCookie: (name: string, domain?: string | undefined) => void;
65
- checkCookie: (name: string) => boolean;
66
- updateCookie: (name: string, value: string, domain?: string | undefined) => void;
67
- };
68
- website: {
69
- setTitle: (title: string) => void;
70
- setIcon: (paramsIcon: string) => void;
71
- setAppleWebAppTitle: (title: string) => void;
72
- };
73
- logger: LoggerManager;
74
- pubsub: import("../pubsub").PubSub;
75
- cmd: CMD;
76
- aws: AWS;
77
- tasksManager: TasksManager;
78
- getPisellos: any;
79
- bootstrap?: Bootstrap;
80
- dbManager: IndexDBManager | null;
81
- constants: {
82
- channel: string;
83
- [key: string]: string;
84
- };
85
- comm: CommunicationManager;
86
- private constructor();
87
- static getInstance(options?: AppOptions): App;
88
- setGlobalData(globalData: any): void;
89
- usePlugin(name: string, plugin: any): void;
90
- usePlugins(plugins: {
91
- name: string;
92
- plugin: any;
93
- }[]): void;
94
- getPlugin(name: string): any;
95
- getGlobalData(): any;
96
- install(): void;
97
- unInstall(): void;
98
- setBootstrap(bootstrap: Bootstrap): void;
99
- getBootstrap(): Bootstrap | undefined;
100
- }
101
- export default App;
@@ -1,59 +0,0 @@
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 DELETED
@@ -1,8 +0,0 @@
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';
@@ -1,39 +0,0 @@
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
- }
@@ -1,3 +0,0 @@
1
- import { LibraryItem } from './type';
2
- declare const _default: LibraryItem;
3
- export default _default;
@@ -1,3 +0,0 @@
1
- import { LibraryItem } from './type';
2
- declare const _default: LibraryItem;
3
- export default _default;
@@ -1,135 +0,0 @@
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;