knight-web 2.0.26 → 2.1.1

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.
@@ -1,6 +1,110 @@
1
1
  import { AbstractObject, AbstractObjectProps } from "./AbstractObject";
2
- /** 抽象界面基类 */
3
2
  export declare abstract class AbstractPanel<Props extends AbstractPanelProps = AbstractPanelProps> extends AbstractObject<Props> {
3
+ private _timers;
4
+ private _listeners;
5
+ private _rafIds;
6
+ componentWillUnmount(): void;
7
+ /** 释放所有自动追踪的资源(卸载时自动调用,也可手动调用) */
8
+ protected Release(): void;
9
+ /**
10
+ * 创建响应式数据。对返回对象的任何属性进行赋值(深层嵌套也有效),
11
+ * 或调用数组的变异方法(push/pop/splice 等),都会自动触发界面重新渲染。
12
+ *
13
+ * **必须作为类字段初始化**(非 OnLoad),因为首次 render 在 OnLoad 之前执行。
14
+ *
15
+ * @example
16
+ * private $data = this.Reactive({ count: 0, list: [] as string[] });
17
+ *
18
+ * // 任意位置修改,界面自动刷新
19
+ * this.$data.count++;
20
+ * this.$data.list.push('new item');
21
+ *
22
+ * // 在 OnRender 中直接读取
23
+ * return <div>{this.$data.count}</div>;
24
+ */
25
+ protected Reactive<T extends object>(initial: T): T;
26
+ /** 导航到指定路径 */
27
+ protected Navigate(path: string, search?: string): void;
28
+ /** 浏览器后退 */
29
+ protected Back(): void;
30
+ /** 浏览器前进 */
31
+ protected Forward(): void;
32
+ /** 跳转历史记录 (delta 为负数后退, 正数前进) */
33
+ protected Go(delta: number): void;
34
+ /** 刷新当前页面 */
35
+ protected Reload(): void;
36
+ /** 替换当前历史记录并导航到指定 URL */
37
+ protected Replace(url: string, search?: string): void;
38
+ /** 打开新窗口 */
39
+ protected OpenWindow(url: string, target?: string, features?: string): void;
40
+ /** 当前路径名 */
41
+ protected get PathName(): string;
42
+ /** 获取 URL 查询参数 */
43
+ protected SearchParams<T extends object = Record<string, string>>(): T;
44
+ /**
45
+ * setTimeout — 组件卸载时自动 clearTimeout
46
+ * @returns 定时器 ID (可用于提前 ClearTimer)
47
+ */
48
+ protected Timeout(fn: () => void, delay: number): number;
49
+ /**
50
+ * setInterval — 组件卸载时自动 clearInterval
51
+ * @returns 定时器 ID (可用于提前 ClearTimer)
52
+ */
53
+ protected Interval(fn: () => void, delay: number): number;
54
+ /** 手动清除定时器 (同时匹配 setTimeout 和 setInterval) */
55
+ protected ClearTimer(id: number): void;
56
+ /** Promise 封装的延迟 — await this.Delay(1000) */
57
+ protected Delay(ms: number): Promise<void>;
58
+ /**
59
+ * 防抖 — 返回一个防抖后的函数。
60
+ * 连续调用只会在最后一次调用的 delay 毫秒后执行一次。
61
+ * 组件卸载时自动取消 pending 中的调用。
62
+ */
63
+ protected Debounce<T extends (...args: any[]) => void>(fn: T, delay: number): T;
64
+ /**
65
+ * 节流 — 返回一个节流后的函数。
66
+ * 在 delay 毫秒内最多执行一次。
67
+ * 组件卸载时自动取消 pending 中的调用。
68
+ */
69
+ protected Throttle<T extends (...args: any[]) => void>(fn: T, delay: number): T;
70
+ /**
71
+ * requestAnimationFrame — 组件卸载时自动 cancelAnimationFrame
72
+ * @returns RAF 句柄 (可用于提前 CancelRAF)
73
+ */
74
+ protected AnimationFrame(fn: FrameRequestCallback): number;
75
+ /** 取消动画帧 */
76
+ protected CancelRAF(id: number): void;
77
+ /** 等待下一帧 — await this.NextFrame() */
78
+ protected NextFrame(): Promise<number>;
79
+ /**
80
+ * addEventListener — 组件卸载时自动 removeEventListener。
81
+ * 适用于 window / document / 任意 DOM 元素 / WebSocket 等 EventTarget。
82
+ */
83
+ protected Listen(target: EventTarget, type: string, handler: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
84
+ /** querySelector 快捷方式 */
85
+ protected Query<E extends Element = Element>(selector: string): E | null;
86
+ /** querySelectorAll 快捷方式 */
87
+ protected QueryAll<E extends Element = Element>(selector: string): NodeListOf<E>;
88
+ /** 复制文本到剪贴板,返回是否成功 */
89
+ protected Copy(text: string): Promise<boolean>;
90
+ /** 读取剪贴板文本 */
91
+ protected ReadClipboard(): Promise<string>;
92
+ /** 部分更新组件状态 (等同于 setState 的类型安全封装) */
93
+ protected SetPanelState(state: Partial<Props>): void;
94
+ /** 获取当前状态 */
95
+ protected GetPanelState(): Readonly<Props>;
96
+ /** HTTP GET 请求,自动解析 JSON */
97
+ protected HttpGet<T = any>(url: string, params?: Record<string, string>): Promise<T>;
98
+ /** HTTP POST 请求,自动解析 JSON */
99
+ protected HttpPost<T = any>(url: string, body?: any, params?: Record<string, string>): Promise<T>;
100
+ /** 本地存储 (LocalStorage) */
101
+ protected get Storage(): import("../utility").BrowserUtility.LocalStorage;
102
+ /** 全局数据池 (跨组件共享) */
103
+ protected get GlobalData(): import("../utility").ObjectUtility.MapPool<object>;
104
+ /** Cookie 操作 */
105
+ protected get Cookie(): import("../utility").BrowserUtility.BrowserCookie;
106
+ /** 全局事件系统 */
107
+ protected get EventBus(): import("../utility").ObjectUtility.EventSystem;
4
108
  }
5
109
  /** 抽象属性接口 */
6
110
  export declare abstract class AbstractPanelProps implements AbstractObjectProps {
@@ -1,6 +1,6 @@
1
1
  import { BrowserUtility, InputUtility, NetworkUtility, ObjectUtility } from '../utility';
2
2
  import { AbstractObject } from '../base';
3
- import { Navgation } from '.';
3
+ import { Navgation } from './Navgation';
4
4
  export declare class Knight {
5
5
  /** 全局单例 */
6
6
  private static instance;
@@ -1,13 +1,44 @@
1
+ import React from "react";
1
2
  import { AbstractObject } from "../base";
2
3
  import { InterfaceUtility } from "../utility";
3
4
  /** 导航工具 */
4
5
  export declare class Navgation {
5
- /** 导航配置池 */
6
+ /** 导航配置池(平铺存储所有路由) */
6
7
  private static navgations;
7
- /** 注册导航
8
- * @param option 导航配置
8
+ /**
9
+ * 嵌套路由出口组件。在父组件的 OnRender 中放置 <Navgation.Outlet />,
10
+ * 子路由匹配的组件将渲染在此处。
11
+ * @example
12
+ * protected OnRender(props): React.ReactElement {
13
+ * return <div>
14
+ * <h1>Admin Layout</h1>
15
+ * <Navgation.Outlet />
16
+ * </div>;
17
+ * }
18
+ */
19
+ static Outlet: React.FC;
20
+ /** 注册导航(装饰器)
21
+ * @param path 路由路径,格式: /main/login
22
+ * @param authority 是否启用鉴权
9
23
  */
10
24
  static OnRegist(path: string, authority?: boolean): Function;
25
+ /** 为已注册的父路由添加子路由
26
+ * @param parentPath 父路由的完整路径 (如 "/admin")
27
+ * @param children 子路由配置数组,path 为相对路径 (如 "users", "users/:id")
28
+ * @example
29
+ * Navgation.OnRegistChildren("/admin", [
30
+ * { path: "users", authority: false, type: AdminUsers },
31
+ * { path: "users/:id", authority: false, type: UserDetail },
32
+ * { path: "settings", authority: false, type: AdminSettings },
33
+ * ]);
34
+ */
35
+ static OnRegistChildren(parentPath: string, children: NavgationOption[]): void;
36
+ /** 创建路由配置(工厂方法,用于 OnRegistChildren 的 children 数组)
37
+ * @param path 相对路径 (如 "users/:id")
38
+ * @param type 组件类型
39
+ * @param authority 鉴权开关
40
+ */
41
+ static OnRoute(path: string, type: InterfaceUtility.IType<AbstractObject>, authority?: boolean): NavgationOption;
11
42
  /** 根容器 */
12
43
  private htmlRoot;
13
44
  /** 渲染器 */
@@ -20,13 +51,29 @@ export declare class Navgation {
20
51
  private OnGetDefaultOption;
21
52
  /** 设置鉴权函数 */
22
53
  OnSetAuthority(authorityFunction: () => Promise<boolean>): void;
23
- /** 导航变更 */
54
+ /** 导航变更(读取当前 URL 并渲染,不操作浏览器历史) */
24
55
  private OnChange;
56
+ /**
57
+ * 从 URL 路径解析出嵌套路由链
58
+ * 例如 /admin/users/123 → [AdminLayout, UsersList, UserDetail]
59
+ */
60
+ private ResolveRouteChain;
61
+ /** 在子路由数组中匹配路径段 */
62
+ private MatchChildRoute;
63
+ /**
64
+ * 将路由链构建为嵌套的 React 组件树。
65
+ * 每一层组件被独立的 OutletContext.Provider 包裹,叶节点的 Outlet 读到 null。
66
+ *
67
+ * 例: [AdminLayout, AdminUsers, UserDetail1] 构建为:
68
+ * Provider(value=Provider(value=Provider(value=null, UserDetail1), AdminUsers))
69
+ * └─ AdminLayout → Outlet → 上一级 Provider → AdminUsers → Outlet → UserDetail1 → Outlet=null
70
+ */
71
+ private BuildNestedTree;
25
72
  /** 性能分析 */
26
73
  private OnProfilerRender;
27
74
  /** 整合路由 */
28
75
  private OnConcat;
29
- /** 导航 */
76
+ /** 导航(程序化跳转 — 推入浏览器历史记录并渲染) */
30
77
  OnNavigate(pathName: string, search?: string): void;
31
78
  /** 前进 */
32
79
  OnForward(): void;
@@ -61,4 +108,8 @@ export interface NavgationOption {
61
108
  authority: boolean;
62
109
  /** 组件类型 */
63
110
  type?: InterfaceUtility.IType<AbstractObject>;
111
+ /** 子路由(相对路径,仅需最后的路径段) */
112
+ children?: NavgationOption[];
113
+ /** 路由参数(内部使用,匹配 :param 时填充) */
114
+ params?: Record<string, string>;
64
115
  }
@@ -17,7 +17,11 @@ export declare namespace ConfigUtility {
17
17
  /** 时间戳 */
18
18
  timeStamp?: number;
19
19
  }
20
- /** 配置类 */
20
+ /**
21
+ * 配置类
22
+ * 注意: 此License校验仅为客户端层面的版权声明输出,不提供真实的安全保护。
23
+ * 加密密钥和校验逻辑均存在于客户端代码中,无法防止逆向破解。
24
+ */
21
25
  class Config {
22
26
  /** 私钥 */
23
27
  private privateKey;
@@ -15,7 +15,7 @@ export declare namespace CryptoUtility {
15
15
  * @param _cipherText
16
16
  * @param _key
17
17
  */
18
- static CheckToken(_cipherText: string, _key?: string): ICheckResult;
18
+ static CheckToken(_cipherText: string, _key: string): ICheckResult;
19
19
  /**
20
20
  * 解析Base64URL
21
21
  * @param _message
@@ -451,7 +451,6 @@ export declare namespace MathUtility {
451
451
  private _x;
452
452
  private _y;
453
453
  private _z;
454
- private _isDirty;
455
454
  get x(): number;
456
455
  set x(value: number);
457
456
  get y(): number;
@@ -9,7 +9,7 @@ export declare namespace NetworkUtility {
9
9
  /** WebSocket网络协议 */
10
10
  private _webSokcet;
11
11
  /** WebSocket网络协议 */
12
- get WebSokcet(): WebSocketNetWork;
12
+ get WebSocket(): WebSocketNetWork;
13
13
  /** 构造函数 */
14
14
  constructor();
15
15
  }
@@ -43,8 +43,8 @@ export declare namespace NetworkUtility {
43
43
  private _heartbeatResponseCounter;
44
44
  /** 心跳超时次数 */
45
45
  private _heartbeatTimeoutCount;
46
- /** 心跳开关 */
47
- private _heartbeatSwitch;
46
+ /** 心跳定时器 */
47
+ private _heartbeatTimer;
48
48
  /** 打开回调事件 */
49
49
  Evt_OnOpen: (_ws: WebSocketNetWork, _event?: Event) => void;
50
50
  /** 关闭回调事件 */
@@ -63,8 +63,6 @@ export declare namespace NetworkUtility {
63
63
  OnDisConnect(): void;
64
64
  /** 启动心跳 */
65
65
  private OnStartHeartbeat;
66
- /** 心跳逻辑 */
67
- private OnHeartbeat;
68
66
  /** 客户端打开连接 */
69
67
  private OnOpen;
70
68
  /** 客户端断开连接 */
@@ -166,7 +166,7 @@ export declare namespace ObjectUtility {
166
166
  /** 注册事件 */
167
167
  Register(_pipeline: ((_params: T) => Promise<T>) | PipeLine<T>): boolean;
168
168
  /** 注销事件 */
169
- Degister(_pipeline: ((_params: T) => Promise<T>) | PipeLine<T>): boolean;
169
+ Deregister(_pipeline: ((_params: T) => Promise<T>) | PipeLine<T>): boolean;
170
170
  /** 启动事件 */
171
171
  Start(_params: T): Promise<T>;
172
172
  /** 停止事件 */
@@ -177,7 +177,7 @@ export declare namespace ObjectUtility {
177
177
  /** 注册 */
178
178
  Register(_key: string, _callback: InterfaceUtility.IEvent, _target: any, _times: number): boolean;
179
179
  /** 注销 */
180
- Degister(_key: string, _callback: InterfaceUtility.IEvent, _target: any): boolean;
180
+ Deregister(_key: string, _callback: InterfaceUtility.IEvent, _target: any): boolean;
181
181
  /** 通知 */
182
182
  Invoke(_key: string, ...params: Array<any>): Promise<void>;
183
183
  /** 清除 */
@@ -203,7 +203,7 @@ export declare namespace ObjectUtility {
203
203
  * @param _event 回调函数
204
204
  * @param _target 绑定对象
205
205
  */
206
- Degister(_key: string, _event: InterfaceUtility.IEvent): boolean;
206
+ Deregister(_key: string, _event: InterfaceUtility.IEvent): boolean;
207
207
  /**
208
208
  * 派发监听事件
209
209
  * @param _key 事件名称
@@ -233,7 +233,7 @@ export declare namespace ObjectUtility {
233
233
  * @param _target 绑定对象
234
234
  * @param _event 回调函数
235
235
  */
236
- Degister(_key: string, _event: InterfaceUtility.IEvent, _target: any): boolean;
236
+ Deregister(_key: string, _event: InterfaceUtility.IEvent, _target: any): boolean;
237
237
  /**
238
238
  * 派发监听事件
239
239
  * @param _key 事件名称