@suey/rxp-meta 0.0.3 → 0.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.
- package/dist/commonjs/index.js +0 -3
- package/dist/commonjs/src/base/InnerZustandStoreManager.js +15 -12
- package/dist/commonjs/src/base/index.js +17 -0
- package/dist/commonjs/src/base/rxpInnerStore.js +66 -0
- package/dist/commonjs/src/constants/index.js +25 -0
- package/dist/commonjs/src/extension/At.js +113 -0
- package/dist/commonjs/src/extension/ExtensionManager.js +66 -101
- package/dist/commonjs/src/extension/ExtensionManager.old.js +156 -0
- package/dist/commonjs/src/metadata/MetadataManager.js +102 -100
- package/dist/commonjs/src/metadata/MetadataManager.old.js +171 -0
- package/dist/commonjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/src/base/InnerZustandStoreManager.js +15 -12
- package/dist/esm/src/base/index.js +1 -0
- package/dist/esm/src/base/rxpInnerStore.js +62 -0
- package/dist/esm/src/constants/index.js +22 -0
- package/dist/esm/src/extension/At.js +109 -0
- package/dist/esm/src/extension/ExtensionManager.js +64 -100
- package/dist/esm/src/extension/ExtensionManager.old.js +152 -0
- package/dist/esm/src/metadata/MetadataManager.js +103 -101
- package/dist/esm/src/metadata/MetadataManager.old.js +167 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/lib/index.d.ts +0 -1
- package/dist/lib/src/base/InnerZustandStoreManager.d.ts +11 -3
- package/dist/lib/src/base/index.d.ts +1 -0
- package/dist/lib/src/base/rxpInnerStore.d.ts +40 -0
- package/dist/lib/src/constants/index.d.ts +19 -0
- package/dist/lib/src/extension/At.d.ts +53 -0
- package/dist/lib/src/extension/ExtensionManager.d.ts +52 -9
- package/dist/lib/src/extension/ExtensionManager.old.d.ts +52 -0
- package/dist/lib/src/extension/declare.d.ts +9 -8
- package/dist/lib/src/extension/index.d.ts +2 -1
- package/dist/lib/src/metadata/MetadataManager.d.ts +64 -15
- package/dist/lib/src/metadata/MetadataManager.old.d.ts +125 -0
- package/dist/lib/src/metadata/declare.d.ts +2 -12
- package/dist/lib/src/metadata/index.d.ts +0 -1
- package/dist/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -14
- package/dist/commonjs/src/rApp.js +0 -102
- package/dist/esm/src/rApp.js +0 -99
- package/dist/lib/src/rApp.d.ts +0 -99
|
@@ -1,5 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
type ExtensionName = string;
|
|
2
|
+
type ExtensionOnActivated<Context = unknown> = (context?: Context) => ((() => void) | Promise<(() => void)> | void | Promise<void>);
|
|
3
|
+
type ExtensionOnDeactivated<Context = unknown> = (context?: Context) => (void | Promise<void>);
|
|
4
|
+
interface ExtensionOptions<Context = unknown> {
|
|
5
|
+
/**
|
|
6
|
+
* 插件的唯一标识 name
|
|
7
|
+
*/
|
|
8
|
+
readonly name: ExtensionName;
|
|
9
|
+
/**
|
|
10
|
+
* 插件版本
|
|
11
|
+
*/
|
|
12
|
+
readonly version: string | number;
|
|
13
|
+
/**
|
|
14
|
+
* 插件数据, 由项目自主决定插件附带携带的数据
|
|
15
|
+
*/
|
|
16
|
+
meta?: any;
|
|
17
|
+
/**
|
|
18
|
+
* 插件被激活, 被使用的状态
|
|
19
|
+
*/
|
|
20
|
+
readonly onActivated: ExtensionOnActivated<Context>;
|
|
21
|
+
readonly onDeactivated?: ExtensionOnDeactivated<Context>;
|
|
22
|
+
}
|
|
23
|
+
export declare class Extension {
|
|
24
|
+
/**
|
|
25
|
+
* 插件对象标识符
|
|
26
|
+
*/
|
|
27
|
+
private readonly __TAG__;
|
|
28
|
+
private isActivated;
|
|
29
|
+
readonly name: ExtensionName;
|
|
30
|
+
readonly version: string | number;
|
|
31
|
+
readonly meta?: any;
|
|
32
|
+
readonly onActivated: ExtensionOnActivated;
|
|
33
|
+
readonly onDeactivated?: ExtensionOnDeactivated;
|
|
34
|
+
constructor(options: ExtensionOptions);
|
|
35
|
+
getIsActivated(): boolean;
|
|
36
|
+
activated(): Promise<void>;
|
|
37
|
+
deactivated(): Promise<void>;
|
|
38
|
+
static isExtension(extension: any): extension is Extension;
|
|
39
|
+
}
|
|
3
40
|
/**
|
|
4
41
|
* 定义一个插件, 这里所抽象得插件只是一个携带数据得对象、以及具有特殊时机执行得函数
|
|
5
42
|
*
|
|
@@ -7,12 +44,13 @@ import { InnerZustandStoreManager } from '../base/InnerZustandStoreManager';
|
|
|
7
44
|
* 2. 插件可以调动 metadataManager 从而实现插件化开发
|
|
8
45
|
* 3. 调动 emitter 实现事件触发
|
|
9
46
|
*/
|
|
10
|
-
export declare class ExtensionManager<Ext extends Extension>
|
|
47
|
+
export declare class ExtensionManager<Ext extends Extension> {
|
|
48
|
+
private readonly rxpInnerStore;
|
|
11
49
|
private readonly extNameMapStore;
|
|
12
50
|
/**
|
|
13
51
|
* Define extension, 定义插件, 那么插件会被存储到 Map 中.
|
|
14
52
|
*/
|
|
15
|
-
defineExtension
|
|
53
|
+
defineExtension(define: ExtensionOptions): Extension;
|
|
16
54
|
/**
|
|
17
55
|
* 判断一个对象是否是一个 扩展对象
|
|
18
56
|
*/
|
|
@@ -24,7 +62,7 @@ export declare class ExtensionManager<Ext extends Extension> extends InnerZustan
|
|
|
24
62
|
/**
|
|
25
63
|
* 获取一个扩展
|
|
26
64
|
*/
|
|
27
|
-
getExtension(extensionName: ExtensionName): Extension
|
|
65
|
+
getExtension(extensionName: ExtensionName): Extension | null;
|
|
28
66
|
/**
|
|
29
67
|
* 注册一个扩展
|
|
30
68
|
*/
|
|
@@ -32,17 +70,22 @@ export declare class ExtensionManager<Ext extends Extension> extends InnerZustan
|
|
|
32
70
|
/**
|
|
33
71
|
* Activated extension
|
|
34
72
|
*/
|
|
35
|
-
activatedExtension
|
|
73
|
+
activatedExtension(name: ExtensionName): Promise<void>;
|
|
36
74
|
/**
|
|
37
75
|
* 去活某个插件
|
|
38
76
|
*/
|
|
39
|
-
deactivatedExtension
|
|
40
|
-
/**
|
|
77
|
+
deactivatedExtension(name: ExtensionName): Promise<void>;
|
|
78
|
+
/**w
|
|
41
79
|
* 删除扩展
|
|
42
80
|
*/
|
|
43
|
-
delExtension
|
|
81
|
+
delExtension(name: ExtensionName): Promise<void>;
|
|
44
82
|
/**
|
|
45
83
|
* 获取扩展列表
|
|
46
84
|
*/
|
|
47
85
|
useExtensionsList(): readonly [Extension[]];
|
|
86
|
+
/**
|
|
87
|
+
* 获得所有的插件
|
|
88
|
+
*/
|
|
89
|
+
getExtensions(): readonly Extension[];
|
|
48
90
|
}
|
|
91
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Extension, ExtensionName, ExtractExtensionContext } from './declare';
|
|
2
|
+
import { InnerZustandStoreManager } from '../base/InnerZustandStoreManager';
|
|
3
|
+
/**
|
|
4
|
+
* 定义一个插件, 这里所抽象得插件只是一个携带数据得对象、以及具有特殊时机执行得函数
|
|
5
|
+
*
|
|
6
|
+
* 1. 插件件可以有自己的生命周期函数, 例如 onActivated, onDeactivated
|
|
7
|
+
* 2. 插件可以调动 metadataManager 从而实现插件化开发
|
|
8
|
+
* 3. 调动 emitter 实现事件触发
|
|
9
|
+
*/
|
|
10
|
+
export declare class ExtensionManager<Ext extends Extension> extends InnerZustandStoreManager {
|
|
11
|
+
private readonly extNameMapStore;
|
|
12
|
+
/**
|
|
13
|
+
* Define extension, 定义插件, 那么插件会被存储到 Map 中.
|
|
14
|
+
*/
|
|
15
|
+
defineExtension<DExt extends Ext>(define: DExt): DExt;
|
|
16
|
+
/**
|
|
17
|
+
* 判断一个对象是否是一个 扩展对象
|
|
18
|
+
*/
|
|
19
|
+
isExtension<DExt extends Ext>(extension: DExt | any): extension is DExt;
|
|
20
|
+
/**
|
|
21
|
+
* 判断是否含有当前扩展:即是否已经注册
|
|
22
|
+
*/
|
|
23
|
+
hasExtension(extensionName: ExtensionName): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* 获取一个扩展
|
|
26
|
+
*/
|
|
27
|
+
getExtension(extensionName: ExtensionName): Extension<unknown> | null;
|
|
28
|
+
/**
|
|
29
|
+
* 注册一个扩展
|
|
30
|
+
*/
|
|
31
|
+
registerExtension<DExt extends Ext>(extension: DExt): void;
|
|
32
|
+
/**
|
|
33
|
+
* Activated extension
|
|
34
|
+
*/
|
|
35
|
+
activatedExtension<Context extends ExtractExtensionContext<Ext>>(name: ExtensionName, context?: Context): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* 去活某个插件
|
|
38
|
+
*/
|
|
39
|
+
deactivatedExtension<Context extends ExtractExtensionContext<Ext>>(name: ExtensionName, context?: Context): Promise<void>;
|
|
40
|
+
/**w
|
|
41
|
+
* 删除扩展
|
|
42
|
+
*/
|
|
43
|
+
delExtension<Context extends ExtractExtensionContext<Ext>>(name: ExtensionName, context?: Context): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* 获取扩展列表
|
|
46
|
+
*/
|
|
47
|
+
useExtensionsList(): readonly [Extension[]];
|
|
48
|
+
/**
|
|
49
|
+
* 获得所有的插件
|
|
50
|
+
*/
|
|
51
|
+
getExtensions(): readonly Extension[];
|
|
52
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export type ExtensionName = string
|
|
2
|
-
export
|
|
1
|
+
export type ExtensionName = string;
|
|
2
|
+
export type ExtensionOnActivated<Context = unknown> = (context?: Context) => ((() => void) | Promise<(() => void)> | void | Promise<void>);
|
|
3
|
+
export type ExtensionOnDeactivated<Context = unknown> = (context?: Context) => (void | Promise<void>);
|
|
4
|
+
export interface Extension<Context = unknown> {
|
|
3
5
|
/**
|
|
4
6
|
* 插件的唯一标识 name
|
|
5
7
|
*/
|
|
@@ -11,15 +13,12 @@ export interface Extension<Context = any> {
|
|
|
11
13
|
/**
|
|
12
14
|
* 插件数据, 由项目自主决定插件附带携带的数据
|
|
13
15
|
*/
|
|
14
|
-
|
|
16
|
+
meta?: any;
|
|
15
17
|
/**
|
|
16
18
|
* 插件被激活, 被使用的状态
|
|
17
19
|
*/
|
|
18
|
-
readonly onActivated?:
|
|
19
|
-
|
|
20
|
-
* 插件被去活, 被禁用的状态
|
|
21
|
-
*/
|
|
22
|
-
readonly onDeactivated?: (this: this, context: Context) => (void | Promise<void>);
|
|
20
|
+
readonly onActivated?: ExtensionOnActivated<Context>;
|
|
21
|
+
readonly onDeactivated?: ExtensionOnDeactivated<Context>;
|
|
23
22
|
}
|
|
24
23
|
export interface ExtensionWithLifecycle {
|
|
25
24
|
readonly extension: Extension;
|
|
@@ -27,5 +26,7 @@ export interface ExtensionWithLifecycle {
|
|
|
27
26
|
* 插件是否被激活
|
|
28
27
|
*/
|
|
29
28
|
isActivated: boolean;
|
|
29
|
+
onActivated?: () => void;
|
|
30
|
+
onDeactivated?: () => void;
|
|
30
31
|
}
|
|
31
32
|
export type ExtractExtensionContext<Ext extends Extension> = Parameters<Exclude<Ext['onActivated'], undefined>>[0];
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export type {
|
|
1
|
+
export type { ExtensionName, ExtensionWithLifecycle, ExtractExtensionContext } from './declare';
|
|
2
2
|
export { ExtensionManager } from './ExtensionManager';
|
|
3
|
+
export type { Extension } from './ExtensionManager';
|
|
@@ -1,5 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
type IsAny<T, SuccessReturnType, FailReturnType> = (T extends never ? 'yes' : 'no') extends 'no' ? FailReturnType : SuccessReturnType;
|
|
2
|
+
/**
|
|
3
|
+
* 从数组中提取出元素的类型
|
|
4
|
+
* @example
|
|
5
|
+
* type A = number[];
|
|
6
|
+
* type B = ExtractElInArray<A>; // number
|
|
7
|
+
*/
|
|
8
|
+
type ExtractElInArray<T> = IsAny<T, never, T extends (infer U)[] ? U : never>;
|
|
9
|
+
/**
|
|
10
|
+
* 提取列表的 entries, 在 interface {} 中, 只有值为数组类型 U[], 时会被保留, 否则不在此类型中
|
|
11
|
+
* @example
|
|
12
|
+
* type A = {
|
|
13
|
+
* name: string;
|
|
14
|
+
* age: number;
|
|
15
|
+
* friends: any[];
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* type B = ExtractVectorEntries<A>; // { friends: any[]; }
|
|
19
|
+
*/
|
|
20
|
+
type ExtractVectorEntries<Entries> = {
|
|
21
|
+
[Key in keyof Entries as (IsAny<Entries[Key], never, Entries[Key] extends unknown[] ? Key : never>)]: Entries[Key];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* 提取列表的 entries, 在 interface {} 中, 只有值不为数组类型 U[], 时会被保留, 否则不在此类型中
|
|
25
|
+
* @description 与上一个 `ExtractVectorEntries` 相反
|
|
26
|
+
* @example
|
|
27
|
+
* type A = {
|
|
28
|
+
* name: string;
|
|
29
|
+
* age: number;
|
|
30
|
+
* friends: any[];
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* type B = ExtractSingleEntries<A>; // { name: string;age: number; }
|
|
34
|
+
*/
|
|
35
|
+
type ExtractSingleEntries<Entries> = {
|
|
36
|
+
[Key in keyof Entries as Entries[Key] extends unknown[] ? never : Key]: Entries[Key];
|
|
37
|
+
};
|
|
3
38
|
/**
|
|
4
39
|
* 元数据, 在页面中组件的变化可能相距甚远
|
|
5
40
|
* 进入到某一个页面, 可能其他大组件下的某处地方可能发生元素更改, 那么使用本 store 进行连携
|
|
@@ -9,17 +44,10 @@ import { InnerZustandStoreManager } from '../base/InnerZustandStoreManager';
|
|
|
9
44
|
* 2. 在特殊时机, 注册槽点数据, 从而响应式自动更新到子孙或者兄弟级甚远的组件进行渲染
|
|
10
45
|
*
|
|
11
46
|
*/
|
|
12
|
-
export declare class MetadataManager<MetadataEntries extends Record<string, any>>
|
|
47
|
+
export declare class MetadataManager<MetadataEntries extends Record<string, any>> {
|
|
48
|
+
private readonly rxpInnerStore;
|
|
13
49
|
private readonly metadataMap;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* 触发元数据更改监听函数
|
|
17
|
-
*/
|
|
18
|
-
protected triggerMetadataChangeListeners(payload: MetadataStoreListenerPayload): void;
|
|
19
|
-
/**
|
|
20
|
-
* 订阅元数据更改
|
|
21
|
-
*/
|
|
22
|
-
subscribeMetadataStoreChanged(listener: MetadataStoreChangeListener): () => void;
|
|
50
|
+
constructor();
|
|
23
51
|
/**
|
|
24
52
|
* 定义 store 元数据, 元数据可以是任何东西
|
|
25
53
|
* @example
|
|
@@ -28,13 +56,21 @@ export declare class MetadataManager<MetadataEntries extends Record<string, any>
|
|
|
28
56
|
* metadata.defineMetadata('example-key', {});
|
|
29
57
|
* metadata.defineMetadata('example-key', () => { return (<div />) });
|
|
30
58
|
*/
|
|
31
|
-
defineMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): void;
|
|
59
|
+
defineMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): () => void;
|
|
32
60
|
/**
|
|
33
61
|
* 获取定义的元数据
|
|
34
62
|
* @example
|
|
35
63
|
* metadata.getMetadata('example-key');
|
|
36
64
|
*/
|
|
37
65
|
getMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey): MetadataEntries[MetadataKey] | null;
|
|
66
|
+
/**
|
|
67
|
+
* 获取元数据列表中最新注册的元数据
|
|
68
|
+
*/
|
|
69
|
+
getMetadataLatestInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey): ExtractElInArray<MetadataEntries[MetadataKey]> | null;
|
|
70
|
+
/**
|
|
71
|
+
* 获取元数据列表中最旧注册的元数据
|
|
72
|
+
*/
|
|
73
|
+
getMetadataOldestInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey): ExtractElInArray<MetadataEntries[MetadataKey]> | null;
|
|
38
74
|
/**
|
|
39
75
|
* 删除定义的元数据
|
|
40
76
|
* @example
|
|
@@ -45,7 +81,7 @@ export declare class MetadataManager<MetadataEntries extends Record<string, any>
|
|
|
45
81
|
* 语义化方法, 作用与 defineMetadata 一致. 但是在此基础上排除了数据值类型
|
|
46
82
|
* @description 意为: 定义覆盖式的元数据
|
|
47
83
|
*/
|
|
48
|
-
defineMetadataInSingle<MetadataKey extends keyof ExtractSingleEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): void;
|
|
84
|
+
defineMetadataInSingle<MetadataKey extends keyof ExtractSingleEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): () => void;
|
|
49
85
|
/**
|
|
50
86
|
* 定义多个元数据组合的容器型元数据列表, 顾名思义, 也就是某个元数据的定义是数组时使用, 能够自动从数组中添加单个该元数据, 而不是全部覆盖
|
|
51
87
|
* @example
|
|
@@ -54,7 +90,7 @@ export declare class MetadataManager<MetadataEntries extends Record<string, any>
|
|
|
54
90
|
* metadata.defineMetadataInVector('example-key', {});
|
|
55
91
|
* metadata.defineMetadataInVector('example-key', () => { return (<div />) });
|
|
56
92
|
*/
|
|
57
|
-
defineMetadataInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: ExtractElInArray<MetadataEntries[MetadataKey]>): void;
|
|
93
|
+
defineMetadataInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: ExtractElInArray<MetadataEntries[MetadataKey]>): (() => void);
|
|
58
94
|
/**
|
|
59
95
|
* 在一组元数据集合列表中删除具体的某一个, 通常与 `defineMetadataInVector` 配套使用
|
|
60
96
|
* @example
|
|
@@ -111,4 +147,17 @@ export declare class MetadataManager<MetadataEntries extends Record<string, any>
|
|
|
111
147
|
* 查看是否定义了元数据
|
|
112
148
|
*/
|
|
113
149
|
hasMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* 在组件中注册元数据, 跟随当前组件生命周期, 组件卸载时自动删除
|
|
152
|
+
*/
|
|
153
|
+
useFollowMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): void;
|
|
154
|
+
/**
|
|
155
|
+
* 在组件中注册元数据, 跟随当前组件生命周期, 组件卸载时自动删除
|
|
156
|
+
*/
|
|
157
|
+
useFollowMetadataInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: ExtractElInArray<MetadataEntries[MetadataKey]>): void;
|
|
158
|
+
/**
|
|
159
|
+
* 在组件中注册元数据, 跟随当前组件生命周期, 组件卸载时自动删除
|
|
160
|
+
*/
|
|
161
|
+
useFollowMetadataInSingle<MetadataKey extends keyof ExtractSingleEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): void;
|
|
114
162
|
}
|
|
163
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { ExtractSingleEntries, ExtractVectorEntries, ExtractElInArray } from './declare';
|
|
2
|
+
import { InnerZustandStoreManager } from '../base/InnerZustandStoreManager';
|
|
3
|
+
/**
|
|
4
|
+
* 元数据, 在页面中组件的变化可能相距甚远
|
|
5
|
+
* 进入到某一个页面, 可能其他大组件下的某处地方可能发生元素更改, 那么使用本 store 进行连携
|
|
6
|
+
*
|
|
7
|
+
* 1. 在可能变化的地方获取槽点数据, 可能是字符也有可能是其他的
|
|
8
|
+
*
|
|
9
|
+
* 2. 在特殊时机, 注册槽点数据, 从而响应式自动更新到子孙或者兄弟级甚远的组件进行渲染
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
export declare class MetadataManager<MetadataEntries extends Record<string, any>> extends InnerZustandStoreManager {
|
|
13
|
+
private readonly metadataMap;
|
|
14
|
+
/**
|
|
15
|
+
* 定义 store 元数据, 元数据可以是任何东西
|
|
16
|
+
* @example
|
|
17
|
+
* metadata.defineMetadata('example-key', 1);
|
|
18
|
+
* metadata.defineMetadata('example-key', 'a');
|
|
19
|
+
* metadata.defineMetadata('example-key', {});
|
|
20
|
+
* metadata.defineMetadata('example-key', () => { return (<div />) });
|
|
21
|
+
*/
|
|
22
|
+
defineMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): () => void;
|
|
23
|
+
/**
|
|
24
|
+
* 获取定义的元数据
|
|
25
|
+
* @example
|
|
26
|
+
* metadata.getMetadata('example-key');
|
|
27
|
+
*/
|
|
28
|
+
getMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey): MetadataEntries[MetadataKey] | null;
|
|
29
|
+
/**
|
|
30
|
+
* 获取元数据列表中最新注册的元数据
|
|
31
|
+
*/
|
|
32
|
+
getMetadataLatestInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey): ExtractElInArray<MetadataEntries[MetadataKey]> | null;
|
|
33
|
+
/**
|
|
34
|
+
* 获取元数据列表中最旧注册的元数据
|
|
35
|
+
*/
|
|
36
|
+
getMetadataOldestInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey): ExtractElInArray<MetadataEntries[MetadataKey]> | null;
|
|
37
|
+
/**
|
|
38
|
+
* 删除定义的元数据
|
|
39
|
+
* @example
|
|
40
|
+
* metadata.delMetadata('example-key');
|
|
41
|
+
*/
|
|
42
|
+
delMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey): void;
|
|
43
|
+
/**
|
|
44
|
+
* 语义化方法, 作用与 defineMetadata 一致. 但是在此基础上排除了数据值类型
|
|
45
|
+
* @description 意为: 定义覆盖式的元数据
|
|
46
|
+
*/
|
|
47
|
+
defineMetadataInSingle<MetadataKey extends keyof ExtractSingleEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): () => void;
|
|
48
|
+
/**
|
|
49
|
+
* 定义多个元数据组合的容器型元数据列表, 顾名思义, 也就是某个元数据的定义是数组时使用, 能够自动从数组中添加单个该元数据, 而不是全部覆盖
|
|
50
|
+
* @example
|
|
51
|
+
* metadata.defineMetadataInVector('example-key', 1);
|
|
52
|
+
* metadata.defineMetadataInVector('example-key', 'a');
|
|
53
|
+
* metadata.defineMetadataInVector('example-key', {});
|
|
54
|
+
* metadata.defineMetadataInVector('example-key', () => { return (<div />) });
|
|
55
|
+
*/
|
|
56
|
+
defineMetadataInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: ExtractElInArray<MetadataEntries[MetadataKey]>): (() => void);
|
|
57
|
+
/**
|
|
58
|
+
* 在一组元数据集合列表中删除具体的某一个, 通常与 `defineMetadataInVector` 配套使用
|
|
59
|
+
* @example
|
|
60
|
+
* const data = {};
|
|
61
|
+
* metadata.defineMetadataInVector('example-key', data);
|
|
62
|
+
*
|
|
63
|
+
* metadata.delMetadataInVector('example-key', data);
|
|
64
|
+
*/
|
|
65
|
+
delMetadataInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: ExtractElInArray<MetadataEntries[MetadataKey]>): void;
|
|
66
|
+
/**
|
|
67
|
+
* 组件 hook, 观察元数据变化
|
|
68
|
+
* @description 返回数据是注册的元数据, 如果是非 react 组件, 而是普通数据, 所以外部要监听使用变化时应当加入 effect 副作用列表
|
|
69
|
+
* @example
|
|
70
|
+
* const Fc = () => {
|
|
71
|
+
* const data = metadata.useMetadata('example-key');
|
|
72
|
+
* useEffect(() => {
|
|
73
|
+
* // use data
|
|
74
|
+
* // some code...
|
|
75
|
+
* return () => {
|
|
76
|
+
* // clear data use.
|
|
77
|
+
* // some code...
|
|
78
|
+
* }
|
|
79
|
+
* }, [data]);
|
|
80
|
+
* return (<div />)
|
|
81
|
+
* }
|
|
82
|
+
*
|
|
83
|
+
* @description 使用的元数据也有可能是 react 组件
|
|
84
|
+
* @example
|
|
85
|
+
* const Fc = () => {
|
|
86
|
+
* const Component = metadata.useMetadata('example-key');
|
|
87
|
+
*
|
|
88
|
+
* return (
|
|
89
|
+
* <div>
|
|
90
|
+
* {Component && (<Component />)}
|
|
91
|
+
* </div>
|
|
92
|
+
* )
|
|
93
|
+
* }
|
|
94
|
+
*
|
|
95
|
+
*/
|
|
96
|
+
useMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey): MetadataEntries[MetadataKey] | null;
|
|
97
|
+
/**
|
|
98
|
+
* 使用最先注册的元数据
|
|
99
|
+
*/
|
|
100
|
+
useOldestMetadataInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey): ExtractElInArray<MetadataEntries[MetadataKey]> | null;
|
|
101
|
+
/**
|
|
102
|
+
* 使用最后一次注册的元数据
|
|
103
|
+
*/
|
|
104
|
+
useLatestMetadataInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey): ExtractElInArray<MetadataEntries[MetadataKey]> | null;
|
|
105
|
+
/**
|
|
106
|
+
* 获取到所有定义的元数据
|
|
107
|
+
*/
|
|
108
|
+
useAllMetadata(): Map<string | number | symbol, any>;
|
|
109
|
+
/**
|
|
110
|
+
* 查看是否定义了元数据
|
|
111
|
+
*/
|
|
112
|
+
hasMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey): boolean;
|
|
113
|
+
/**
|
|
114
|
+
* 在组件中注册元数据, 跟随当前组件生命周期, 组件卸载时自动删除
|
|
115
|
+
*/
|
|
116
|
+
useFollowMetadata<MetadataKey extends keyof MetadataEntries>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): void;
|
|
117
|
+
/**
|
|
118
|
+
* 在组件中注册元数据, 跟随当前组件生命周期, 组件卸载时自动删除
|
|
119
|
+
*/
|
|
120
|
+
useFollowMetadataInVector<MetadataKey extends keyof ExtractVectorEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: ExtractElInArray<MetadataEntries[MetadataKey]>): void;
|
|
121
|
+
/**
|
|
122
|
+
* 在组件中注册元数据, 跟随当前组件生命周期, 组件卸载时自动删除
|
|
123
|
+
*/
|
|
124
|
+
useFollowMetadataInSingle<MetadataKey extends keyof ExtractSingleEntries<MetadataEntries>>(metadataKey: MetadataKey, metadata: MetadataEntries[MetadataKey]): void;
|
|
125
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
type
|
|
2
|
-
type IsAny<T, SuccessReturnType, FailReturnType> = IsNever<T, 'yes', 'no'> extends 'no' ? FailReturnType : SuccessReturnType;
|
|
1
|
+
type IsAny<T, SuccessReturnType, FailReturnType> = (T extends never ? 'yes' : 'no') extends 'no' ? FailReturnType : SuccessReturnType;
|
|
3
2
|
/**
|
|
4
3
|
* 从数组中提取出元素的类型
|
|
5
4
|
* @example
|
|
@@ -12,7 +11,7 @@ export type ExtractElInArray<T> = IsAny<T, never, T extends (infer U)[] ? U : ne
|
|
|
12
11
|
* @example
|
|
13
12
|
* type A = {
|
|
14
13
|
* name: string;
|
|
15
|
-
* age: number;
|
|
14
|
+
* age: number;
|
|
16
15
|
* friends: any[];
|
|
17
16
|
* }
|
|
18
17
|
*
|
|
@@ -36,13 +35,4 @@ export type ExtractVectorEntries<Entries> = {
|
|
|
36
35
|
export type ExtractSingleEntries<Entries> = {
|
|
37
36
|
[Key in keyof Entries as Entries[Key] extends unknown[] ? never : Key]: Entries[Key];
|
|
38
37
|
};
|
|
39
|
-
export type MetadataAction = 'Define' | 'Remove';
|
|
40
|
-
export type MetadataType = 'Vector' | 'Single' | 'All';
|
|
41
|
-
export interface MetadataStoreListenerPayload {
|
|
42
|
-
action: MetadataAction;
|
|
43
|
-
type: MetadataType;
|
|
44
|
-
metadataKey: number | string | symbol;
|
|
45
|
-
metadata: unknown;
|
|
46
|
-
}
|
|
47
|
-
export type MetadataStoreChangeListener = (payload: MetadataStoreListenerPayload) => void;
|
|
48
38
|
export {};
|