@event-chat/core 0.2.5 → 0.2.6

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.
@@ -3,7 +3,7 @@ declare class EventBus {
3
3
  private events;
4
4
  constructor();
5
5
  clear(): void;
6
- emit(eventName: string, args: EventDetailType): void;
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;
@@ -1 +1 @@
1
- {"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../src/eventBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,cAAM,QAAQ;IACZ,OAAO,CAAC,MAAM,CAAkE;;IAKhF,KAAK,IAAI,IAAI;IAIb,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe;IAM7C,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"}
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(eventName, args) {
10
- this.events[eventName]?.forEach((callback)=>{
11
- callback(args);
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>, "group" | "id" | "origin" | "time" | "type">) => void;
6
+ emit: <Detail, CustomName extends NamepathType>(detail: Omit<EventDetailType<Detail, CustomName>, ExcludeKey>) => void;
7
7
  }>;
8
8
  //# sourceMappingURL=hooks.d.ts.map
@@ -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,EAQb,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;;WA+CjE,MAAM,EAAE,UAAU,SAAS,YAAY,UAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;GA+BnG"}
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, isSafetyType, mountEvent } from "./utils.js";
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
- ...args,
42
- name: subName
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
- const event = createEvent({
61
- ...detail,
62
- group: ops?.group,
63
- origin: nameRc.current,
64
- time: new Date(),
65
- type: ops?.type,
66
- id
67
- });
68
- document.body.dispatchEvent(event);
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
- ops?.group,
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
@@ -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 getEventName: (name: NamepathType) => string;
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
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
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 getEventName = (name)=>{
15
- const path = Array.isArray(name) ? name : [
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
- return `event-chart_${JSON.stringify(path)}`;
56
+ const targetName = `${defaultName}${reduceName.join('.')}`;
57
+ Path.parse(targetName);
58
+ return cacheEventName(name, targetName) ?? defaultName;
20
59
  } catch {
21
- return "event-chart_[]";
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 { name: detailName } = event.detail ?? {};
35
- const currentName = detailName ? getEventName(detailName) : void 0;
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, isSafetyType, mountEvent };
68
+ export { EventName, combinePath, createEvent, createToken, defaultLang, defaultName, getConditionKey, getEventName, isResultType, mountEvent };
@@ -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
- name: Name;
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;
@@ -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,EAAE,MAAM,SAAS,CAAC;AAU1E,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,mBAAmB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,0DActE,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,kBAAkB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EACpE,eAAe,MAAM,4EA2BtB,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"}
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 ?? 'validate faild', {
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('validate faild'));
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, 'Non group members.', 'Do not accept record with group.'),
19
- token: literalCondition(token ? currentToken : data.global, 'Not providing tokens as expected.', 'Do not accept record with token.')
21
+ group: literalCondition(group ?? data.global, groupProvider, groupEmpty),
22
+ token: literalCondition(token ? currentToken : data.global, tokenProvider, tokenEmpty)
20
23
  });
21
- const cause = schema.safeParse(data);
22
- return cause.success ? Promise.resolve().then(()=>{
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
- }) : Promise.reject(new Error('validate faild', {
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.5",
3
+ "version": "0.2.6",
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"