@tiny-codes/react-easy 1.4.6 → 1.4.8
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/CHANGELOG.md +24 -0
- package/es/assets/request-camera-en.js +2 -0
- package/es/assets/request-camera-en.js.d.ts +2 -0
- package/es/assets/request-camera-en.js.map +1 -0
- package/es/assets/request-camera-en.png +0 -0
- package/es/assets/request-camera-zh.js +2 -0
- package/es/assets/request-camera-zh.js.d.ts +2 -0
- package/es/assets/request-camera-zh.js.map +1 -0
- package/es/assets/request-camera-zh.png +0 -0
- package/es/assets/request-microphone-en.js +2 -0
- package/es/assets/request-microphone-en.js.d.ts +2 -0
- package/es/assets/request-microphone-en.js.map +1 -0
- package/es/assets/request-microphone-en.png +0 -0
- package/es/assets/request-microphone-zh.js +2 -0
- package/es/assets/request-microphone-zh.js.d.ts +2 -0
- package/es/assets/request-microphone-zh.js.map +1 -0
- package/es/assets/request-microphone-zh.png +0 -0
- package/es/assets/reset-camera-en.js +2 -0
- package/es/assets/reset-camera-en.js.d.ts +2 -0
- package/es/assets/reset-camera-en.js.map +1 -0
- package/es/assets/reset-camera-en.png +0 -0
- package/es/assets/reset-camera-zh.js +2 -0
- package/es/assets/reset-camera-zh.js.d.ts +2 -0
- package/es/assets/reset-camera-zh.js.map +1 -0
- package/es/assets/reset-camera-zh.png +0 -0
- package/es/assets/reset-microphone-en.js +2 -0
- package/es/assets/reset-microphone-en.js.d.ts +2 -0
- package/es/assets/reset-microphone-en.js.map +1 -0
- package/es/assets/reset-microphone-en.png +0 -0
- package/es/assets/reset-microphone-zh.js +2 -0
- package/es/assets/reset-microphone-zh.js.d.ts +2 -0
- package/es/assets/reset-microphone-zh.js.map +1 -0
- package/es/assets/reset-microphone-zh.png +0 -0
- package/es/assets/save-default-audio1-en.js +2 -0
- package/es/assets/save-default-audio1-en.js.d.ts +2 -0
- package/es/assets/save-default-audio1-en.js.map +1 -0
- package/es/assets/save-default-audio1-en.png +0 -0
- package/es/assets/save-default-audio1-zh.js +2 -0
- package/es/assets/save-default-audio1-zh.js.d.ts +2 -0
- package/es/assets/save-default-audio1-zh.js.map +1 -0
- package/es/assets/save-default-audio1-zh.png +0 -0
- package/es/assets/save-default-audio2-en.js +2 -0
- package/es/assets/save-default-audio2-en.js.d.ts +2 -0
- package/es/assets/save-default-audio2-en.js.map +1 -0
- package/es/assets/save-default-audio2-en.png +0 -0
- package/es/assets/save-default-audio2-zh.js +2 -0
- package/es/assets/save-default-audio2-zh.js.d.ts +2 -0
- package/es/assets/save-default-audio2-zh.js.map +1 -0
- package/es/assets/save-default-audio2-zh.png +0 -0
- package/es/components/ConfigProvider/index.js +1 -0
- package/es/components/ConfigProvider/index.js.map +1 -1
- package/es/hooks/index.d.ts +4 -0
- package/es/hooks/index.js +4 -0
- package/es/hooks/index.js.map +1 -1
- package/es/hooks/useRefValue.d.ts +2 -2
- package/es/hooks/useRefValue.js.map +1 -1
- package/es/hooks/useStompSocket.d.ts +63 -0
- package/es/hooks/useStompSocket.js +182 -0
- package/es/hooks/useStompSocket.js.map +1 -0
- package/es/hooks/useUserMedia.d.ts +104 -0
- package/es/hooks/useUserMedia.js +787 -0
- package/es/hooks/useUserMedia.js.map +1 -0
- package/es/locales/index.d.ts +57 -0
- package/es/locales/langs/en-US.d.ts +19 -0
- package/es/locales/langs/en-US.js +20 -1
- package/es/locales/langs/en-US.js.map +1 -1
- package/es/locales/langs/zh-CN.d.ts +19 -0
- package/es/locales/langs/zh-CN.js +20 -1
- package/es/locales/langs/zh-CN.js.map +1 -1
- package/es/utils/stream.d.ts +68 -0
- package/es/utils/stream.js +122 -0
- package/es/utils/stream.js.map +1 -0
- package/lib/assets/request-camera-en.js +26 -0
- package/lib/assets/request-camera-en.js.d.ts +2 -0
- package/lib/assets/request-camera-en.js.map +7 -0
- package/lib/assets/request-camera-en.png +0 -0
- package/lib/assets/request-camera-zh.js +26 -0
- package/lib/assets/request-camera-zh.js.d.ts +2 -0
- package/lib/assets/request-camera-zh.js.map +7 -0
- package/lib/assets/request-camera-zh.png +0 -0
- package/lib/assets/request-microphone-en.js +26 -0
- package/lib/assets/request-microphone-en.js.d.ts +2 -0
- package/lib/assets/request-microphone-en.js.map +7 -0
- package/lib/assets/request-microphone-en.png +0 -0
- package/lib/assets/request-microphone-zh.js +26 -0
- package/lib/assets/request-microphone-zh.js.d.ts +2 -0
- package/lib/assets/request-microphone-zh.js.map +7 -0
- package/lib/assets/request-microphone-zh.png +0 -0
- package/lib/assets/reset-camera-en.js +26 -0
- package/lib/assets/reset-camera-en.js.d.ts +2 -0
- package/lib/assets/reset-camera-en.js.map +7 -0
- package/lib/assets/reset-camera-en.png +0 -0
- package/lib/assets/reset-camera-zh.js +26 -0
- package/lib/assets/reset-camera-zh.js.d.ts +2 -0
- package/lib/assets/reset-camera-zh.js.map +7 -0
- package/lib/assets/reset-camera-zh.png +0 -0
- package/lib/assets/reset-microphone-en.js +26 -0
- package/lib/assets/reset-microphone-en.js.d.ts +2 -0
- package/lib/assets/reset-microphone-en.js.map +7 -0
- package/lib/assets/reset-microphone-en.png +0 -0
- package/lib/assets/reset-microphone-zh.js +26 -0
- package/lib/assets/reset-microphone-zh.js.d.ts +2 -0
- package/lib/assets/reset-microphone-zh.js.map +7 -0
- package/lib/assets/reset-microphone-zh.png +0 -0
- package/lib/assets/save-default-audio1-en.js +26 -0
- package/lib/assets/save-default-audio1-en.js.d.ts +2 -0
- package/lib/assets/save-default-audio1-en.js.map +7 -0
- package/lib/assets/save-default-audio1-en.png +0 -0
- package/lib/assets/save-default-audio1-zh.js +26 -0
- package/lib/assets/save-default-audio1-zh.js.d.ts +2 -0
- package/lib/assets/save-default-audio1-zh.js.map +7 -0
- package/lib/assets/save-default-audio1-zh.png +0 -0
- package/lib/assets/save-default-audio2-en.js +26 -0
- package/lib/assets/save-default-audio2-en.js.d.ts +2 -0
- package/lib/assets/save-default-audio2-en.js.map +7 -0
- package/lib/assets/save-default-audio2-en.png +0 -0
- package/lib/assets/save-default-audio2-zh.js +26 -0
- package/lib/assets/save-default-audio2-zh.js.d.ts +2 -0
- package/lib/assets/save-default-audio2-zh.js.map +7 -0
- package/lib/assets/save-default-audio2-zh.png +0 -0
- package/lib/components/ConfigProvider/index.js +1 -0
- package/lib/components/ConfigProvider/index.js.map +2 -2
- package/lib/hooks/index.d.ts +4 -0
- package/lib/hooks/index.js +12 -1
- package/lib/hooks/index.js.map +2 -2
- package/lib/hooks/useRefValue.d.ts +2 -2
- package/lib/hooks/useRefValue.js.map +2 -2
- package/lib/hooks/useStompSocket.d.ts +63 -0
- package/lib/hooks/useStompSocket.js +154 -0
- package/lib/hooks/useStompSocket.js.map +7 -0
- package/lib/hooks/useUserMedia.d.ts +104 -0
- package/lib/hooks/useUserMedia.js +541 -0
- package/lib/hooks/useUserMedia.js.map +7 -0
- package/lib/locales/index.d.ts +57 -0
- package/lib/locales/langs/en-US.d.ts +19 -0
- package/lib/locales/langs/en-US.js +20 -1
- package/lib/locales/langs/en-US.js.map +2 -2
- package/lib/locales/langs/zh-CN.d.ts +19 -0
- package/lib/locales/langs/zh-CN.js +20 -1
- package/lib/locales/langs/zh-CN.js.map +2 -2
- package/lib/utils/stream.d.ts +68 -0
- package/lib/utils/stream.js +101 -0
- package/lib/utils/stream.js.map +7 -0
- package/package.json +9 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/assets/save-default-audio2-zh.js"],"sourcesContent":["export default 'data:image/png;base64,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';\n"],"mappings":"AAAA,eAAe,ow9DAAow9D"}
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","locales","langs","resources","ReactEasyContext","jsx","_jsx","ConfigProvider","props","children","userLocales","restProps","_objectWithoutProperties","_excluded","langInProps","lang","includes","removeResourceBundle","addResourceBundle","_objectSpread","translation","en","changeLanguage","Provider","value"],"sources":["../../../src/components/ConfigProvider/index.tsx"],"sourcesContent":["import { type FC, type ReactNode, useEffect } from 'react';\nimport locales, { langs, resources } from '../../locales';\nimport type localesEn from '../../locales/langs/en';\nimport ReactEasyContext, { type ReactEasyContextProps } from './context';\n\nexport interface ConfigProviderProps extends ReactEasyContextProps {\n /**\n * - **EN:** Custom localization resources, if `lang` exists, it will override the localization\n * resources of that language, otherwise, it will add a new language\n * - **CN:** 自定义本地化资源,如果`lang`存在,则会覆盖该语言的本地化资源,否则,会添加一种新的语言\n */\n locales?: Partial<typeof localesEn>;\n children: ReactNode;\n}\n\n/**\n * - **EN:** Provide global configuration for AntdHelper\n * - **CN:** 提供AntdHelper的全局配置\n */\nconst ConfigProvider: FC<ConfigProviderProps> = (props) => {\n const { children, locales: userLocales, ...restProps } = props;\n const { lang: langInProps } = restProps;\n\n useEffect(() => {\n // Dynamically add language pack\n if (userLocales) {\n const lang = langInProps || 'en';\n if (lang && langs.includes(lang)) {\n locales.removeResourceBundle(lang, 'translation');\n locales.addResourceBundle(lang, 'translation', { ...resources[lang].translation, ...userLocales });\n } else {\n locales.addResourceBundle(lang, 'translation', { ...resources.en.translation, ...userLocales });\n }\n }\n }, [langInProps, userLocales]);\n\n useEffect(() => {\n // Set the language of the component\n locales.changeLanguage(langInProps || 'en');\n }, [langInProps]);\n\n return <ReactEasyContext.Provider value={restProps}>{children}</ReactEasyContext.Provider>;\n};\n\nexport default ConfigProvider;\n"],"mappings":";;;;;;;;;AAAA,SAAkCA,SAAS,QAAQ,OAAO;AAC1D,OAAOC,OAAO,IAAIC,KAAK,EAAEC,SAAS;AAElC,OAAOC,gBAAgB;AAAkD,SAAAC,GAAA,IAAAC,IAAA;AAYzE;AACA;AACA;AACA;AACA,IAAMC,cAAuC,GAAG,SAA1CA,cAAuCA,CAAIC,KAAK,EAAK;EACzD,IAAQC,QAAQ,GAAyCD,KAAK,CAAtDC,QAAQ;IAAWC,WAAW,GAAmBF,KAAK,CAA5CP,OAAO;IAAkBU,SAAS,GAAAC,wBAAA,CAAKJ,KAAK,EAAAK,SAAA;EAC9D,IAAcC,WAAW,GAAKH,SAAS,CAA/BI,IAAI;EAEZf,SAAS,CAAC,YAAM;IACd;IACA,IAAIU,WAAW,EAAE;MACf,IAAMK,IAAI,GAAGD,WAAW,IAAI,IAAI;MAChC,IAAIC,IAAI,IAAIb,KAAK,CAACc,QAAQ,CAACD,IAAI,CAAC,EAAE;QAChCd,OAAO,CAACgB,oBAAoB,CAACF,IAAI,EAAE,aAAa,CAAC;QACjDd,OAAO,CAACiB,iBAAiB,CAACH,IAAI,EAAE,aAAa,EAAAI,aAAA,CAAAA,aAAA,KAAOhB,SAAS,CAACY,IAAI,CAAC,CAACK,WAAW,GAAKV,WAAW,CAAE,CAAC;MACpG,CAAC,MAAM;QACLT,OAAO,CAACiB,iBAAiB,CAACH,IAAI,EAAE,aAAa,EAAAI,aAAA,CAAAA,aAAA,KAAOhB,SAAS,CAACkB,EAAE,CAACD,WAAW,GAAKV,WAAW,CAAE,CAAC;MACjG;IACF;EACF,CAAC,EAAE,CAACI,WAAW,EAAEJ,WAAW,CAAC,CAAC;EAE9BV,SAAS,CAAC,YAAM;IACd;IACAC,OAAO,CAACqB,cAAc,CAACR,WAAW,IAAI,IAAI,CAAC;EAC7C,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;EAEjB,oBAAOR,IAAA,CAACF,gBAAgB,CAACmB,QAAQ;IAACC,KAAK,EAAEb,SAAU;IAAAF,QAAA,EAAEA;EAAQ,CAA4B,CAAC;AAC5F,CAAC;
|
|
1
|
+
{"version":3,"names":["useEffect","locales","langs","resources","ReactEasyContext","jsx","_jsx","ConfigProvider","props","children","userLocales","restProps","_objectWithoutProperties","_excluded","langInProps","lang","includes","removeResourceBundle","addResourceBundle","_objectSpread","translation","en","changeLanguage","Provider","value","displayName"],"sources":["../../../src/components/ConfigProvider/index.tsx"],"sourcesContent":["import { type FC, type ReactNode, useEffect } from 'react';\nimport locales, { langs, resources } from '../../locales';\nimport type localesEn from '../../locales/langs/en';\nimport ReactEasyContext, { type ReactEasyContextProps } from './context';\n\nexport interface ConfigProviderProps extends ReactEasyContextProps {\n /**\n * - **EN:** Custom localization resources, if `lang` exists, it will override the localization\n * resources of that language, otherwise, it will add a new language\n * - **CN:** 自定义本地化资源,如果`lang`存在,则会覆盖该语言的本地化资源,否则,会添加一种新的语言\n */\n locales?: Partial<typeof localesEn>;\n children: ReactNode;\n}\n\n/**\n * - **EN:** Provide global configuration for AntdHelper\n * - **CN:** 提供AntdHelper的全局配置\n */\nconst ConfigProvider: FC<ConfigProviderProps> = (props) => {\n const { children, locales: userLocales, ...restProps } = props;\n const { lang: langInProps } = restProps;\n\n useEffect(() => {\n // Dynamically add language pack\n if (userLocales) {\n const lang = langInProps || 'en';\n if (lang && langs.includes(lang)) {\n locales.removeResourceBundle(lang, 'translation');\n locales.addResourceBundle(lang, 'translation', { ...resources[lang].translation, ...userLocales });\n } else {\n locales.addResourceBundle(lang, 'translation', { ...resources.en.translation, ...userLocales });\n }\n }\n }, [langInProps, userLocales]);\n\n useEffect(() => {\n // Set the language of the component\n locales.changeLanguage(langInProps || 'en');\n }, [langInProps]);\n\n return <ReactEasyContext.Provider value={restProps}>{children}</ReactEasyContext.Provider>;\n};\nConfigProvider.displayName = 'ReactEasyConfigProvider';\n\nexport default ConfigProvider;\n"],"mappings":";;;;;;;;;AAAA,SAAkCA,SAAS,QAAQ,OAAO;AAC1D,OAAOC,OAAO,IAAIC,KAAK,EAAEC,SAAS;AAElC,OAAOC,gBAAgB;AAAkD,SAAAC,GAAA,IAAAC,IAAA;AAYzE;AACA;AACA;AACA;AACA,IAAMC,cAAuC,GAAG,SAA1CA,cAAuCA,CAAIC,KAAK,EAAK;EACzD,IAAQC,QAAQ,GAAyCD,KAAK,CAAtDC,QAAQ;IAAWC,WAAW,GAAmBF,KAAK,CAA5CP,OAAO;IAAkBU,SAAS,GAAAC,wBAAA,CAAKJ,KAAK,EAAAK,SAAA;EAC9D,IAAcC,WAAW,GAAKH,SAAS,CAA/BI,IAAI;EAEZf,SAAS,CAAC,YAAM;IACd;IACA,IAAIU,WAAW,EAAE;MACf,IAAMK,IAAI,GAAGD,WAAW,IAAI,IAAI;MAChC,IAAIC,IAAI,IAAIb,KAAK,CAACc,QAAQ,CAACD,IAAI,CAAC,EAAE;QAChCd,OAAO,CAACgB,oBAAoB,CAACF,IAAI,EAAE,aAAa,CAAC;QACjDd,OAAO,CAACiB,iBAAiB,CAACH,IAAI,EAAE,aAAa,EAAAI,aAAA,CAAAA,aAAA,KAAOhB,SAAS,CAACY,IAAI,CAAC,CAACK,WAAW,GAAKV,WAAW,CAAE,CAAC;MACpG,CAAC,MAAM;QACLT,OAAO,CAACiB,iBAAiB,CAACH,IAAI,EAAE,aAAa,EAAAI,aAAA,CAAAA,aAAA,KAAOhB,SAAS,CAACkB,EAAE,CAACD,WAAW,GAAKV,WAAW,CAAE,CAAC;MACjG;IACF;EACF,CAAC,EAAE,CAACI,WAAW,EAAEJ,WAAW,CAAC,CAAC;EAE9BV,SAAS,CAAC,YAAM;IACd;IACAC,OAAO,CAACqB,cAAc,CAACR,WAAW,IAAI,IAAI,CAAC;EAC7C,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;EAEjB,oBAAOR,IAAA,CAACF,gBAAgB,CAACmB,QAAQ;IAACC,KAAK,EAAEb,SAAU;IAAAF,QAAA,EAAEA;EAAQ,CAA4B,CAAC;AAC5F,CAAC;AACDF,cAAc,CAACkB,WAAW,GAAG,yBAAyB;AAEtD,eAAelB,cAAc"}
|
package/es/hooks/index.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export { default as useRefValue } from './useRefValue';
|
|
2
2
|
export { default as useRefFunction } from './useRefFunction';
|
|
3
|
+
export * from './useStompSocket';
|
|
4
|
+
export { default as useStompSocket } from './useStompSocket';
|
|
3
5
|
export type { ValidatorRuleMap } from './useValidators';
|
|
4
6
|
export { default as useValidators } from './useValidators';
|
|
5
7
|
export { default as useValidator } from './useValidator';
|
|
6
8
|
export type { Validator, RuleRegExpFlags, ValidatorRule, BuilderOptions } from './useValidatorBuilder';
|
|
7
9
|
export { default as useValidatorBuilder } from './useValidatorBuilder';
|
|
10
|
+
export * from './useUserMedia';
|
|
11
|
+
export { default as useUserMedia } from './useUserMedia';
|
package/es/hooks/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export { default as useRefValue } from "./useRefValue";
|
|
2
2
|
export { default as useRefFunction } from "./useRefFunction";
|
|
3
|
+
export * from "./useStompSocket";
|
|
4
|
+
export { default as useStompSocket } from "./useStompSocket";
|
|
3
5
|
export { default as useValidators } from "./useValidators";
|
|
4
6
|
export { default as useValidator } from "./useValidator";
|
|
5
7
|
export { default as useValidatorBuilder } from "./useValidatorBuilder";
|
|
8
|
+
export * from "./useUserMedia";
|
|
9
|
+
export { default as useUserMedia } from "./useUserMedia";
|
|
6
10
|
//# sourceMappingURL=index.js.map
|
package/es/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["default","useRefValue","useRefFunction","useValidators","useValidator","useValidatorBuilder"],"sources":["../../src/hooks/index.ts"],"sourcesContent":["export { default as useRefValue } from './useRefValue';\nexport { default as useRefFunction } from './useRefFunction';\
|
|
1
|
+
{"version":3,"names":["default","useRefValue","useRefFunction","useStompSocket","useValidators","useValidator","useValidatorBuilder","useUserMedia"],"sources":["../../src/hooks/index.ts"],"sourcesContent":["export { default as useRefValue } from './useRefValue';\nexport { default as useRefFunction } from './useRefFunction';\nexport * from './useStompSocket';\nexport { default as useStompSocket } from './useStompSocket';\nexport type { ValidatorRuleMap } from './useValidators';\nexport { default as useValidators } from './useValidators';\nexport { default as useValidator } from './useValidator';\nexport type { Validator, RuleRegExpFlags, ValidatorRule, BuilderOptions } from './useValidatorBuilder';\nexport { default as useValidatorBuilder } from './useValidatorBuilder';\nexport * from './useUserMedia';\nexport { default as useUserMedia } from './useUserMedia';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,WAAW;AAC/B,SAASD,OAAO,IAAIE,cAAc;AAClC;AACA,SAASF,OAAO,IAAIG,cAAc;AAElC,SAASH,OAAO,IAAII,aAAa;AACjC,SAASJ,OAAO,IAAIK,YAAY;AAEhC,SAASL,OAAO,IAAIM,mBAAmB;AACvC;AACA,SAASN,OAAO,IAAIO,YAAY"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MutableRefObject } from 'react';
|
|
2
2
|
/**
|
|
3
3
|
* - **EN:** Get a mutable ref object and automatically update the value change
|
|
4
4
|
* - **CN:** 获取一个可变的ref对象,并自动更新值变化
|
|
@@ -7,5 +7,5 @@ import type { RefObject } from 'react';
|
|
|
7
7
|
*
|
|
8
8
|
* @returns A mutable ref object, but the reference is immutable | 可变的ref对象,但引用不可变
|
|
9
9
|
*/
|
|
10
|
-
declare const useRefValue: <T>(value: T) =>
|
|
10
|
+
declare const useRefValue: <T>(value: T) => MutableRefObject<T>;
|
|
11
11
|
export default useRefValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useRef","useRefValue","value","ref","current"],"sources":["../../src/hooks/useRefValue.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"names":["useRef","useRefValue","value","ref","current"],"sources":["../../src/hooks/useRefValue.ts"],"sourcesContent":["import type { MutableRefObject } from 'react';\nimport { useRef } from 'react';\n\n/**\n * - **EN:** Get a mutable ref object and automatically update the value change\n * - **CN:** 获取一个可变的ref对象,并自动更新值变化\n *\n * @param value the wrapped value | 被包装的值\n *\n * @returns A mutable ref object, but the reference is immutable | 可变的ref对象,但引用不可变\n */\nconst useRefValue = <T>(value: T): MutableRefObject<T> => {\n const ref = useRef<T>(value);\n ref.current = value;\n return ref;\n};\n\nexport default useRefValue;\n"],"mappings":"AACA,SAASA,MAAM,QAAQ,OAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAOC,KAAQ,EAA0B;EACxD,IAAMC,GAAG,GAAGH,MAAM,CAAIE,KAAK,CAAC;EAC5BC,GAAG,CAACC,OAAO,GAAGF,KAAK;EACnB,OAAOC,GAAG;AACZ,CAAC;AAED,eAAeF,WAAW"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { StompConfig } from '@stomp/stompjs';
|
|
2
|
+
import { Client } from '@stomp/stompjs';
|
|
3
|
+
export interface UseSocketOptions<M = string> {
|
|
4
|
+
/**
|
|
5
|
+
* - **EN:** Socket connection address
|
|
6
|
+
* - **CN:** Socket连接地址
|
|
7
|
+
*/
|
|
8
|
+
url: string;
|
|
9
|
+
/**
|
|
10
|
+
* - **EN:** STOMP connection configuration
|
|
11
|
+
* - **CN:** - **CN:** STOMP连接配置
|
|
12
|
+
*/
|
|
13
|
+
connectConfig?: StompConfig;
|
|
14
|
+
/**
|
|
15
|
+
* - **EN:** Channel path for publishing messages
|
|
16
|
+
* - **CN:** 发布消息的频道路径
|
|
17
|
+
*/
|
|
18
|
+
sendEndpoint?: string;
|
|
19
|
+
/**
|
|
20
|
+
* - **EN:** Endpoint path for receiving messages
|
|
21
|
+
* - **CN:** 接收消息的端点路径
|
|
22
|
+
*/
|
|
23
|
+
subscribeEndpoint?: string;
|
|
24
|
+
/**
|
|
25
|
+
* - **EN:** Connection success callback
|
|
26
|
+
* - **CN:** 连接成功回调
|
|
27
|
+
*/
|
|
28
|
+
onConnected?: () => void;
|
|
29
|
+
/**
|
|
30
|
+
* - **EN:** Message received callback
|
|
31
|
+
* - **CN:** 接收到消息回调
|
|
32
|
+
*/
|
|
33
|
+
onMessage?: (message: M) => void;
|
|
34
|
+
/**
|
|
35
|
+
* - **EN:** Parse message body, return value as input parameter for `onMessage`
|
|
36
|
+
* - **CN:** 解析消息体,返回值作为`onMessage`的输入参数。
|
|
37
|
+
*
|
|
38
|
+
* @param body - The raw message body received from the server, needs to be deserialized based on
|
|
39
|
+
* actual conditions. | 从服务端接收到的原始消息体,需要根据实际情况进行反序列化。
|
|
40
|
+
*
|
|
41
|
+
* @returns Parsed message body as the input parameter of `onMessage`| 解析后的消息体,作为`onMessage`的输入参数
|
|
42
|
+
*/
|
|
43
|
+
parseMessageBody?: (body: string) => M;
|
|
44
|
+
/**
|
|
45
|
+
* - **EN:** Connection close callback
|
|
46
|
+
* - **CN:** 连接关闭回调
|
|
47
|
+
*/
|
|
48
|
+
onClose?: () => void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* - **EN:** Establish a WebSocket based on the STOMP protocol, mainly used for bidirectional
|
|
52
|
+
* transmission of serializable character messages.
|
|
53
|
+
* - **CN:** 建立基于STOMP协议的WebSocket,主要用于双向传递可序列化的字符型消息
|
|
54
|
+
*/
|
|
55
|
+
declare function useStompSocket<M = string>(options: UseSocketOptions<M>): {
|
|
56
|
+
connect: () => Promise<void>;
|
|
57
|
+
close: () => void;
|
|
58
|
+
send: (body: string) => void;
|
|
59
|
+
connecting: boolean;
|
|
60
|
+
socket: WebSocket | undefined;
|
|
61
|
+
stompClient: Client | undefined;
|
|
62
|
+
};
|
|
63
|
+
export default useStompSocket;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
7
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
8
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
9
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
10
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
11
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
12
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
14
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
15
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
16
|
+
import { useRef, useState } from 'react';
|
|
17
|
+
import { Client } from '@stomp/stompjs';
|
|
18
|
+
import { notification } from 'antd';
|
|
19
|
+
import SockJS from 'sockjs-client';
|
|
20
|
+
import useRefFunction from "./useRefFunction";
|
|
21
|
+
import useT from "./useT";
|
|
22
|
+
/**
|
|
23
|
+
* - **EN:** Establish a WebSocket based on the STOMP protocol, mainly used for bidirectional
|
|
24
|
+
* transmission of serializable character messages.
|
|
25
|
+
* - **CN:** 建立基于STOMP协议的WebSocket,主要用于双向传递可序列化的字符型消息
|
|
26
|
+
*/
|
|
27
|
+
function useStompSocket(options) {
|
|
28
|
+
var url = options.url,
|
|
29
|
+
sendEndpoint = options.sendEndpoint,
|
|
30
|
+
subscribeEndpoint = options.subscribeEndpoint,
|
|
31
|
+
connectConfig = options.connectConfig,
|
|
32
|
+
onMessage = options.onMessage,
|
|
33
|
+
parseMessageBody = options.parseMessageBody,
|
|
34
|
+
onConnected = options.onConnected,
|
|
35
|
+
onClose = options.onClose;
|
|
36
|
+
var t = useT();
|
|
37
|
+
var socketRef = useRef(undefined);
|
|
38
|
+
var stompClientRef = useRef(undefined);
|
|
39
|
+
var _useState = useState(false),
|
|
40
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
41
|
+
connecting = _useState2[0],
|
|
42
|
+
setConnecting = _useState2[1];
|
|
43
|
+
var isConnectedRef = useRef(false);
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
|
|
45
|
+
var _useState3 = useState(),
|
|
46
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
47
|
+
refresh = _useState4[1];
|
|
48
|
+
var connect = useRefFunction( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
49
|
+
var promise;
|
|
50
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
51
|
+
while (1) switch (_context.prev = _context.next) {
|
|
52
|
+
case 0:
|
|
53
|
+
promise = new Promise(function (resolve, reject) {
|
|
54
|
+
try {
|
|
55
|
+
setConnecting(true);
|
|
56
|
+
// Create SockJS instance
|
|
57
|
+
socketRef.current = new SockJS(url);
|
|
58
|
+
|
|
59
|
+
// Create STOMP client
|
|
60
|
+
stompClientRef.current = new Client(_objectSpread(_objectSpread({
|
|
61
|
+
heartbeatIncoming: 5000,
|
|
62
|
+
heartbeatOutgoing: 5000
|
|
63
|
+
}, connectConfig), {}, {
|
|
64
|
+
webSocketFactory: function webSocketFactory() {
|
|
65
|
+
return socketRef.current;
|
|
66
|
+
}
|
|
67
|
+
}));
|
|
68
|
+
// Connect to STOMP server
|
|
69
|
+
stompClientRef.current.activate();
|
|
70
|
+
|
|
71
|
+
// STOMP server connection established
|
|
72
|
+
stompClientRef.current.onConnect = function () {
|
|
73
|
+
setConnecting(false);
|
|
74
|
+
isConnectedRef.current = true;
|
|
75
|
+
onConnected === null || onConnected === void 0 || onConnected();
|
|
76
|
+
if (subscribeEndpoint) {
|
|
77
|
+
var _stompClientRef$curre;
|
|
78
|
+
(_stompClientRef$curre = stompClientRef.current) === null || _stompClientRef$curre === void 0 || _stompClientRef$curre.subscribe(subscribeEndpoint, function (response) {
|
|
79
|
+
if (parseMessageBody) {
|
|
80
|
+
onMessage === null || onMessage === void 0 || onMessage(parseMessageBody(response.body));
|
|
81
|
+
} else {
|
|
82
|
+
onMessage === null || onMessage === void 0 || onMessage(response.body);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
resolve();
|
|
87
|
+
};
|
|
88
|
+
stompClientRef.current.onStompError = function (error) {
|
|
89
|
+
console.error('STOMP Error:', error);
|
|
90
|
+
};
|
|
91
|
+
stompClientRef.current.onWebSocketError = function (error) {
|
|
92
|
+
console.error('WebSocket Error:', error);
|
|
93
|
+
};
|
|
94
|
+
if (socketRef.current) {
|
|
95
|
+
socketRef.current.onerror = function (error) {
|
|
96
|
+
console.error(error);
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
stompClientRef.current.onWebSocketClose = function (event) {
|
|
100
|
+
var _stompClientRef$curre2;
|
|
101
|
+
setConnecting(false);
|
|
102
|
+
// Normal close
|
|
103
|
+
if (event.type === 'close' && event.code === 1000) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
(_stompClientRef$curre2 = stompClientRef.current) === null || _stompClientRef$curre2 === void 0 || _stompClientRef$curre2.debug('StompClient closed');
|
|
107
|
+
if (isConnectedRef.current) {
|
|
108
|
+
isConnectedRef.current = false;
|
|
109
|
+
onClose === null || onClose === void 0 || onClose();
|
|
110
|
+
notification.error({
|
|
111
|
+
message: undefined,
|
|
112
|
+
description: t('hooks.useStompSocket.serverDisconnected')
|
|
113
|
+
});
|
|
114
|
+
} else {
|
|
115
|
+
// Client connection failed
|
|
116
|
+
notification.error({
|
|
117
|
+
message: t('hooks.useStompSocket.connectError')
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
if (socketRef.current) {
|
|
122
|
+
socketRef.current.onclose = function (event) {
|
|
123
|
+
var _stompClientRef$curre3;
|
|
124
|
+
setConnecting(false);
|
|
125
|
+
isConnectedRef.current = false;
|
|
126
|
+
(_stompClientRef$curre3 = stompClientRef.current) === null || _stompClientRef$curre3 === void 0 || _stompClientRef$curre3.debug('Socket closed');
|
|
127
|
+
console.log('event', event);
|
|
128
|
+
onClose === null || onClose === void 0 || onClose();
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
} catch (error) {
|
|
132
|
+
console.error(error);
|
|
133
|
+
// notification.error({ message: error?.message ?? JSON.stringify(error) });
|
|
134
|
+
reject(error);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
refresh();
|
|
138
|
+
_context.next = 4;
|
|
139
|
+
return new Promise(function (resolve) {
|
|
140
|
+
return setTimeout(resolve);
|
|
141
|
+
});
|
|
142
|
+
case 4:
|
|
143
|
+
return _context.abrupt("return", promise);
|
|
144
|
+
case 5:
|
|
145
|
+
case "end":
|
|
146
|
+
return _context.stop();
|
|
147
|
+
}
|
|
148
|
+
}, _callee);
|
|
149
|
+
})));
|
|
150
|
+
var close = useRefFunction(function () {
|
|
151
|
+
try {
|
|
152
|
+
var _stompClientRef$curre4, _socketRef$current;
|
|
153
|
+
(_stompClientRef$curre4 = stompClientRef.current) === null || _stompClientRef$curre4 === void 0 || _stompClientRef$curre4.deactivate();
|
|
154
|
+
(_socketRef$current = socketRef.current) === null || _socketRef$current === void 0 || _socketRef$current.close();
|
|
155
|
+
isConnectedRef.current = false;
|
|
156
|
+
setConnecting(false);
|
|
157
|
+
} catch (error) {
|
|
158
|
+
console.error(error);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
var send = useRefFunction(function (body) {
|
|
162
|
+
var _stompClientRef$curre5;
|
|
163
|
+
if (!sendEndpoint) {
|
|
164
|
+
console.error('No publish endpoint defined, unable to send message');
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
(_stompClientRef$curre5 = stompClientRef.current) === null || _stompClientRef$curre5 === void 0 || _stompClientRef$curre5.publish({
|
|
168
|
+
destination: sendEndpoint,
|
|
169
|
+
body: body
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
return {
|
|
173
|
+
connect: connect,
|
|
174
|
+
close: close,
|
|
175
|
+
send: send,
|
|
176
|
+
connecting: connecting,
|
|
177
|
+
socket: socketRef.current,
|
|
178
|
+
stompClient: stompClientRef.current
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
export default useStompSocket;
|
|
182
|
+
//# sourceMappingURL=useStompSocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","ownKeys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","apply","_objectSpread","arguments","_defineProperty","getOwnPropertyDescriptors","defineProperties","obj","key","_toPropertyKey","_toPrimitive","String","toPrimitive","Number","asyncGeneratorStep","gen","reject","_next","_throw","info","error","_asyncToGenerator","fn","self","args","err","undefined","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","toString","Array","from","test","len","arr2","isArray","useRef","useState","Client","notification","SockJS","useRefFunction","useT","useStompSocket","options","url","sendEndpoint","subscribeEndpoint","connectConfig","onMessage","parseMessageBody","onConnected","onClose","socketRef","stompClientRef","_useState","_useState2","connecting","setConnecting","isConnectedRef","_useState3","_useState4","refresh","connect","_callee","promise","_callee$","_context","current","heartbeatIncoming","heartbeatOutgoing","webSocketFactory","activate","onConnect","_stompClientRef$curre","subscribe","response","body","onStompError","console","onWebSocketError","onerror","onWebSocketClose","event","_stompClientRef$curre2","code","debug","message","description","onclose","_stompClientRef$curre3","log","setTimeout","close","_stompClientRef$curre4","_socketRef$current","deactivate","send","_stompClientRef$curre5","publish","destination","socket","stompClient"],"sources":["../../src/hooks/useStompSocket.ts"],"sourcesContent":["import { useRef, useState } from 'react';\nimport type { StompConfig } from '@stomp/stompjs';\nimport { Client } from '@stomp/stompjs';\nimport { notification } from 'antd';\nimport SockJS from 'sockjs-client';\nimport useRefFunction from './useRefFunction';\nimport useT from './useT';\n\nexport interface UseSocketOptions<M = string> {\n /**\n * - **EN:** Socket connection address\n * - **CN:** Socket连接地址\n */\n url: string;\n /**\n * - **EN:** STOMP connection configuration\n * - **CN:** - **CN:** STOMP连接配置\n */\n connectConfig?: StompConfig;\n /**\n * - **EN:** Channel path for publishing messages\n * - **CN:** 发布消息的频道路径\n */\n sendEndpoint?: string;\n /**\n * - **EN:** Endpoint path for receiving messages\n * - **CN:** 接收消息的端点路径\n */\n subscribeEndpoint?: string;\n /**\n * - **EN:** Connection success callback\n * - **CN:** 连接成功回调\n */\n onConnected?: () => void;\n /**\n * - **EN:** Message received callback\n * - **CN:** 接收到消息回调\n */\n onMessage?: (message: M) => void;\n /**\n * - **EN:** Parse message body, return value as input parameter for `onMessage`\n * - **CN:** 解析消息体,返回值作为`onMessage`的输入参数。\n *\n * @param body - The raw message body received from the server, needs to be deserialized based on\n * actual conditions. | 从服务端接收到的原始消息体,需要根据实际情况进行反序列化。\n *\n * @returns Parsed message body as the input parameter of `onMessage`| 解析后的消息体,作为`onMessage`的输入参数\n */\n parseMessageBody?: (body: string) => M;\n /**\n * - **EN:** Connection close callback\n * - **CN:** 连接关闭回调\n */\n onClose?: () => void;\n}\n\n/**\n * - **EN:** Establish a WebSocket based on the STOMP protocol, mainly used for bidirectional\n * transmission of serializable character messages.\n * - **CN:** 建立基于STOMP协议的WebSocket,主要用于双向传递可序列化的字符型消息\n */\nfunction useStompSocket<M = string>(options: UseSocketOptions<M>) {\n const { url, sendEndpoint, subscribeEndpoint, connectConfig, onMessage, parseMessageBody, onConnected, onClose } =\n options;\n const t = useT();\n const socketRef = useRef<WebSocket | undefined>(undefined);\n const stompClientRef = useRef<Client | undefined>(undefined);\n const [connecting, setConnecting] = useState(false);\n const isConnectedRef = useRef(false);\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n const [, refresh] = useState<void>();\n\n const connect = useRefFunction(async () => {\n const promise = new Promise<void>((resolve, reject) => {\n try {\n setConnecting(true);\n // Create SockJS instance\n socketRef.current = new SockJS(url);\n\n // Create STOMP client\n stompClientRef.current = new Client({\n heartbeatIncoming: 5000,\n heartbeatOutgoing: 5000,\n ...connectConfig,\n webSocketFactory: () => socketRef.current,\n });\n // Connect to STOMP server\n stompClientRef.current.activate();\n\n // STOMP server connection established\n stompClientRef.current.onConnect = () => {\n setConnecting(false);\n isConnectedRef.current = true;\n onConnected?.();\n if (subscribeEndpoint) {\n stompClientRef.current?.subscribe(subscribeEndpoint, (response) => {\n if (parseMessageBody) {\n onMessage?.(parseMessageBody(response.body));\n } else {\n onMessage?.(response.body as M);\n }\n });\n }\n resolve();\n };\n stompClientRef.current.onStompError = (error) => {\n console.error('STOMP Error:', error);\n };\n stompClientRef.current.onWebSocketError = (error) => {\n console.error('WebSocket Error:', error);\n };\n if (socketRef.current) {\n socketRef.current.onerror = (error: unknown) => {\n console.error(error);\n };\n }\n\n stompClientRef.current.onWebSocketClose = (event) => {\n setConnecting(false);\n // Normal close\n if (event.type === 'close' && event.code === 1000) {\n return;\n }\n stompClientRef.current?.debug('StompClient closed');\n if (isConnectedRef.current) {\n isConnectedRef.current = false;\n onClose?.();\n notification.error({ message: undefined, description: t('hooks.useStompSocket.serverDisconnected') });\n } else {\n // Client connection failed\n notification.error({ message: t('hooks.useStompSocket.connectError') });\n }\n };\n if (socketRef.current) {\n socketRef.current.onclose = (event) => {\n setConnecting(false);\n isConnectedRef.current = false;\n stompClientRef.current?.debug('Socket closed');\n console.log('event', event);\n onClose?.();\n };\n }\n } catch (error: unknown) {\n console.error(error);\n // notification.error({ message: error?.message ?? JSON.stringify(error) });\n reject(error);\n }\n });\n refresh();\n await new Promise((resolve) => setTimeout(resolve));\n return promise;\n });\n const close = useRefFunction(() => {\n try {\n stompClientRef.current?.deactivate();\n socketRef.current?.close();\n isConnectedRef.current = false;\n setConnecting(false);\n } catch (error) {\n console.error(error);\n }\n });\n const send = useRefFunction((body: string) => {\n if (!sendEndpoint) {\n console.error('No publish endpoint defined, unable to send message');\n return;\n }\n stompClientRef.current?.publish({\n destination: sendEndpoint,\n body,\n });\n });\n return {\n connect,\n close,\n send,\n connecting,\n socket: socketRef.current,\n stompClient: stompClientRef.current,\n };\n}\n\nexport default useStompSocket;\n"],"mappings":"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"}
|