@event-chat/core 0.2.5 → 0.2.7
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/eventBus.d.ts +1 -1
- package/dist/eventBus.d.ts.map +1 -1
- package/dist/eventBus.js +7 -3
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +36 -17
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/utils.d.ts +24 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +47 -17
- package/dist/validate.d.ts +5 -3
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +24 -11
- package/package.json +3 -1
package/dist/eventBus.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ declare class EventBus {
|
|
|
3
3
|
private events;
|
|
4
4
|
constructor();
|
|
5
5
|
clear(): void;
|
|
6
|
-
emit(
|
|
6
|
+
emit(args: EventDetailType): void;
|
|
7
7
|
has(eventName: string, callback?: (args: EventDetailType) => void): boolean | undefined;
|
|
8
8
|
off(eventName: string, callback?: (args: EventDetailType) => void): void;
|
|
9
9
|
on(eventName: string, callback: (data: EventDetailType) => void): void;
|
package/dist/eventBus.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../src/eventBus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../src/eventBus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,cAAM,QAAQ;IACZ,OAAO,CAAC,MAAM,CAAkE;;IAKhF,KAAK,IAAI,IAAI;IAIb,IAAI,CAAC,IAAI,EAAE,eAAe;IAU1B,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI;IAOjE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI;IAajE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI;IAO/D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI;CAOlE;;AAED,wBAA8B"}
|
package/dist/eventBus.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Path } from "@formily/path";
|
|
1
2
|
class EventBus {
|
|
2
3
|
events;
|
|
3
4
|
constructor(){
|
|
@@ -6,9 +7,12 @@ class EventBus {
|
|
|
6
7
|
clear() {
|
|
7
8
|
this.events = {};
|
|
8
9
|
}
|
|
9
|
-
emit(
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
emit(args) {
|
|
11
|
+
const { rule } = args;
|
|
12
|
+
Object.entries(this.events).forEach(([eventName, list])=>{
|
|
13
|
+
if (Path.parse(rule).match(eventName)) list?.forEach((callback)=>{
|
|
14
|
+
callback(args);
|
|
15
|
+
});
|
|
12
16
|
});
|
|
13
17
|
}
|
|
14
18
|
has(eventName, callback) {
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ZodType } from 'zod';
|
|
2
|
-
import { EventChatOptions, EventDetailType, NamepathType } from './utils';
|
|
2
|
+
import { EventChatOptions, EventDetailType, ExcludeKey, NamepathType } from './utils';
|
|
3
3
|
export declare const useMemoFn: <T>(fn: T) => import("react").MutableRefObject<T>;
|
|
4
4
|
export declare function useEventChat<Name extends NamepathType, Schema extends ZodType | undefined = undefined, Group extends string | undefined = undefined, Type extends string | undefined = undefined, Token extends boolean | undefined = undefined>(name: Name, ops?: EventChatOptions<Name, Schema, Group, Type, Token>): Readonly<{
|
|
5
5
|
token: string;
|
|
6
|
-
emit: <Detail, CustomName extends NamepathType>(detail: Omit<EventDetailType<Detail, CustomName>,
|
|
6
|
+
emit: <Detail, CustomName extends NamepathType>(detail: Omit<EventDetailType<Detail, CustomName>, ExcludeKey>) => void;
|
|
7
7
|
}>;
|
|
8
8
|
//# sourceMappingURL=hooks.d.ts.map
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,eAAe,EAEf,YAAY,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,eAAe,EAEf,UAAU,EACV,YAAY,EASb,MAAM,SAAS,CAAC;AAGjB,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,IAAI,CAAC,wCAOjC,CAAC;AAEF,wBAAgB,YAAY,CAC1B,IAAI,SAAS,YAAY,EACzB,MAAM,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAC9C,KAAK,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EAC5C,IAAI,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EAC3C,KAAK,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAC7C,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;;WA8CjE,MAAM,EAAE,UAAU,SAAS,YAAY,UAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC;GA2ClE"}
|
package/dist/hooks.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useEffect, useId, useMemo, useRef } from "react";
|
|
2
2
|
import eventBus from "./eventBus.js";
|
|
3
|
-
import { EventName, createEvent, createToken, getConditionKey, getEventName, isResultType,
|
|
3
|
+
import { EventName, combinePath, createEvent, createToken, defaultName, getConditionKey, getEventName, isResultType, mountEvent } from "./utils.js";
|
|
4
4
|
import { checkLiteral, validate } from "./validate.js";
|
|
5
5
|
const useMemoFn = (fn)=>{
|
|
6
6
|
const methodRef = useRef(fn);
|
|
@@ -34,13 +34,12 @@ function useEventChat(name, ops) {
|
|
|
34
34
|
options
|
|
35
35
|
]);
|
|
36
36
|
const callbackHandle = useCallback((data)=>{
|
|
37
|
-
const { name: subName, ...args } = data;
|
|
38
|
-
const opitem = options.current;
|
|
39
|
-
if (!opitem || !isSafetyType(subName, nameRc.current)) return;
|
|
40
37
|
const upRecord = {
|
|
41
|
-
...
|
|
42
|
-
name:
|
|
38
|
+
...data,
|
|
39
|
+
name: nameRc.current
|
|
43
40
|
};
|
|
41
|
+
const opitem = options.current;
|
|
42
|
+
if (!opitem) return;
|
|
44
43
|
const throwError = (error)=>errorHandle(error, data.detail, data.time);
|
|
45
44
|
if (void 0 !== opitem.schema) validate(upRecord, {
|
|
46
45
|
...opitem,
|
|
@@ -57,20 +56,30 @@ function useEventChat(name, ops) {
|
|
|
57
56
|
errorHandle
|
|
58
57
|
]);
|
|
59
58
|
const emit = useCallback((detail)=>{
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
59
|
+
try {
|
|
60
|
+
const rule = combinePath(detail.name, nameRc.current);
|
|
61
|
+
const event = createEvent({
|
|
62
|
+
...detail,
|
|
63
|
+
group: options.current?.group,
|
|
64
|
+
origin: nameRc.current,
|
|
65
|
+
originName: detail.name,
|
|
66
|
+
time: new Date(),
|
|
67
|
+
type: options.current?.type,
|
|
68
|
+
id,
|
|
69
|
+
rule
|
|
70
|
+
});
|
|
71
|
+
document.body.dispatchEvent(event);
|
|
72
|
+
} catch {
|
|
73
|
+
options.current?.onLost?.({
|
|
74
|
+
name: detail.name,
|
|
75
|
+
origin: nameRc.current,
|
|
76
|
+
type: 'emit'
|
|
77
|
+
});
|
|
78
|
+
}
|
|
69
79
|
}, [
|
|
70
80
|
id,
|
|
71
81
|
nameRc,
|
|
72
|
-
|
|
73
|
-
ops?.type
|
|
82
|
+
options
|
|
74
83
|
]);
|
|
75
84
|
useEffect(()=>{
|
|
76
85
|
if (!document.body.dataset.globalIsListened) {
|
|
@@ -78,6 +87,16 @@ function useEventChat(name, ops) {
|
|
|
78
87
|
document.body.dataset.globalIsListened = '1';
|
|
79
88
|
}
|
|
80
89
|
}, []);
|
|
90
|
+
useEffect(()=>{
|
|
91
|
+
if (!('' === name || Array.isArray(name) && 0 === name.length) && eventName === defaultName) options.current?.onLost?.({
|
|
92
|
+
type: 'init',
|
|
93
|
+
name
|
|
94
|
+
});
|
|
95
|
+
}, [
|
|
96
|
+
eventName,
|
|
97
|
+
name,
|
|
98
|
+
options
|
|
99
|
+
]);
|
|
81
100
|
useEffect(()=>{
|
|
82
101
|
eventBus.on(eventName, callbackHandle);
|
|
83
102
|
return ()=>{
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { useEventChat } from './hooks';
|
|
2
2
|
export { createToken } from './utils';
|
|
3
3
|
export { checkDetail } from './validate';
|
|
4
|
-
export type { EventChatOptions, EventDetailType, NamepathType } from './utils';
|
|
4
|
+
export type { EventChatOptions, EventDetailType, ExcludeKey, NamepathType } from './utils';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
import { ZodType, z } from 'zod';
|
|
2
|
+
declare const escapeSpecialSymbols: (text: string | number) => string | number;
|
|
3
|
+
export declare const defaultName = "";
|
|
4
|
+
export declare const defaultLang: Readonly<{
|
|
5
|
+
customError: "Does not meet the requirements for custom filtering";
|
|
6
|
+
detailError: "validate faild";
|
|
7
|
+
groupEmpty: "Do not accept record with group.";
|
|
8
|
+
groupProvider: "Non group members.";
|
|
9
|
+
tokenEmpty: "Do not accept record with token.";
|
|
10
|
+
tokenProvider: "Not providing tokens as expected.";
|
|
11
|
+
}>;
|
|
2
12
|
export declare const EventName = "custom-event-chat-11.18";
|
|
3
13
|
export declare const createEvent: <Detail, Name extends NamepathType = string>(detail: EventDetailType<Detail, Name>) => CustomEvent<EventDetailType<Detail, Name>>;
|
|
4
14
|
export declare const createToken: (key: string) => string;
|
|
5
15
|
export declare const getConditionKey: (name: string, id: string, type?: string) => string;
|
|
6
|
-
export declare const
|
|
16
|
+
export declare const combinePath: (name: NamepathType, origin: NamepathType) => string;
|
|
17
|
+
export declare const getEventName: (name: NamepathType, filter?: typeof escapeSpecialSymbols) => string;
|
|
7
18
|
export declare const isResultType: (data: unknown) => data is ResultType;
|
|
8
|
-
export declare const isSafetyType: <T>(target: unknown, origin: T) => target is T;
|
|
9
19
|
export declare function mountEvent(event: CustomDetailEvent): void;
|
|
10
20
|
export interface EventChatOptions<Name extends NamepathType, Schema extends ZodType | undefined = undefined, Group extends string | undefined = undefined, Type extends string | undefined = undefined, Token extends boolean | undefined = undefined> {
|
|
11
21
|
async?: boolean;
|
|
12
22
|
group?: Group;
|
|
23
|
+
lang?: Record<keyof typeof defaultLang, string>;
|
|
13
24
|
schema?: Schema;
|
|
14
25
|
token?: Token;
|
|
15
26
|
type?: Type;
|
|
16
27
|
callback?: (target: DetailType<Name, Schema, Group, Type, Token>) => void;
|
|
17
28
|
debug?: (result?: ResultType) => void;
|
|
29
|
+
filter?: (detail: Omit<EventDetailType<unknown>, 'detail'>) => boolean | PromiseLike<boolean>;
|
|
30
|
+
onLost?: (info: LostType) => void;
|
|
18
31
|
}
|
|
19
|
-
export type DetailType<Name extends NamepathType, Schema extends ZodType | undefined = undefined, Group extends string | undefined = undefined, Type extends string | undefined = undefined, Token extends boolean | undefined = undefined> = Pick<EventDetailType<unknown, Name>, 'global' | 'id' | 'name' | 'time'> & {
|
|
32
|
+
export type DetailType<Name extends NamepathType, Schema extends ZodType | undefined = undefined, Group extends string | undefined = undefined, Type extends string | undefined = undefined, Token extends boolean | undefined = undefined> = Pick<EventDetailType<unknown, Name>, 'global' | 'id' | 'name' | 'originName' | 'rule' | 'time'> & {
|
|
20
33
|
detail: WasProvided<Schema> extends true ? z.output<Exclude<Schema, undefined>> : unknown;
|
|
21
34
|
group: WasProvided<Group> extends true ? Exclude<Group, undefined> : undefined;
|
|
22
35
|
origin: string;
|
|
@@ -27,6 +40,8 @@ export type EventDetailType<Detail = unknown, Name extends NamepathType = Namepa
|
|
|
27
40
|
id: string;
|
|
28
41
|
name: Name;
|
|
29
42
|
origin: NamepathType;
|
|
43
|
+
originName: NamepathType;
|
|
44
|
+
rule: string;
|
|
30
45
|
time: Date;
|
|
31
46
|
detail?: Detail;
|
|
32
47
|
global?: boolean;
|
|
@@ -34,6 +49,7 @@ export type EventDetailType<Detail = unknown, Name extends NamepathType = Namepa
|
|
|
34
49
|
type?: string;
|
|
35
50
|
token?: string;
|
|
36
51
|
};
|
|
52
|
+
export type ExcludeKey = 'group' | 'id' | 'origin' | 'originName' | 'rule' | 'time' | 'type';
|
|
37
53
|
export type NamepathType = number | string | Array<string | number> | Readonly<Array<string | number>>;
|
|
38
54
|
export type ResultType<Schema = unknown> = Omit<z.ZodSafeParseError<Schema>, 'data'> & {
|
|
39
55
|
data: unknown;
|
|
@@ -45,5 +61,10 @@ export type WasProvided<T, Default = undefined> = [
|
|
|
45
61
|
interface CustomDetailEvent extends Event {
|
|
46
62
|
detail?: EventDetailType;
|
|
47
63
|
}
|
|
64
|
+
type LostType = {
|
|
65
|
+
name: NamepathType;
|
|
66
|
+
type: 'emit' | 'init';
|
|
67
|
+
origin?: NamepathType;
|
|
68
|
+
};
|
|
48
69
|
export {};
|
|
49
70
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
CHANGED
|
@@ -1,4 +1,25 @@
|
|
|
1
|
+
import { Path } from "@formily/path";
|
|
1
2
|
import eventBus from "./eventBus.js";
|
|
3
|
+
const eventMap = {};
|
|
4
|
+
const cacheEventName = (name, path)=>{
|
|
5
|
+
try {
|
|
6
|
+
const keyname = 'object' == typeof name ? JSON.stringify(name) : name;
|
|
7
|
+
if (path) eventMap[keyname] = path;
|
|
8
|
+
return keyname in eventMap ? eventMap[keyname] : void 0;
|
|
9
|
+
} catch {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const escapeSpecialSymbols = (text)=>'number' == typeof text ? text : text.replace(/([*~[\],:.])/g, '\\$1');
|
|
14
|
+
const defaultName = '';
|
|
15
|
+
const defaultLang = Object.freeze({
|
|
16
|
+
customError: 'Does not meet the requirements for custom filtering',
|
|
17
|
+
detailError: 'validate faild',
|
|
18
|
+
groupEmpty: 'Do not accept record with group.',
|
|
19
|
+
groupProvider: 'Non group members.',
|
|
20
|
+
tokenEmpty: 'Do not accept record with token.',
|
|
21
|
+
tokenProvider: 'Not providing tokens as expected.'
|
|
22
|
+
});
|
|
2
23
|
const EventName = 'custom-event-chat-11.18';
|
|
3
24
|
const createEvent = (detail)=>new CustomEvent(EventName, {
|
|
4
25
|
bubbles: true,
|
|
@@ -11,28 +32,37 @@ const getConditionKey = (name, id, type)=>[
|
|
|
11
32
|
id,
|
|
12
33
|
type
|
|
13
34
|
].filter(Boolean).join('-');
|
|
14
|
-
const
|
|
15
|
-
const
|
|
35
|
+
const combinePath = (name, origin)=>{
|
|
36
|
+
const namepath = getEventName(name, (text)=>text);
|
|
37
|
+
const orgpath = getEventName(origin);
|
|
38
|
+
if (namepath.startsWith('.') || namepath.startsWith('[')) return Path.parse(namepath, orgpath).toString();
|
|
39
|
+
return namepath;
|
|
40
|
+
};
|
|
41
|
+
const getEventName = (name, filter)=>{
|
|
42
|
+
const cachePath = cacheEventName(name);
|
|
43
|
+
if (cachePath) return cachePath;
|
|
44
|
+
const eventName = (Array.isArray(name) ? name.map(filter ?? escapeSpecialSymbols) : void 0) ?? ('object' == typeof name ? [] : [
|
|
16
45
|
name
|
|
17
|
-
];
|
|
46
|
+
]);
|
|
47
|
+
const reduceName = eventName.reduce((current, item, index)=>{
|
|
48
|
+
if ('number' == typeof item) {
|
|
49
|
+
const target = 0 === index ? '' : current[index - 1];
|
|
50
|
+
current.splice(Math.max(index - 1, 0), 1, `${target}[${item}]`);
|
|
51
|
+
return current;
|
|
52
|
+
}
|
|
53
|
+
return current.concat(item);
|
|
54
|
+
}, []);
|
|
18
55
|
try {
|
|
19
|
-
|
|
56
|
+
const targetName = `${defaultName}${reduceName.join('.')}`;
|
|
57
|
+
Path.parse(targetName);
|
|
58
|
+
return cacheEventName(name, targetName) ?? defaultName;
|
|
20
59
|
} catch {
|
|
21
|
-
return
|
|
60
|
+
return cacheEventName(name, defaultName) ?? defaultName;
|
|
22
61
|
}
|
|
23
62
|
};
|
|
24
63
|
const isResultType = (data)=>'object' == typeof data && null !== data && 'success' in data && !data.success;
|
|
25
|
-
const isSafetyType = (target, origin)=>{
|
|
26
|
-
if (target && origin && 'object' == typeof origin) try {
|
|
27
|
-
return JSON.stringify(target) === JSON.stringify(origin);
|
|
28
|
-
} catch {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
return target === origin;
|
|
32
|
-
};
|
|
33
64
|
function mountEvent(event) {
|
|
34
|
-
const {
|
|
35
|
-
|
|
36
|
-
if (currentName && event.detail) eventBus.emit(currentName, event.detail);
|
|
65
|
+
const { rule } = event.detail ?? {};
|
|
66
|
+
if (event.detail && rule) eventBus.emit(event.detail);
|
|
37
67
|
}
|
|
38
|
-
export { EventName, createEvent, createToken, getConditionKey, getEventName, isResultType,
|
|
68
|
+
export { EventName, combinePath, createEvent, createToken, defaultLang, defaultName, getConditionKey, getEventName, isResultType, mountEvent };
|
package/dist/validate.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { ZodType, z } from 'zod';
|
|
2
2
|
import { EventChatOptions, EventDetailType, NamepathType } from './utils';
|
|
3
|
-
export declare const checkDetail: <Name extends NamepathType, Schema extends ZodType, Group extends string | undefined = undefined, Type extends string | undefined = undefined, Token extends boolean | undefined = undefined>(detail: unknown, { async, schema }: EventChatOptions<Name, Schema, Group, Type, Token>) => Promise<z.ZodSafeParseSuccess<z.core.output<Schema>>>;
|
|
4
|
-
export declare const checkLiteral: <Name extends NamepathType, Schema extends ZodType, Group extends string | undefined = undefined, Type extends string | undefined = undefined, Token extends boolean | undefined = undefined>(data: EventDetailType, { group, token }: EventChatOptions<Name, Schema, Group, Type, Token>, currentToken?: string) => Promise<import("./utils").DetailType<Name, Schema, Group, Type, Token>>;
|
|
3
|
+
export declare const checkDetail: <Name extends NamepathType, Schema extends ZodType, Group extends string | undefined = undefined, Type extends string | undefined = undefined, Token extends boolean | undefined = undefined>(detail: unknown, { async, lang, schema }: EventChatOptions<Name, Schema, Group, Type, Token>) => Promise<z.ZodSafeParseSuccess<z.core.output<Schema>>>;
|
|
4
|
+
export declare const checkLiteral: <Name extends NamepathType, Schema extends ZodType, Group extends string | undefined = undefined, Type extends string | undefined = undefined, Token extends boolean | undefined = undefined>(data: EventDetailType, { group, lang, token, filter }: EventChatOptions<Name, Schema, Group, Type, Token>, currentToken?: string) => Promise<import("./utils").DetailType<Name, Schema, Group, Type, Token>>;
|
|
5
5
|
export declare const validate: <Name extends NamepathType, Schema extends ZodType, Group extends string | undefined = undefined, Type extends string | undefined = undefined, Token extends boolean | undefined = undefined>(data: EventDetailType, record: EventChatOptions<Name, Schema, Group, Type, Token>, currentToken?: string) => Promise<{
|
|
6
6
|
detail: z.core.output<Schema>;
|
|
7
|
-
|
|
7
|
+
rule: string;
|
|
8
8
|
global?: boolean | undefined;
|
|
9
9
|
id: string;
|
|
10
|
+
name: Name;
|
|
11
|
+
originName: NamepathType;
|
|
10
12
|
time: Date;
|
|
11
13
|
group: import("./utils").WasProvided<Group, undefined> extends true ? Exclude<Group, undefined> : undefined;
|
|
12
14
|
origin: string;
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAe,MAAM,SAAS,CAAC;AAUvF,eAAO,MAAM,WAAW,GACtB,IAAI,SAAS,YAAY,EACzB,MAAM,SAAS,OAAO,EACtB,KAAK,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EAC5C,IAAI,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EAC3C,KAAK,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAE7C,QAAQ,OAAO,EACf,yBAAyB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,0DAe5E,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,IAAI,SAAS,YAAY,EACzB,MAAM,SAAS,OAAO,EACtB,KAAK,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EAC5C,IAAI,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EAC3C,KAAK,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAE7C,MAAM,eAAe,EACrB,gCAAgC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAClF,eAAe,MAAM,4EAsCtB,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,IAAI,SAAS,YAAY,EACzB,MAAM,SAAS,OAAO,EACtB,KAAK,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EAC5C,IAAI,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EAC3C,KAAK,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAE7C,MAAM,eAAe,EACrB,QAAQ,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAC1D,eAAe,MAAM;;;;;;;;;;;;EAOpB,CAAC"}
|
package/dist/validate.js
CHANGED
|
@@ -1,34 +1,47 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { defaultLang } from "./utils.js";
|
|
2
3
|
const literalCondition = (value, error, empty)=>('string' == typeof value && '' !== value ? z.literal(value, error ? {
|
|
3
4
|
error
|
|
4
5
|
} : void 0) : void 0) ?? (value ? z.any() : z.undefined(empty ? {
|
|
5
6
|
error: empty
|
|
6
7
|
} : void 0));
|
|
7
|
-
const checkDetail = (detail, { async, schema })=>{
|
|
8
|
+
const checkDetail = (detail, { async, lang, schema })=>{
|
|
9
|
+
const { detailError } = lang ?? defaultLang;
|
|
8
10
|
if (schema) {
|
|
9
11
|
const result = async ? schema.safeParseAsync(detail) : Promise.resolve(schema.safeParse(detail));
|
|
10
|
-
return result.then((cause)=>cause.success ? cause : Promise.reject(new Error(cause.error.issues[0].message ??
|
|
12
|
+
return result.then((cause)=>cause.success ? cause : Promise.reject(new Error(cause.error.issues[0].message ?? detailError, {
|
|
11
13
|
cause
|
|
12
14
|
})));
|
|
13
15
|
}
|
|
14
|
-
return Promise.reject(new Error(
|
|
16
|
+
return Promise.reject(new Error(detailError));
|
|
15
17
|
};
|
|
16
|
-
const checkLiteral = (data, { group, token }, currentToken)=>{
|
|
18
|
+
const checkLiteral = (data, { group, lang, token, filter }, currentToken)=>{
|
|
19
|
+
const { customError, detailError, groupEmpty, groupProvider, tokenEmpty, tokenProvider } = lang ?? defaultLang;
|
|
17
20
|
const schema = z.object({
|
|
18
|
-
group: literalCondition(group ?? data.global,
|
|
19
|
-
token: literalCondition(token ? currentToken : data.global,
|
|
21
|
+
group: literalCondition(group ?? data.global, groupProvider, groupEmpty),
|
|
22
|
+
token: literalCondition(token ? currentToken : data.global, tokenProvider, tokenEmpty)
|
|
20
23
|
});
|
|
21
|
-
const
|
|
22
|
-
|
|
24
|
+
const result = filter ? schema.refine(async ()=>{
|
|
25
|
+
const detailRecord = {
|
|
26
|
+
...data
|
|
27
|
+
};
|
|
28
|
+
Reflect.deleteProperty(detailRecord, 'detail');
|
|
29
|
+
const verify = await Promise.resolve(detailRecord).then(filter).catch(()=>false);
|
|
30
|
+
return verify;
|
|
31
|
+
}, {
|
|
32
|
+
error: customError
|
|
33
|
+
}).safeParseAsync(data) : Promise.resolve(schema.safeParse(data));
|
|
34
|
+
return result.then((cause)=>{
|
|
35
|
+
if (!cause.success) return Promise.reject(new Error(detailError, {
|
|
36
|
+
cause
|
|
37
|
+
}));
|
|
23
38
|
const resultData = {
|
|
24
39
|
...data,
|
|
25
40
|
token: currentToken,
|
|
26
41
|
group
|
|
27
42
|
};
|
|
28
43
|
return resultData;
|
|
29
|
-
})
|
|
30
|
-
cause
|
|
31
|
-
}));
|
|
44
|
+
});
|
|
32
45
|
};
|
|
33
46
|
const validate = (data, record, currentToken)=>checkLiteral(data, record, currentToken).then((detail)=>checkDetail(data.detail, record).then((result)=>({
|
|
34
47
|
...detail,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@event-chat/core",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"dist"
|
|
15
15
|
],
|
|
16
16
|
"devDependencies": {
|
|
17
|
+
"@formily/path": "^2.3.7",
|
|
17
18
|
"@rslib/core": "^0.18.4",
|
|
18
19
|
"@rstest/core": "^0.7.1",
|
|
19
20
|
"@rstest/coverage-istanbul": "^0.1.3",
|
|
@@ -30,6 +31,7 @@
|
|
|
30
31
|
"typescript-eslint": "^8.48.0"
|
|
31
32
|
},
|
|
32
33
|
"peerDependencies": {
|
|
34
|
+
"@formily/path": "^2.0.0",
|
|
33
35
|
"react": ">=18.0.0",
|
|
34
36
|
"react-dom": ">=18.0.0",
|
|
35
37
|
"zod": "^3.0.0 || ^4.0.0"
|