@nlabs/metropolisjs 0.1.2 → 0.2.0
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/.github/copilot-instructions.md +167 -0
- package/AGENTS.md +13 -0
- package/CHANGELOG.md +112 -0
- package/GRAPHQL_VALIDATION_RESULTS.md +158 -0
- package/PERMISSION_GRAPHQL_INTEGRATION.md +293 -0
- package/PERMISSION_IMPLEMENTATION_SUMMARY.md +243 -0
- package/README.md +1123 -112
- package/SIGNIN_GRAPHQL_VALIDATION.md +125 -0
- package/VAULT_GRAPHQL_API_FINDINGS.md +312 -0
- package/docs/ACTIONS.md +63 -0
- package/docs/COLLECTIONS.md +1038 -0
- package/docs/CONNECTIONS.md +1367 -0
- package/docs/CRUD_INTEGRATION.md +702 -0
- package/examples/connections-usage.tsx +909 -0
- package/examples/content-actions-usage.ts +144 -0
- package/examples/crud-usage.tsx +847 -0
- package/examples/extensibility-usage.tsx +889 -0
- package/examples/i18n-import-examples.ts +86 -0
- package/examples/i18n-namespace-usage.ts +118 -0
- package/examples/i18next-singleton-demo.ts +187 -0
- package/examples/permission-system-usage.tsx +415 -0
- package/examples/project-details.tsx +397 -0
- package/examples/shared-i18n-usage.tsx +203 -0
- package/examples/signup-error-handling.ts +100 -0
- package/examples/translation-types.ts +86 -0
- package/examples/translation-usage.tsx +336 -0
- package/index.js +1 -0
- package/jest.config.mjs +28 -0
- package/lex.config.mjs +11 -2
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
- package/lib/actions/appActions/appActions.d.ts +29 -0
- package/lib/actions/appActions/appActions.d.ts.map +1 -0
- package/lib/actions/appActions/appActions.js +159 -0
- package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
- package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
- package/lib/actions/connectionActions/connectionActions.js +131 -0
- package/lib/actions/contentActions/contentActions.d.ts +34 -0
- package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
- package/lib/actions/contentActions/contentActions.js +314 -0
- package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
- package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
- package/lib/actions/conversationActions/conversationActions.js +225 -0
- package/lib/actions/eventActions/eventActions.d.ts +27 -7
- package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
- package/lib/actions/eventActions/eventActions.js +436 -2
- package/lib/actions/groupActions/groupActions.d.ts +30 -0
- package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
- package/lib/actions/groupActions/groupActions.js +229 -0
- package/lib/actions/imageActions/imageActions.d.ts +16 -10
- package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
- package/lib/actions/imageActions/imageActions.js +593 -2
- package/lib/actions/index.d.ts +21 -9
- package/lib/actions/index.d.ts.map +1 -0
- package/lib/actions/index.js +22 -2
- package/lib/actions/locationActions/locationActions.d.ts +11 -9
- package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
- package/lib/actions/locationActions/locationActions.js +388 -2
- package/lib/actions/messageActions/messageActions.d.ts +16 -32
- package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
- package/lib/actions/messageActions/messageActions.js +235 -2
- package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
- package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
- package/lib/actions/permissionActions/permissionActions.js +330 -0
- package/lib/actions/personaActions/personaActions.d.ts +65 -0
- package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
- package/lib/actions/personaActions/personaActions.js +572 -0
- package/lib/actions/postActions/postActions.d.ts +12 -32
- package/lib/actions/postActions/postActions.d.ts.map +1 -0
- package/lib/actions/postActions/postActions.js +447 -2
- package/lib/actions/reactionActions/reactionActions.d.ts +13 -27
- package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
- package/lib/actions/reactionActions/reactionActions.js +413 -2
- package/lib/actions/sseActions/sseActions.d.ts +1 -0
- package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
- package/lib/actions/sseActions/sseActions.js +148 -2
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
- package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
- package/lib/actions/tagActions/tagActions.d.ts +13 -31
- package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
- package/lib/actions/tagActions/tagActions.js +347 -2
- package/lib/actions/translationActions/translationActions.d.ts +38 -0
- package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
- package/lib/actions/translationActions/translationActions.js +189 -0
- package/lib/actions/userActions/userActions.d.ts +42 -95
- package/lib/actions/userActions/userActions.d.ts.map +1 -0
- package/lib/actions/userActions/userActions.js +844 -2
- package/lib/actions/videoActions/videoActions.d.ts +41 -0
- package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
- package/lib/actions/videoActions/videoActions.js +532 -0
- package/lib/actions/websocketActions/websocketActions.d.ts +20 -21
- package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
- package/lib/actions/websocketActions/websocketActions.js +377 -2
- package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
- package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
- package/lib/adapters/appAdapter/appAdapter.js +90 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +3 -2
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -2
- package/lib/adapters/contentAdapter/contentAdapter.d.ts +3 -2
- package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
- package/lib/adapters/contentAdapter/contentAdapter.js +107 -2
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +3 -2
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -2
- package/lib/adapters/eventAdapter/eventAdapter.d.ts +5 -2
- package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
- package/lib/adapters/eventAdapter/eventAdapter.js +162 -2
- package/lib/adapters/fileAdapter/fileAdapter.d.ts +3 -2
- package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
- package/lib/adapters/fileAdapter/fileAdapter.js +118 -2
- package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
- package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
- package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
- package/lib/adapters/imageAdapter/imageAdapter.d.ts +9 -2
- package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
- package/lib/adapters/imageAdapter/imageAdapter.js +134 -2
- package/lib/adapters/index.d.ts +34 -16
- package/lib/adapters/index.d.ts.map +1 -0
- package/lib/adapters/index.js +19 -2
- package/lib/adapters/locationAdapter/locationAdapter.d.ts +3 -2
- package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
- package/lib/adapters/locationAdapter/locationAdapter.js +95 -2
- package/lib/adapters/messageAdapter/messageAdapter.d.ts +23 -19
- package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
- package/lib/adapters/messageAdapter/messageAdapter.js +82 -2
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
- package/lib/adapters/personaAdapter/personaAdapter.d.ts +28 -2
- package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
- package/lib/adapters/personaAdapter/personaAdapter.js +161 -2
- package/lib/adapters/postAdapter/postAdapter.d.ts +3 -2
- package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
- package/lib/adapters/postAdapter/postAdapter.js +115 -2
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +5 -2
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -2
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +3 -2
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -2
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +3 -2
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -2
- package/lib/adapters/tagAdapter/tagAdapter.d.ts +3 -2
- package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
- package/lib/adapters/tagAdapter/tagAdapter.js +98 -2
- package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
- package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
- package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
- package/lib/adapters/userAdapter/userAdapter.d.ts +18 -6
- package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
- package/lib/adapters/userAdapter/userAdapter.js +302 -2
- package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
- package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
- package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
- package/lib/config/index.d.ts +19 -6
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +97 -2
- package/lib/constants/Collections.d.ts +44 -0
- package/lib/constants/Collections.d.ts.map +1 -0
- package/lib/constants/Collections.js +40 -0
- package/lib/constants/MetropolisConstants.d.ts +1 -0
- package/lib/constants/MetropolisConstants.d.ts.map +1 -0
- package/lib/constants/MetropolisConstants.js +15 -2
- package/lib/graphql/message.d.ts +1 -0
- package/lib/graphql/message.d.ts.map +1 -0
- package/lib/graphql/message.js +6 -4
- package/lib/graphql/notification.d.ts +1 -0
- package/lib/graphql/notification.d.ts.map +1 -0
- package/lib/graphql/notification.js +6 -4
- package/lib/graphql/session.d.ts +1 -0
- package/lib/graphql/session.d.ts.map +1 -0
- package/lib/graphql/session.js +4 -3
- package/lib/index.d.ts +45 -22
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +248 -2
- package/lib/stores/appStore.d.ts +1 -0
- package/lib/stores/appStore.d.ts.map +1 -0
- package/lib/stores/appStore.js +23 -2
- package/lib/stores/contentStore.d.ts +36 -0
- package/lib/stores/contentStore.d.ts.map +1 -0
- package/lib/stores/contentStore.js +139 -0
- package/lib/stores/conversationStore.d.ts +38 -0
- package/lib/stores/conversationStore.d.ts.map +1 -0
- package/lib/stores/conversationStore.js +117 -0
- package/lib/stores/eventStore.d.ts +4 -1
- package/lib/stores/eventStore.d.ts.map +1 -0
- package/lib/stores/eventStore.js +47 -2
- package/lib/stores/groupStore.d.ts +37 -0
- package/lib/stores/groupStore.d.ts.map +1 -0
- package/lib/stores/groupStore.js +68 -0
- package/lib/stores/imageStore.d.ts +6 -1
- package/lib/stores/imageStore.d.ts.map +1 -0
- package/lib/stores/imageStore.js +53 -2
- package/lib/stores/index.d.ts +20 -11
- package/lib/stores/index.d.ts.map +1 -0
- package/lib/stores/index.js +24 -2
- package/lib/stores/locationStore.d.ts +2 -1
- package/lib/stores/locationStore.d.ts.map +1 -0
- package/lib/stores/locationStore.js +42 -2
- package/lib/stores/messageStore.d.ts +19 -4
- package/lib/stores/messageStore.d.ts.map +1 -0
- package/lib/stores/messageStore.js +137 -2
- package/lib/stores/notificationStore.d.ts +33 -0
- package/lib/stores/notificationStore.d.ts.map +1 -0
- package/lib/stores/notificationStore.js +55 -0
- package/lib/stores/permissionStore.d.ts +37 -0
- package/lib/stores/permissionStore.d.ts.map +1 -0
- package/lib/stores/permissionStore.js +117 -0
- package/lib/stores/personaStore.d.ts +26 -0
- package/lib/stores/personaStore.d.ts.map +1 -0
- package/lib/stores/personaStore.js +118 -0
- package/lib/stores/postStore.d.ts +2 -1
- package/lib/stores/postStore.d.ts.map +1 -0
- package/lib/stores/postStore.js +53 -2
- package/lib/stores/reactionStore.d.ts +1 -0
- package/lib/stores/reactionStore.d.ts.map +1 -0
- package/lib/stores/reactionStore.js +28 -2
- package/lib/stores/subscriptionStore.d.ts +41 -0
- package/lib/stores/subscriptionStore.d.ts.map +1 -0
- package/lib/stores/subscriptionStore.js +85 -0
- package/lib/stores/tagStore.d.ts +8 -5
- package/lib/stores/tagStore.d.ts.map +1 -0
- package/lib/stores/tagStore.js +87 -2
- package/lib/stores/translationStore.d.ts +42 -0
- package/lib/stores/translationStore.d.ts.map +1 -0
- package/lib/stores/translationStore.js +122 -0
- package/lib/stores/userStore.d.ts +5 -4
- package/lib/stores/userStore.d.ts.map +1 -0
- package/lib/stores/userStore.js +319 -2
- package/lib/stores/videoStore.d.ts +39 -0
- package/lib/stores/videoStore.d.ts.map +1 -0
- package/lib/stores/videoStore.js +132 -0
- package/lib/stores/websocketStore.d.ts +1 -0
- package/lib/stores/websocketStore.d.ts.map +1 -0
- package/lib/stores/websocketStore.js +51 -2
- package/lib/types/apps.types.d.ts +17 -0
- package/lib/types/apps.types.d.ts.map +1 -0
- package/lib/types/apps.types.js +6 -0
- package/lib/types/common.types.d.ts +31 -0
- package/lib/types/common.types.d.ts.map +1 -0
- package/lib/types/common.types.js +6 -0
- package/lib/types/conversations.types.d.ts +17 -0
- package/lib/types/conversations.types.d.ts.map +1 -0
- package/lib/types/conversations.types.js +6 -0
- package/lib/types/edges.types.d.ts +38 -0
- package/lib/types/edges.types.d.ts.map +1 -0
- package/lib/types/edges.types.js +6 -0
- package/lib/types/groups.types.d.ts +19 -0
- package/lib/types/groups.types.d.ts.map +1 -0
- package/lib/types/groups.types.js +6 -0
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +12 -0
- package/lib/types/subscriptions.types.d.ts +32 -0
- package/lib/types/subscriptions.types.d.ts.map +1 -0
- package/lib/types/subscriptions.types.js +6 -0
- package/lib/types/videos.types.d.ts +61 -0
- package/lib/types/videos.types.d.ts.map +1 -0
- package/lib/types/videos.types.js +6 -0
- package/lib/utils/MetropolisProvider.d.ts +39 -15
- package/lib/utils/MetropolisProvider.d.ts.map +1 -0
- package/lib/utils/MetropolisProvider.js +31 -2
- package/lib/utils/actionFactory.d.ts +21 -19
- package/lib/utils/actionFactory.d.ts.map +1 -0
- package/lib/utils/actionFactory.js +95 -2
- package/lib/utils/api.d.ts +5 -4
- package/lib/utils/api.d.ts.map +1 -0
- package/lib/utils/api.js +252 -6
- package/lib/utils/app.d.ts +1 -0
- package/lib/utils/app.d.ts.map +1 -0
- package/lib/utils/app.js +15 -2
- package/lib/utils/baseActionFactory.d.ts +5 -23
- package/lib/utils/baseActionFactory.d.ts.map +1 -0
- package/lib/utils/baseActionFactory.js +72 -2
- package/lib/utils/configUtils.d.ts +11 -0
- package/lib/utils/configUtils.d.ts.map +1 -0
- package/lib/utils/configUtils.js +20 -0
- package/lib/utils/dateUtils.d.ts +1 -0
- package/lib/utils/dateUtils.d.ts.map +1 -0
- package/lib/utils/dateUtils.js +11 -2
- package/lib/utils/file.d.ts +3 -1
- package/lib/utils/file.d.ts.map +1 -0
- package/lib/utils/file.js +156 -2
- package/lib/utils/i18n.d.ts +7 -0
- package/lib/utils/i18n.d.ts.map +1 -0
- package/lib/utils/i18n.js +96 -0
- package/lib/utils/index.d.ts +20 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +26 -0
- package/lib/utils/location.d.ts +4 -3
- package/lib/utils/location.d.ts.map +1 -0
- package/lib/utils/location.js +82 -2
- package/lib/utils/permissionUtils.d.ts +22 -0
- package/lib/utils/permissionUtils.d.ts.map +1 -0
- package/lib/utils/permissionUtils.js +72 -0
- package/lib/utils/requestCache.d.ts +8 -0
- package/lib/utils/requestCache.d.ts.map +1 -0
- package/lib/utils/requestCache.js +53 -0
- package/lib/utils/session.d.ts +14 -0
- package/lib/utils/session.d.ts.map +1 -0
- package/lib/utils/session.js +107 -0
- package/lib/utils/useConversationTyping.d.ts +26 -0
- package/lib/utils/useConversationTyping.d.ts.map +1 -0
- package/lib/utils/useConversationTyping.js +117 -0
- package/lib/utils/useMetropolis.d.ts +67 -12
- package/lib/utils/useMetropolis.d.ts.map +1 -0
- package/lib/utils/useMetropolis.js +311 -2
- package/lib/utils/useTranslations.d.ts +16 -0
- package/lib/utils/useTranslations.d.ts.map +1 -0
- package/lib/utils/useTranslations.js +105 -0
- package/lib/utils/validatorFactory.d.ts +3 -2
- package/lib/utils/validatorFactory.d.ts.map +1 -0
- package/lib/utils/validatorFactory.js +95 -2
- package/package.json +58 -17
- package/temp_signin.ts +73 -0
- package/lib/actions/profileActions/profileActions.d.ts +0 -50
- package/lib/actions/profileActions/profileActions.js +0 -2
- package/lib/adapters/profileAdapter/profileAdapter.d.ts +0 -32
- package/lib/adapters/profileAdapter/profileAdapter.js +0 -2
- package/lib/stores/profileStore.d.ts +0 -24
- package/lib/stores/profileStore.js +0 -2
- /package/{FACTORY_PATTERN_GUIDE.md → factoryPatternGuide.md} +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
import { useWebsocketActions } from './useMetropolis.js';
|
|
3
|
+
const DEFAULT_DEBOUNCE_MS = 300;
|
|
4
|
+
const DEFAULT_IDLE_MS = 60000;
|
|
5
|
+
export const useConversationTyping = ({ debounceMs = DEFAULT_DEBOUNCE_MS, idleMs = DEFAULT_IDLE_MS } = {})=>{
|
|
6
|
+
const websocketActions = useWebsocketActions();
|
|
7
|
+
const typingTimeoutRef = useRef(null);
|
|
8
|
+
const typingDebounceRef = useRef(null);
|
|
9
|
+
const typingConversationIdRef = useRef('');
|
|
10
|
+
const typingOptionsRef = useRef({});
|
|
11
|
+
const typingStateRef = useRef(false);
|
|
12
|
+
const clearTypingTimer = useCallback(()=>{
|
|
13
|
+
if (typingTimeoutRef.current) {
|
|
14
|
+
clearTimeout(typingTimeoutRef.current);
|
|
15
|
+
typingTimeoutRef.current = null;
|
|
16
|
+
}
|
|
17
|
+
}, []);
|
|
18
|
+
const clearTypingDebounce = useCallback(()=>{
|
|
19
|
+
if (typingDebounceRef.current) {
|
|
20
|
+
clearTimeout(typingDebounceRef.current);
|
|
21
|
+
typingDebounceRef.current = null;
|
|
22
|
+
}
|
|
23
|
+
}, []);
|
|
24
|
+
const updateTypingState = useCallback((conversationId, isTyping, options = {})=>{
|
|
25
|
+
const previousConversationId = typingConversationIdRef.current;
|
|
26
|
+
const typingOptions = Object.keys(options).length ? options : typingOptionsRef.current;
|
|
27
|
+
typingOptionsRef.current = typingOptions;
|
|
28
|
+
if (previousConversationId && previousConversationId !== conversationId && typingStateRef.current) {
|
|
29
|
+
websocketActions.sendTyping(previousConversationId, false, typingOptions);
|
|
30
|
+
typingStateRef.current = false;
|
|
31
|
+
}
|
|
32
|
+
if (!conversationId) {
|
|
33
|
+
typingConversationIdRef.current = '';
|
|
34
|
+
typingStateRef.current = false;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (previousConversationId === conversationId && typingStateRef.current === isTyping) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
websocketActions.sendTyping(conversationId, isTyping, typingOptions);
|
|
41
|
+
typingConversationIdRef.current = conversationId;
|
|
42
|
+
typingStateRef.current = isTyping;
|
|
43
|
+
}, [
|
|
44
|
+
websocketActions
|
|
45
|
+
]);
|
|
46
|
+
const syncDraft = useCallback((conversationId, draft, options = {})=>{
|
|
47
|
+
typingOptionsRef.current = options;
|
|
48
|
+
clearTypingDebounce();
|
|
49
|
+
clearTypingTimer();
|
|
50
|
+
if (!conversationId) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (draft.trim()) {
|
|
54
|
+
if (!typingStateRef.current || typingConversationIdRef.current !== conversationId) {
|
|
55
|
+
typingDebounceRef.current = setTimeout(()=>{
|
|
56
|
+
updateTypingState(conversationId, true, options);
|
|
57
|
+
typingDebounceRef.current = null;
|
|
58
|
+
}, debounceMs);
|
|
59
|
+
}
|
|
60
|
+
typingTimeoutRef.current = setTimeout(()=>{
|
|
61
|
+
updateTypingState(conversationId, false, options);
|
|
62
|
+
}, idleMs);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
updateTypingState(conversationId, false, options);
|
|
66
|
+
}, [
|
|
67
|
+
clearTypingDebounce,
|
|
68
|
+
clearTypingTimer,
|
|
69
|
+
debounceMs,
|
|
70
|
+
idleMs,
|
|
71
|
+
updateTypingState
|
|
72
|
+
]);
|
|
73
|
+
const setConversation = useCallback((conversationId, options = {})=>{
|
|
74
|
+
clearTypingDebounce();
|
|
75
|
+
clearTypingTimer();
|
|
76
|
+
typingOptionsRef.current = options;
|
|
77
|
+
if (typingConversationIdRef.current && typingConversationIdRef.current !== conversationId && typingStateRef.current) {
|
|
78
|
+
websocketActions.sendTyping(typingConversationIdRef.current, false, typingOptionsRef.current);
|
|
79
|
+
typingStateRef.current = false;
|
|
80
|
+
}
|
|
81
|
+
typingConversationIdRef.current = conversationId;
|
|
82
|
+
if (!conversationId) {
|
|
83
|
+
typingStateRef.current = false;
|
|
84
|
+
}
|
|
85
|
+
}, [
|
|
86
|
+
clearTypingDebounce,
|
|
87
|
+
clearTypingTimer,
|
|
88
|
+
websocketActions
|
|
89
|
+
]);
|
|
90
|
+
const stopTyping = useCallback((conversationId = typingConversationIdRef.current, options = {})=>{
|
|
91
|
+
clearTypingDebounce();
|
|
92
|
+
clearTypingTimer();
|
|
93
|
+
updateTypingState(conversationId, false, options);
|
|
94
|
+
}, [
|
|
95
|
+
clearTypingDebounce,
|
|
96
|
+
clearTypingTimer,
|
|
97
|
+
updateTypingState
|
|
98
|
+
]);
|
|
99
|
+
useEffect(()=>{
|
|
100
|
+
return ()=>{
|
|
101
|
+
clearTypingDebounce();
|
|
102
|
+
clearTypingTimer();
|
|
103
|
+
updateTypingState(typingConversationIdRef.current, false, typingOptionsRef.current);
|
|
104
|
+
};
|
|
105
|
+
}, [
|
|
106
|
+
clearTypingDebounce,
|
|
107
|
+
clearTypingTimer,
|
|
108
|
+
updateTypingState
|
|
109
|
+
]);
|
|
110
|
+
return {
|
|
111
|
+
setConversation,
|
|
112
|
+
stopTyping,
|
|
113
|
+
syncDraft
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvdXNlQ29udmVyc2F0aW9uVHlwaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7dXNlV2Vic29ja2V0QWN0aW9uc30gZnJvbSAnLi91c2VNZXRyb3BvbGlzLmpzJztcblxudHlwZSBUeXBpbmdVc2VyID0ge1xuICByZWFkb25seSBpbWFnZVVybD86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcGVyc29uYUlkPzogc3RyaW5nO1xuICByZWFkb25seSB0aHVtYlVybD86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcklkPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbnZlcnNhdGlvblR5cGluZ09wdGlvbnMgPSB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBlcnNvbmFJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcklkPzogc3RyaW5nO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcnM/OiBUeXBpbmdVc2VyW107XG59O1xuXG5leHBvcnQgdHlwZSBVc2VDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zID0ge1xuICByZWFkb25seSBkZWJvdW5jZU1zPzogbnVtYmVyO1xuICByZWFkb25seSBpZGxlTXM/OiBudW1iZXI7XG59O1xuXG5jb25zdCBERUZBVUxUX0RFQk9VTkNFX01TID0gMzAwO1xuY29uc3QgREVGQVVMVF9JRExFX01TID0gNjAwMDA7XG5cbmV4cG9ydCBjb25zdCB1c2VDb252ZXJzYXRpb25UeXBpbmcgPSAoe1xuICBkZWJvdW5jZU1zID0gREVGQVVMVF9ERUJPVU5DRV9NUyxcbiAgaWRsZU1zID0gREVGQVVMVF9JRExFX01TXG59OiBVc2VDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qgd2Vic29ja2V0QWN0aW9ucyA9IHVzZVdlYnNvY2tldEFjdGlvbnMoKTtcbiAgY29uc3QgdHlwaW5nVGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpO1xuICBjb25zdCB0eXBpbmdEZWJvdW5jZVJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpO1xuICBjb25zdCB0eXBpbmdDb252ZXJzYXRpb25JZFJlZiA9IHVzZVJlZignJyk7XG4gIGNvbnN0IHR5cGluZ09wdGlvbnNSZWYgPSB1c2VSZWY8Q29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucz4oe30pO1xuICBjb25zdCB0eXBpbmdTdGF0ZVJlZiA9IHVzZVJlZihmYWxzZSk7XG5cbiAgY29uc3QgY2xlYXJUeXBpbmdUaW1lciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZih0eXBpbmdUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0eXBpbmdUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgdHlwaW5nVGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBjb25zdCBjbGVhclR5cGluZ0RlYm91bmNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmKHR5cGluZ0RlYm91bmNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0eXBpbmdEZWJvdW5jZVJlZi5jdXJyZW50KTtcbiAgICAgIHR5cGluZ0RlYm91bmNlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IHVwZGF0ZVR5cGluZ1N0YXRlID0gdXNlQ2FsbGJhY2soKGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIGlzVHlwaW5nOiBib29sZWFuLCBvcHRpb25zOiBDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCBwcmV2aW91c0NvbnZlcnNhdGlvbklkID0gdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudDtcbiAgICBjb25zdCB0eXBpbmdPcHRpb25zID0gT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID8gb3B0aW9ucyA6IHR5cGluZ09wdGlvbnNSZWYuY3VycmVudDtcbiAgICB0eXBpbmdPcHRpb25zUmVmLmN1cnJlbnQgPSB0eXBpbmdPcHRpb25zO1xuXG4gICAgaWYocHJldmlvdXNDb252ZXJzYXRpb25JZCAmJiBwcmV2aW91c0NvbnZlcnNhdGlvbklkICE9PSBjb252ZXJzYXRpb25JZCAmJiB0eXBpbmdTdGF0ZVJlZi5jdXJyZW50KSB7XG4gICAgICB3ZWJzb2NrZXRBY3Rpb25zLnNlbmRUeXBpbmcocHJldmlvdXNDb252ZXJzYXRpb25JZCwgZmFsc2UsIHR5cGluZ09wdGlvbnMpO1xuICAgICAgdHlwaW5nU3RhdGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmKCFjb252ZXJzYXRpb25JZCkge1xuICAgICAgdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudCA9ICcnO1xuICAgICAgdHlwaW5nU3RhdGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKHByZXZpb3VzQ29udmVyc2F0aW9uSWQgPT09IGNvbnZlcnNhdGlvbklkICYmIHR5cGluZ1N0YXRlUmVmLmN1cnJlbnQgPT09IGlzVHlwaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2Vic29ja2V0QWN0aW9ucy5zZW5kVHlwaW5nKGNvbnZlcnNhdGlvbklkLCBpc1R5cGluZywgdHlwaW5nT3B0aW9ucyk7XG4gICAgdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudCA9IGNvbnZlcnNhdGlvbklkO1xuICAgIHR5cGluZ1N0YXRlUmVmLmN1cnJlbnQgPSBpc1R5cGluZztcbiAgfSwgW3dlYnNvY2tldEFjdGlvbnNdKTtcblxuICBjb25zdCBzeW5jRHJhZnQgPSB1c2VDYWxsYmFjaygoY29udmVyc2F0aW9uSWQ6IHN0cmluZywgZHJhZnQ6IHN0cmluZywgb3B0aW9uczogQ29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgdHlwaW5nT3B0aW9uc1JlZi5jdXJyZW50ID0gb3B0aW9ucztcbiAgICBjbGVhclR5cGluZ0RlYm91bmNlKCk7XG4gICAgY2xlYXJUeXBpbmdUaW1lcigpO1xuXG4gICAgaWYoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYoZHJhZnQudHJpbSgpKSB7XG4gICAgICBpZighdHlwaW5nU3RhdGVSZWYuY3VycmVudCB8fCB0eXBpbmdDb252ZXJzYXRpb25JZFJlZi5jdXJyZW50ICE9PSBjb252ZXJzYXRpb25JZCkge1xuICAgICAgICB0eXBpbmdEZWJvdW5jZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlVHlwaW5nU3RhdGUoY29udmVyc2F0aW9uSWQsIHRydWUsIG9wdGlvbnMpO1xuICAgICAgICAgIHR5cGluZ0RlYm91bmNlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9LCBkZWJvdW5jZU1zKTtcbiAgICAgIH1cblxuICAgICAgdHlwaW5nVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVR5cGluZ1N0YXRlKGNvbnZlcnNhdGlvbklkLCBmYWxzZSwgb3B0aW9ucyk7XG4gICAgICB9LCBpZGxlTXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVR5cGluZ1N0YXRlKGNvbnZlcnNhdGlvbklkLCBmYWxzZSwgb3B0aW9ucyk7XG4gIH0sIFtjbGVhclR5cGluZ0RlYm91bmNlLCBjbGVhclR5cGluZ1RpbWVyLCBkZWJvdW5jZU1zLCBpZGxlTXMsIHVwZGF0ZVR5cGluZ1N0YXRlXSk7XG5cbiAgY29uc3Qgc2V0Q29udmVyc2F0aW9uID0gdXNlQ2FsbGJhY2soKGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIG9wdGlvbnM6IENvbnZlcnNhdGlvblR5cGluZ09wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNsZWFyVHlwaW5nRGVib3VuY2UoKTtcbiAgICBjbGVhclR5cGluZ1RpbWVyKCk7XG4gICAgdHlwaW5nT3B0aW9uc1JlZi5jdXJyZW50ID0gb3B0aW9ucztcblxuICAgIGlmKHR5cGluZ0NvbnZlcnNhdGlvbklkUmVmLmN1cnJlbnQgJiYgdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudCAhPT0gY29udmVyc2F0aW9uSWQgJiYgdHlwaW5nU3RhdGVSZWYuY3VycmVudCkge1xuICAgICAgd2Vic29ja2V0QWN0aW9ucy5zZW5kVHlwaW5nKHR5cGluZ0NvbnZlcnNhdGlvbklkUmVmLmN1cnJlbnQsIGZhbHNlLCB0eXBpbmdPcHRpb25zUmVmLmN1cnJlbnQpO1xuICAgICAgdHlwaW5nU3RhdGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHR5cGluZ0NvbnZlcnNhdGlvbklkUmVmLmN1cnJlbnQgPSBjb252ZXJzYXRpb25JZDtcblxuICAgIGlmKCFjb252ZXJzYXRpb25JZCkge1xuICAgICAgdHlwaW5nU3RhdGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW2NsZWFyVHlwaW5nRGVib3VuY2UsIGNsZWFyVHlwaW5nVGltZXIsIHdlYnNvY2tldEFjdGlvbnNdKTtcblxuICBjb25zdCBzdG9wVHlwaW5nID0gdXNlQ2FsbGJhY2soKGNvbnZlcnNhdGlvbklkID0gdHlwaW5nQ29udmVyc2F0aW9uSWRSZWYuY3VycmVudCwgb3B0aW9uczogQ29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY2xlYXJUeXBpbmdEZWJvdW5jZSgpO1xuICAgIGNsZWFyVHlwaW5nVGltZXIoKTtcbiAgICB1cGRhdGVUeXBpbmdTdGF0ZShjb252ZXJzYXRpb25JZCwgZmFsc2UsIG9wdGlvbnMpO1xuICB9LCBbY2xlYXJUeXBpbmdEZWJvdW5jZSwgY2xlYXJUeXBpbmdUaW1lciwgdXBkYXRlVHlwaW5nU3RhdGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclR5cGluZ0RlYm91bmNlKCk7XG4gICAgICBjbGVhclR5cGluZ1RpbWVyKCk7XG4gICAgICB1cGRhdGVUeXBpbmdTdGF0ZSh0eXBpbmdDb252ZXJzYXRpb25JZFJlZi5jdXJyZW50LCBmYWxzZSwgdHlwaW5nT3B0aW9uc1JlZi5jdXJyZW50KTtcbiAgICB9O1xuICB9LCBbY2xlYXJUeXBpbmdEZWJvdW5jZSwgY2xlYXJUeXBpbmdUaW1lciwgdXBkYXRlVHlwaW5nU3RhdGVdKTtcblxuICByZXR1cm4ge1xuICAgIHNldENvbnZlcnNhdGlvbixcbiAgICBzdG9wVHlwaW5nLFxuICAgIHN5bmNEcmFmdFxuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVdlYnNvY2tldEFjdGlvbnMiLCJERUZBVUxUX0RFQk9VTkNFX01TIiwiREVGQVVMVF9JRExFX01TIiwidXNlQ29udmVyc2F0aW9uVHlwaW5nIiwiZGVib3VuY2VNcyIsImlkbGVNcyIsIndlYnNvY2tldEFjdGlvbnMiLCJ0eXBpbmdUaW1lb3V0UmVmIiwidHlwaW5nRGVib3VuY2VSZWYiLCJ0eXBpbmdDb252ZXJzYXRpb25JZFJlZiIsInR5cGluZ09wdGlvbnNSZWYiLCJ0eXBpbmdTdGF0ZVJlZiIsImNsZWFyVHlwaW5nVGltZXIiLCJjdXJyZW50IiwiY2xlYXJUaW1lb3V0IiwiY2xlYXJUeXBpbmdEZWJvdW5jZSIsInVwZGF0ZVR5cGluZ1N0YXRlIiwiY29udmVyc2F0aW9uSWQiLCJpc1R5cGluZyIsIm9wdGlvbnMiLCJwcmV2aW91c0NvbnZlcnNhdGlvbklkIiwidHlwaW5nT3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJzZW5kVHlwaW5nIiwic3luY0RyYWZ0IiwiZHJhZnQiLCJ0cmltIiwic2V0VGltZW91dCIsInNldENvbnZlcnNhdGlvbiIsInN0b3BUeXBpbmciXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxNQUFNLFFBQU8sUUFBUTtBQUVyRCxTQUFRQyxtQkFBbUIsUUFBTyxxQkFBcUI7QUF3QnZELE1BQU1DLHNCQUFzQjtBQUM1QixNQUFNQyxrQkFBa0I7QUFFeEIsT0FBTyxNQUFNQyx3QkFBd0IsQ0FBQyxFQUNwQ0MsYUFBYUgsbUJBQW1CLEVBQ2hDSSxTQUFTSCxlQUFlLEVBQ0ssR0FBRyxDQUFDLENBQUM7SUFDbEMsTUFBTUksbUJBQW1CTjtJQUN6QixNQUFNTyxtQkFBbUJSLE9BQTZDO0lBQ3RFLE1BQU1TLG9CQUFvQlQsT0FBNkM7SUFDdkUsTUFBTVUsMEJBQTBCVixPQUFPO0lBQ3ZDLE1BQU1XLG1CQUFtQlgsT0FBa0MsQ0FBQztJQUM1RCxNQUFNWSxpQkFBaUJaLE9BQU87SUFFOUIsTUFBTWEsbUJBQW1CZixZQUFZO1FBQ25DLElBQUdVLGlCQUFpQk0sT0FBTyxFQUFFO1lBQzNCQyxhQUFhUCxpQkFBaUJNLE9BQU87WUFDckNOLGlCQUFpQk0sT0FBTyxHQUFHO1FBQzdCO0lBQ0YsR0FBRyxFQUFFO0lBRUwsTUFBTUUsc0JBQXNCbEIsWUFBWTtRQUN0QyxJQUFHVyxrQkFBa0JLLE9BQU8sRUFBRTtZQUM1QkMsYUFBYU4sa0JBQWtCSyxPQUFPO1lBQ3RDTCxrQkFBa0JLLE9BQU8sR0FBRztRQUM5QjtJQUNGLEdBQUcsRUFBRTtJQUVMLE1BQU1HLG9CQUFvQm5CLFlBQVksQ0FBQ29CLGdCQUF3QkMsVUFBbUJDLFVBQXFDLENBQUMsQ0FBQztRQUN2SCxNQUFNQyx5QkFBeUJYLHdCQUF3QkksT0FBTztRQUM5RCxNQUFNUSxnQkFBZ0JDLE9BQU9DLElBQUksQ0FBQ0osU0FBU0ssTUFBTSxHQUFHTCxVQUFV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
|
|
@@ -1,12 +1,67 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
|
+
import type { MetropolisEnvironmentConfiguration } from '../config/index.js';
|
|
3
|
+
import type { ActionType } from '../utils/actionFactory.js';
|
|
4
|
+
/**
|
|
5
|
+
* Main hook to access Metropolis actions.
|
|
6
|
+
*
|
|
7
|
+
* @param actionTypes - Optional array of action types to create. If not provided, creates all actions.
|
|
8
|
+
* @returns Object containing the requested actions
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* // Get all actions (default behavior)
|
|
13
|
+
* const {userActions, postActions} = useMetropolis();
|
|
14
|
+
*
|
|
15
|
+
* // Get only specific actions (more performant)
|
|
16
|
+
* const {userActions} = useMetropolis(['user']);
|
|
17
|
+
* const {userActions, postActions} = useMetropolis(['user', 'post']);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const useMetropolis: <T extends ActionType[] = ActionType[]>(actionTypes?: T) => Record<string, any>;
|
|
21
|
+
/**
|
|
22
|
+
* Hook to access the Metropolis configuration from context.
|
|
23
|
+
*
|
|
24
|
+
* @returns The resolved environment-specific configuration
|
|
25
|
+
* @throws Error if used outside of Metropolis component
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* const config = useMetropolisConfig();
|
|
30
|
+
* const apiUrl = config.app?.api?.url;
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare const useMetropolisConfig: () => MetropolisEnvironmentConfiguration;
|
|
34
|
+
/**
|
|
35
|
+
* Hook to access the Flux framework instance from context.
|
|
36
|
+
*
|
|
37
|
+
* @returns The Flux framework instance
|
|
38
|
+
* @throws Error if used outside of Metropolis component and no Flux available
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```tsx
|
|
42
|
+
* const flux = useMetropolisFlux();
|
|
43
|
+
* const state = flux.getState('user.session');
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare const useMetropolisFlux: () => FluxFramework;
|
|
47
|
+
/**
|
|
48
|
+
* Specialized hooks for individual action types.
|
|
49
|
+
* These hooks only create the specific action type, improving performance.
|
|
50
|
+
*/
|
|
51
|
+
export declare const useContentActions: () => any;
|
|
52
|
+
export declare const useEventActions: () => any;
|
|
53
|
+
export declare const useGroupActions: () => any;
|
|
54
|
+
export declare const useImageActions: () => any;
|
|
55
|
+
export declare const useLocationActions: () => any;
|
|
56
|
+
export declare const useMessageActions: () => any;
|
|
57
|
+
export declare const useSubscriptionActions: () => any;
|
|
58
|
+
export declare const usePermissionActions: () => any;
|
|
59
|
+
export declare const usePostActions: () => any;
|
|
60
|
+
export declare const usePersonaActions: () => any;
|
|
61
|
+
export declare const useReactionActions: () => any;
|
|
62
|
+
export declare const useTagActions: () => any;
|
|
63
|
+
export declare const useVideoActions: () => any;
|
|
64
|
+
export declare const useTranslationActions: () => any;
|
|
65
|
+
export declare const useUserActions: () => any;
|
|
66
|
+
export declare const useWebsocketActions: () => any;
|
|
67
|
+
//# sourceMappingURL=useMetropolis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMetropolis.d.ts","sourceRoot":"","sources":["../../src/utils/useMetropolis.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAC,kCAAkC,EAAC,MAAM,oBAAoB,CAAC;AAI3E,OAAO,KAAK,EAAgB,UAAU,EAAC,MAAM,2BAA2B,CAAC;AAmHzE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,EACjE,cAAc,CAAC,wBA0BhB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,QAAO,kCAWtC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,QAAO,aAMpC,CAAC;AAEF;;;GAGG;AAEH,eAAO,MAAM,iBAAiB,WAG7B,CAAC;AAEF,eAAO,MAAM,eAAe,WAG3B,CAAC;AAEF,eAAO,MAAM,eAAe,WAG3B,CAAC;AAEF,eAAO,MAAM,eAAe,WAG3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAG9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAG7B,CAAC;AAEF,eAAO,MAAM,sBAAsB,WAGlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,WAGhC,CAAC;AAEF,eAAO,MAAM,cAAc,WAG1B,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAG7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,WAG9B,CAAC;AAEF,eAAO,MAAM,aAAa,WAGzB,CAAC;AAEF,eAAO,MAAM,eAAe,WAG3B,CAAC;AAEF,eAAO,MAAM,qBAAqB,WAGjC,CAAC;AAEF,eAAO,MAAM,cAAc,WAG1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,WAG/B,CAAC"}
|
|
@@ -1,2 +1,311 @@
|
|
|
1
|
-
import{useFlux
|
|
2
|
-
|
|
1
|
+
import { useFlux } from '@nlabs/arkhamjs-utils-react';
|
|
2
|
+
import { useContext, useMemo } from 'react';
|
|
3
|
+
import { createActions, createAllActions } from '../utils/actionFactory.js';
|
|
4
|
+
import { MetropolisContext } from './MetropolisProvider.js';
|
|
5
|
+
/**
|
|
6
|
+
* Builds action options from adapters in a type-safe way.
|
|
7
|
+
*/ const buildActionOptions = (adapters)=>{
|
|
8
|
+
if (!adapters) {
|
|
9
|
+
return {};
|
|
10
|
+
}
|
|
11
|
+
const options = {};
|
|
12
|
+
if (adapters.Content) {
|
|
13
|
+
options.content = {
|
|
14
|
+
contentAdapter: adapters.Content
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (adapters.Event) {
|
|
18
|
+
options.event = {
|
|
19
|
+
eventAdapter: adapters.Event
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (adapters.Image) {
|
|
23
|
+
options.image = {
|
|
24
|
+
imageAdapter: adapters.Image
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (adapters.Location) {
|
|
28
|
+
options.location = {
|
|
29
|
+
locationAdapter: adapters.Location
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (adapters.Message) {
|
|
33
|
+
options.message = {
|
|
34
|
+
messageAdapter: adapters.Message
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (adapters.Permission) {
|
|
38
|
+
options.permission = {
|
|
39
|
+
permissionAdapter: adapters.Permission
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (adapters.Post) {
|
|
43
|
+
options.post = {
|
|
44
|
+
postAdapter: adapters.Post
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (adapters.Persona) {
|
|
48
|
+
options.persona = {
|
|
49
|
+
personaAdapter: adapters.Persona
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (adapters.Reaction) {
|
|
53
|
+
options.reaction = {
|
|
54
|
+
reactionAdapter: adapters.Reaction
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (adapters.Tag) {
|
|
58
|
+
options.tag = {
|
|
59
|
+
tagAdapter: adapters.Tag
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (adapters.Translation) {
|
|
63
|
+
options.translation = {
|
|
64
|
+
translationAdapter: adapters.Translation
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (adapters.User) {
|
|
68
|
+
options.user = {
|
|
69
|
+
userAdapter: adapters.User
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (adapters.Video) {
|
|
73
|
+
options.video = {
|
|
74
|
+
videoAdapter: adapters.Video
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return options;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Maps action type keys to their action names for return object.
|
|
81
|
+
*/ const mapActionsToReturnKeys = (actions)=>{
|
|
82
|
+
const mapped = {};
|
|
83
|
+
if (actions.content) {
|
|
84
|
+
mapped.contentActions = actions.content;
|
|
85
|
+
}
|
|
86
|
+
if (actions.event) {
|
|
87
|
+
mapped.eventActions = actions.event;
|
|
88
|
+
}
|
|
89
|
+
if (actions.group) {
|
|
90
|
+
mapped.groupActions = actions.group;
|
|
91
|
+
}
|
|
92
|
+
if (actions.image) {
|
|
93
|
+
mapped.imageActions = actions.image;
|
|
94
|
+
}
|
|
95
|
+
if (actions.location) {
|
|
96
|
+
mapped.locationActions = actions.location;
|
|
97
|
+
}
|
|
98
|
+
if (actions.message) {
|
|
99
|
+
mapped.messageActions = actions.message;
|
|
100
|
+
}
|
|
101
|
+
if (actions.permission) {
|
|
102
|
+
mapped.permissionActions = actions.permission;
|
|
103
|
+
}
|
|
104
|
+
if (actions.post) {
|
|
105
|
+
mapped.postActions = actions.post;
|
|
106
|
+
}
|
|
107
|
+
if (actions.persona) {
|
|
108
|
+
mapped.personaActions = actions.persona;
|
|
109
|
+
}
|
|
110
|
+
if (actions.reaction) {
|
|
111
|
+
mapped.reactionActions = actions.reaction;
|
|
112
|
+
}
|
|
113
|
+
if (actions.subscription) {
|
|
114
|
+
mapped.subscriptionActions = actions.subscription;
|
|
115
|
+
}
|
|
116
|
+
if (actions.tag) {
|
|
117
|
+
mapped.tagActions = actions.tag;
|
|
118
|
+
}
|
|
119
|
+
if (actions.translation) {
|
|
120
|
+
mapped.translationActions = actions.translation;
|
|
121
|
+
}
|
|
122
|
+
if (actions.user) {
|
|
123
|
+
mapped.userActions = actions.user;
|
|
124
|
+
}
|
|
125
|
+
if (actions.video) {
|
|
126
|
+
mapped.videoActions = actions.video;
|
|
127
|
+
}
|
|
128
|
+
if (actions.websocket) {
|
|
129
|
+
mapped.websocketActions = actions.websocket;
|
|
130
|
+
}
|
|
131
|
+
return mapped;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Main hook to access Metropolis actions.
|
|
135
|
+
*
|
|
136
|
+
* @param actionTypes - Optional array of action types to create. If not provided, creates all actions.
|
|
137
|
+
* @returns Object containing the requested actions
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```tsx
|
|
141
|
+
* // Get all actions (default behavior)
|
|
142
|
+
* const {userActions, postActions} = useMetropolis();
|
|
143
|
+
*
|
|
144
|
+
* // Get only specific actions (more performant)
|
|
145
|
+
* const {userActions} = useMetropolis(['user']);
|
|
146
|
+
* const {userActions, postActions} = useMetropolis(['user', 'post']);
|
|
147
|
+
* ```
|
|
148
|
+
*/ export const useMetropolis = (actionTypes)=>{
|
|
149
|
+
const context = useContext(MetropolisContext);
|
|
150
|
+
// Use flux from context if available, otherwise fall back to useFlux() for backward compatibility
|
|
151
|
+
const contextFlux = context?.flux;
|
|
152
|
+
const hookFlux = useFlux();
|
|
153
|
+
const flux = contextFlux || hookFlux;
|
|
154
|
+
const { adapters } = context;
|
|
155
|
+
const actionOptions = useMemo(()=>buildActionOptions(adapters), [
|
|
156
|
+
adapters
|
|
157
|
+
]);
|
|
158
|
+
return useMemo(()=>{
|
|
159
|
+
let actions;
|
|
160
|
+
if (actionTypes && actionTypes.length > 0) {
|
|
161
|
+
// Create only requested actions
|
|
162
|
+
actions = createActions(actionTypes, flux, actionOptions);
|
|
163
|
+
} else {
|
|
164
|
+
// Create all actions (default behavior for backward compatibility)
|
|
165
|
+
const allActions = createAllActions(flux, actionOptions);
|
|
166
|
+
actions = allActions;
|
|
167
|
+
}
|
|
168
|
+
// Map to return keys (contentActions, userActions, etc.)
|
|
169
|
+
return mapActionsToReturnKeys(actions);
|
|
170
|
+
}, [
|
|
171
|
+
flux,
|
|
172
|
+
actionOptions,
|
|
173
|
+
actionTypes?.join(',')
|
|
174
|
+
]);
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* Hook to access the Metropolis configuration from context.
|
|
178
|
+
*
|
|
179
|
+
* @returns The resolved environment-specific configuration
|
|
180
|
+
* @throws Error if used outside of Metropolis component
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```tsx
|
|
184
|
+
* const config = useMetropolisConfig();
|
|
185
|
+
* const apiUrl = config.app?.api?.url;
|
|
186
|
+
* ```
|
|
187
|
+
*/ export const useMetropolisConfig = ()=>{
|
|
188
|
+
const context = useContext(MetropolisContext);
|
|
189
|
+
if (!context?.config) {
|
|
190
|
+
throw new Error('useMetropolisConfig must be used within a Metropolis component. ' + 'Make sure your component is wrapped with <Metropolis> provider.');
|
|
191
|
+
}
|
|
192
|
+
return context.config;
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* Hook to access the Flux framework instance from context.
|
|
196
|
+
*
|
|
197
|
+
* @returns The Flux framework instance
|
|
198
|
+
* @throws Error if used outside of Metropolis component and no Flux available
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```tsx
|
|
202
|
+
* const flux = useMetropolisFlux();
|
|
203
|
+
* const state = flux.getState('user.session');
|
|
204
|
+
* ```
|
|
205
|
+
*/ export const useMetropolisFlux = ()=>{
|
|
206
|
+
const context = useContext(MetropolisContext);
|
|
207
|
+
const hookFlux = useFlux();
|
|
208
|
+
// Use flux from context if available, otherwise fall back to useFlux() for backward compatibility
|
|
209
|
+
return context?.flux || hookFlux;
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* Specialized hooks for individual action types.
|
|
213
|
+
* These hooks only create the specific action type, improving performance.
|
|
214
|
+
*/ export const useContentActions = ()=>{
|
|
215
|
+
const { contentActions } = useMetropolis([
|
|
216
|
+
'content'
|
|
217
|
+
]);
|
|
218
|
+
return contentActions;
|
|
219
|
+
};
|
|
220
|
+
export const useEventActions = ()=>{
|
|
221
|
+
const { eventActions } = useMetropolis([
|
|
222
|
+
'event'
|
|
223
|
+
]);
|
|
224
|
+
return eventActions;
|
|
225
|
+
};
|
|
226
|
+
export const useGroupActions = ()=>{
|
|
227
|
+
const { groupActions } = useMetropolis([
|
|
228
|
+
'group'
|
|
229
|
+
]);
|
|
230
|
+
return groupActions;
|
|
231
|
+
};
|
|
232
|
+
export const useImageActions = ()=>{
|
|
233
|
+
const { imageActions } = useMetropolis([
|
|
234
|
+
'image'
|
|
235
|
+
]);
|
|
236
|
+
return imageActions;
|
|
237
|
+
};
|
|
238
|
+
export const useLocationActions = ()=>{
|
|
239
|
+
const { locationActions } = useMetropolis([
|
|
240
|
+
'location'
|
|
241
|
+
]);
|
|
242
|
+
return locationActions;
|
|
243
|
+
};
|
|
244
|
+
export const useMessageActions = ()=>{
|
|
245
|
+
const { messageActions } = useMetropolis([
|
|
246
|
+
'message'
|
|
247
|
+
]);
|
|
248
|
+
return messageActions;
|
|
249
|
+
};
|
|
250
|
+
export const useSubscriptionActions = ()=>{
|
|
251
|
+
const { subscriptionActions } = useMetropolis([
|
|
252
|
+
'subscription'
|
|
253
|
+
]);
|
|
254
|
+
return subscriptionActions;
|
|
255
|
+
};
|
|
256
|
+
export const usePermissionActions = ()=>{
|
|
257
|
+
const { permissionActions } = useMetropolis([
|
|
258
|
+
'permission'
|
|
259
|
+
]);
|
|
260
|
+
return permissionActions;
|
|
261
|
+
};
|
|
262
|
+
export const usePostActions = ()=>{
|
|
263
|
+
const { postActions } = useMetropolis([
|
|
264
|
+
'post'
|
|
265
|
+
]);
|
|
266
|
+
return postActions;
|
|
267
|
+
};
|
|
268
|
+
export const usePersonaActions = ()=>{
|
|
269
|
+
const { personaActions } = useMetropolis([
|
|
270
|
+
'persona'
|
|
271
|
+
]);
|
|
272
|
+
return personaActions;
|
|
273
|
+
};
|
|
274
|
+
export const useReactionActions = ()=>{
|
|
275
|
+
const { reactionActions } = useMetropolis([
|
|
276
|
+
'reaction'
|
|
277
|
+
]);
|
|
278
|
+
return reactionActions;
|
|
279
|
+
};
|
|
280
|
+
export const useTagActions = ()=>{
|
|
281
|
+
const { tagActions } = useMetropolis([
|
|
282
|
+
'tag'
|
|
283
|
+
]);
|
|
284
|
+
return tagActions;
|
|
285
|
+
};
|
|
286
|
+
export const useVideoActions = ()=>{
|
|
287
|
+
const { videoActions } = useMetropolis([
|
|
288
|
+
'video'
|
|
289
|
+
]);
|
|
290
|
+
return videoActions;
|
|
291
|
+
};
|
|
292
|
+
export const useTranslationActions = ()=>{
|
|
293
|
+
const { translationActions } = useMetropolis([
|
|
294
|
+
'translation'
|
|
295
|
+
]);
|
|
296
|
+
return translationActions;
|
|
297
|
+
};
|
|
298
|
+
export const useUserActions = ()=>{
|
|
299
|
+
const { userActions } = useMetropolis([
|
|
300
|
+
'user'
|
|
301
|
+
]);
|
|
302
|
+
return userActions;
|
|
303
|
+
};
|
|
304
|
+
export const useWebsocketActions = ()=>{
|
|
305
|
+
const { websocketActions } = useMetropolis([
|
|
306
|
+
'websocket'
|
|
307
|
+
]);
|
|
308
|
+
return websocketActions;
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvdXNlTWV0cm9wb2xpcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZUZsdXh9IGZyb20gJ0BubGFicy9hcmtoYW1qcy11dGlscy1yZWFjdCc7XG5pbXBvcnQge3VzZUNvbnRleHQsIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7TWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY29uZmlnL2luZGV4LmpzJztcbmltcG9ydCB7Y3JlYXRlQWN0aW9ucywgY3JlYXRlQWxsQWN0aW9uc30gZnJvbSAnLi4vdXRpbHMvYWN0aW9uRmFjdG9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7TWV0cm9wb2xpc0FkYXB0ZXJzfSBmcm9tICcuL01ldHJvcG9saXNQcm92aWRlci5qcyc7XG5pbXBvcnQge01ldHJvcG9saXNDb250ZXh0fSBmcm9tICcuL01ldHJvcG9saXNQcm92aWRlci5qcyc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uT3B0aW9ucywgQWN0aW9uVHlwZX0gZnJvbSAnLi4vdXRpbHMvYWN0aW9uRmFjdG9yeS5qcyc7XG5cbi8qKlxuICogQnVpbGRzIGFjdGlvbiBvcHRpb25zIGZyb20gYWRhcHRlcnMgaW4gYSB0eXBlLXNhZmUgd2F5LlxuICovXG5jb25zdCBidWlsZEFjdGlvbk9wdGlvbnMgPSAoXG4gIGFkYXB0ZXJzPzogTWV0cm9wb2xpc0FkYXB0ZXJzXG4pOiBQYXJ0aWFsPFJlY29yZDxBY3Rpb25UeXBlLCBBY3Rpb25PcHRpb25zPj4gPT4ge1xuICBpZiAoIWFkYXB0ZXJzKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogUGFydGlhbDxSZWNvcmQ8QWN0aW9uVHlwZSwgQWN0aW9uT3B0aW9ucz4+ID0ge307XG5cbiAgaWYgKGFkYXB0ZXJzLkNvbnRlbnQpIHtcbiAgICBvcHRpb25zLmNvbnRlbnQgPSB7Y29udGVudEFkYXB0ZXI6IGFkYXB0ZXJzLkNvbnRlbnR9O1xuICB9XG4gIGlmIChhZGFwdGVycy5FdmVudCkge1xuICAgIG9wdGlvbnMuZXZlbnQgPSB7ZXZlbnRBZGFwdGVyOiBhZGFwdGVycy5FdmVudH07XG4gIH1cbiAgaWYgKGFkYXB0ZXJzLkltYWdlKSB7XG4gICAgb3B0aW9ucy5pbWFnZSA9IHtpbWFnZUFkYXB0ZXI6IGFkYXB0ZXJzLkltYWdlfTtcbiAgfVxuICBpZiAoYWRhcHRlcnMuTG9jYXRpb24pIHtcbiAgICBvcHRpb25zLmxvY2F0aW9uID0ge2xvY2F0aW9uQWRhcHRlcjogYWRhcHRlcnMuTG9jYXRpb259O1xuICB9XG4gIGlmIChhZGFwdGVycy5NZXNzYWdlKSB7XG4gICAgb3B0aW9ucy5tZXNzYWdlID0ge21lc3NhZ2VBZGFwdGVyOiBhZGFwdGVycy5NZXNzYWdlfTtcbiAgfVxuICBpZiAoYWRhcHRlcnMuUGVybWlzc2lvbikge1xuICAgIG9wdGlvbnMucGVybWlzc2lvbiA9IHtwZXJtaXNzaW9uQWRhcHRlcjogYWRhcHRlcnMuUGVybWlzc2lvbn07XG4gIH1cbiAgaWYgKGFkYXB0ZXJzLlBvc3QpIHtcbiAgICBvcHRpb25zLnBvc3QgPSB7cG9zdEFkYXB0ZXI6IGFkYXB0ZXJzLlBvc3R9O1xuICB9XG4gIGlmIChhZGFwdGVycy5QZXJzb25hKSB7XG4gICAgb3B0aW9ucy5wZXJzb25hID0ge3BlcnNvbmFBZGFwdGVyOiBhZGFwdGVycy5QZXJzb25hfTtcbiAgfVxuICBpZiAoYWRhcHRlcnMuUmVhY3Rpb24pIHtcbiAgICBvcHRpb25zLnJlYWN0aW9uID0ge3JlYWN0aW9uQWRhcHRlcjogYWRhcHRlcnMuUmVhY3Rpb259O1xuICB9XG4gIGlmIChhZGFwdGVycy5UYWcpIHtcbiAgICBvcHRpb25zLnRhZyA9IHt0YWdBZGFwdGVyOiBhZGFwdGVycy5UYWd9O1xuICB9XG4gIGlmIChhZGFwdGVycy5UcmFuc2xhdGlvbikge1xuICAgIG9wdGlvbnMudHJhbnNsYXRpb24gPSB7dHJhbnNsYXRpb25BZGFwdGVyOiBhZGFwdGVycy5UcmFuc2xhdGlvbn07XG4gIH1cbiAgaWYgKGFkYXB0ZXJzLlVzZXIpIHtcbiAgICBvcHRpb25zLnVzZXIgPSB7dXNlckFkYXB0ZXI6IGFkYXB0ZXJzLlVzZXJ9O1xuICB9XG4gIGlmIChhZGFwdGVycy5WaWRlbykge1xuICAgIG9wdGlvbnMudmlkZW8gPSB7dmlkZW9BZGFwdGVyOiBhZGFwdGVycy5WaWRlb307XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbi8qKlxuICogTWFwcyBhY3Rpb24gdHlwZSBrZXlzIHRvIHRoZWlyIGFjdGlvbiBuYW1lcyBmb3IgcmV0dXJuIG9iamVjdC5cbiAqL1xuY29uc3QgbWFwQWN0aW9uc1RvUmV0dXJuS2V5cyA9IChhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gIGNvbnN0IG1hcHBlZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGlmIChhY3Rpb25zLmNvbnRlbnQpIHtcbiAgICBtYXBwZWQuY29udGVudEFjdGlvbnMgPSBhY3Rpb25zLmNvbnRlbnQ7XG4gIH1cbiAgaWYgKGFjdGlvbnMuZXZlbnQpIHtcbiAgICBtYXBwZWQuZXZlbnRBY3Rpb25zID0gYWN0aW9ucy5ldmVudDtcbiAgfVxuICBpZiAoYWN0aW9ucy5ncm91cCkge1xuICAgIG1hcHBlZC5ncm91cEFjdGlvbnMgPSBhY3Rpb25zLmdyb3VwO1xuICB9XG4gIGlmIChhY3Rpb25zLmltYWdlKSB7XG4gICAgbWFwcGVkLmltYWdlQWN0aW9ucyA9IGFjdGlvbnMuaW1hZ2U7XG4gIH1cbiAgaWYgKGFjdGlvbnMubG9jYXRpb24pIHtcbiAgICBtYXBwZWQubG9jYXRpb25BY3Rpb25zID0gYWN0aW9ucy5sb2NhdGlvbjtcbiAgfVxuICBpZiAoYWN0aW9ucy5tZXNzYWdlKSB7XG4gICAgbWFwcGVkLm1lc3NhZ2VBY3Rpb25zID0gYWN0aW9ucy5tZXNzYWdlO1xuICB9XG4gIGlmIChhY3Rpb25zLnBlcm1pc3Npb24pIHtcbiAgICBtYXBwZWQucGVybWlzc2lvbkFjdGlvbnMgPSBhY3Rpb25zLnBlcm1pc3Npb247XG4gIH1cbiAgaWYgKGFjdGlvbnMucG9zdCkge1xuICAgIG1hcHBlZC5wb3N0QWN0aW9ucyA9IGFjdGlvbnMucG9zdDtcbiAgfVxuICBpZiAoYWN0aW9ucy5wZXJzb25hKSB7XG4gICAgbWFwcGVkLnBlcnNvbmFBY3Rpb25zID0gYWN0aW9ucy5wZXJzb25hO1xuICB9XG4gIGlmIChhY3Rpb25zLnJlYWN0aW9uKSB7XG4gICAgbWFwcGVkLnJlYWN0aW9uQWN0aW9ucyA9IGFjdGlvbnMucmVhY3Rpb247XG4gIH1cbiAgaWYgKGFjdGlvbnMuc3Vic2NyaXB0aW9uKSB7XG4gICAgbWFwcGVkLnN1YnNjcmlwdGlvbkFjdGlvbnMgPSBhY3Rpb25zLnN1YnNjcmlwdGlvbjtcbiAgfVxuICBpZiAoYWN0aW9ucy50YWcpIHtcbiAgICBtYXBwZWQudGFnQWN0aW9ucyA9IGFjdGlvbnMudGFnO1xuICB9XG4gIGlmIChhY3Rpb25zLnRyYW5zbGF0aW9uKSB7XG4gICAgbWFwcGVkLnRyYW5zbGF0aW9uQWN0aW9ucyA9IGFjdGlvbnMudHJhbnNsYXRpb247XG4gIH1cbiAgaWYgKGFjdGlvbnMudXNlcikge1xuICAgIG1hcHBlZC51c2VyQWN0aW9ucyA9IGFjdGlvbnMudXNlcjtcbiAgfVxuICBpZiAoYWN0aW9ucy52aWRlbykge1xuICAgIG1hcHBlZC52aWRlb0FjdGlvbnMgPSBhY3Rpb25zLnZpZGVvO1xuICB9XG4gIGlmIChhY3Rpb25zLndlYnNvY2tldCkge1xuICAgIG1hcHBlZC53ZWJzb2NrZXRBY3Rpb25zID0gYWN0aW9ucy53ZWJzb2NrZXQ7XG4gIH1cblxuICByZXR1cm4gbWFwcGVkO1xufTtcblxuLyoqXG4gKiBNYWluIGhvb2sgdG8gYWNjZXNzIE1ldHJvcG9saXMgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gYWN0aW9uVHlwZXMgLSBPcHRpb25hbCBhcnJheSBvZiBhY3Rpb24gdHlwZXMgdG8gY3JlYXRlLiBJZiBub3QgcHJvdmlkZWQsIGNyZWF0ZXMgYWxsIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIGFjdGlvbnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiAvLyBHZXQgYWxsIGFjdGlvbnMgKGRlZmF1bHQgYmVoYXZpb3IpXG4gKiBjb25zdCB7dXNlckFjdGlvbnMsIHBvc3RBY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoKTtcbiAqXG4gKiAvLyBHZXQgb25seSBzcGVjaWZpYyBhY3Rpb25zIChtb3JlIHBlcmZvcm1hbnQpXG4gKiBjb25zdCB7dXNlckFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3VzZXInXSk7XG4gKiBjb25zdCB7dXNlckFjdGlvbnMsIHBvc3RBY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWyd1c2VyJywgJ3Bvc3QnXSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1ldHJvcG9saXMgPSA8VCBleHRlbmRzIEFjdGlvblR5cGVbXSA9IEFjdGlvblR5cGVbXT4oXG4gIGFjdGlvblR5cGVzPzogVFxuKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1ldHJvcG9saXNDb250ZXh0KTtcbiAgLy8gVXNlIGZsdXggZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2VGbHV4KCkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgY29uc3QgY29udGV4dEZsdXggPSBjb250ZXh0Py5mbHV4O1xuICBjb25zdCBob29rRmx1eCA9IHVzZUZsdXgoKTtcbiAgY29uc3QgZmx1eCA9IGNvbnRleHRGbHV4IHx8IGhvb2tGbHV4O1xuXG4gIGNvbnN0IHthZGFwdGVyc30gPSBjb250ZXh0O1xuICBjb25zdCBhY3Rpb25PcHRpb25zID0gdXNlTWVtbygoKSA9PiBidWlsZEFjdGlvbk9wdGlvbnMoYWRhcHRlcnMpLCBbYWRhcHRlcnNdKTtcblxuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgICBpZiAoYWN0aW9uVHlwZXMgJiYgYWN0aW9uVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQ3JlYXRlIG9ubHkgcmVxdWVzdGVkIGFjdGlvbnNcbiAgICAgIGFjdGlvbnMgPSBjcmVhdGVBY3Rpb25zKGFjdGlvblR5cGVzLCBmbHV4LCBhY3Rpb25PcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGFsbCBhY3Rpb25zIChkZWZhdWx0IGJlaGF2aW9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgICAgY29uc3QgYWxsQWN0aW9ucyA9IGNyZWF0ZUFsbEFjdGlvbnMoZmx1eCwgYWN0aW9uT3B0aW9ucyk7XG4gICAgICBhY3Rpb25zID0gYWxsQWN0aW9ucztcbiAgICB9XG5cbiAgICAvLyBNYXAgdG8gcmV0dXJuIGtleXMgKGNvbnRlbnRBY3Rpb25zLCB1c2VyQWN0aW9ucywgZXRjLilcbiAgICByZXR1cm4gbWFwQWN0aW9uc1RvUmV0dXJuS2V5cyhhY3Rpb25zKTtcbiAgfSwgW2ZsdXgsIGFjdGlvbk9wdGlvbnMsIGFjdGlvblR5cGVzPy5qb2luKCcsJyldKTtcbn07XG5cbi8qKlxuICogSG9vayB0byBhY2Nlc3MgdGhlIE1ldHJvcG9saXMgY29uZmlndXJhdGlvbiBmcm9tIGNvbnRleHQuXG4gKlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGVudmlyb25tZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdXNlZCBvdXRzaWRlIG9mIE1ldHJvcG9saXMgY29tcG9uZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgY29uZmlnID0gdXNlTWV0cm9wb2xpc0NvbmZpZygpO1xuICogY29uc3QgYXBpVXJsID0gY29uZmlnLmFwcD8uYXBpPy51cmw7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1ldHJvcG9saXNDb25maWcgPSAoKTogTWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbiA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1ldHJvcG9saXNDb250ZXh0KTtcblxuICBpZiAoIWNvbnRleHQ/LmNvbmZpZykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICd1c2VNZXRyb3BvbGlzQ29uZmlnIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNZXRyb3BvbGlzIGNvbXBvbmVudC4gJyArXG4gICAgICAnTWFrZSBzdXJlIHlvdXIgY29tcG9uZW50IGlzIHdyYXBwZWQgd2l0aCA8TWV0cm9wb2xpcz4gcHJvdmlkZXIuJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5jb25maWc7XG59O1xuXG4vKipcbiAqIEhvb2sgdG8gYWNjZXNzIHRoZSBGbHV4IGZyYW1ld29yayBpbnN0YW5jZSBmcm9tIGNvbnRleHQuXG4gKlxuICogQHJldHVybnMgVGhlIEZsdXggZnJhbWV3b3JrIGluc3RhbmNlXG4gKiBAdGhyb3dzIEVycm9yIGlmIHVzZWQgb3V0c2lkZSBvZiBNZXRyb3BvbGlzIGNvbXBvbmVudCBhbmQgbm8gRmx1eCBhdmFpbGFibGVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCBmbHV4ID0gdXNlTWV0cm9wb2xpc0ZsdXgoKTtcbiAqIGNvbnN0IHN0YXRlID0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU1ldHJvcG9saXNGbHV4ID0gKCk6IEZsdXhGcmFtZXdvcmsgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNZXRyb3BvbGlzQ29udGV4dCk7XG4gIGNvbnN0IGhvb2tGbHV4ID0gdXNlRmx1eCgpO1xuXG4gIC8vIFVzZSBmbHV4IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNlRmx1eCgpIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIHJldHVybiBjb250ZXh0Py5mbHV4IHx8IGhvb2tGbHV4O1xufTtcblxuLyoqXG4gKiBTcGVjaWFsaXplZCBob29rcyBmb3IgaW5kaXZpZHVhbCBhY3Rpb24gdHlwZXMuXG4gKiBUaGVzZSBob29rcyBvbmx5IGNyZWF0ZSB0aGUgc3BlY2lmaWMgYWN0aW9uIHR5cGUsIGltcHJvdmluZyBwZXJmb3JtYW5jZS5cbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlQ29udGVudEFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHtjb250ZW50QWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnY29udGVudCddKTtcbiAgcmV0dXJuIGNvbnRlbnRBY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUV2ZW50QWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge2V2ZW50QWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnZXZlbnQnXSk7XG4gIHJldHVybiBldmVudEFjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlR3JvdXBBY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7Z3JvdXBBY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWydncm91cCddKTtcbiAgcmV0dXJuIGdyb3VwQWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VJbWFnZUFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHtpbWFnZUFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ2ltYWdlJ10pO1xuICByZXR1cm4gaW1hZ2VBY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUxvY2F0aW9uQWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge2xvY2F0aW9uQWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnbG9jYXRpb24nXSk7XG4gIHJldHVybiBsb2NhdGlvbkFjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlTWVzc2FnZUFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHttZXNzYWdlQWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnbWVzc2FnZSddKTtcbiAgcmV0dXJuIG1lc3NhZ2VBY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVN1YnNjcmlwdGlvbkFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHtzdWJzY3JpcHRpb25BY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWydzdWJzY3JpcHRpb24nXSk7XG4gIHJldHVybiBzdWJzY3JpcHRpb25BY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVBlcm1pc3Npb25BY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7cGVybWlzc2lvbkFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3Blcm1pc3Npb24nXSk7XG4gIHJldHVybiBwZXJtaXNzaW9uQWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VQb3N0QWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge3Bvc3RBY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWydwb3N0J10pO1xuICByZXR1cm4gcG9zdEFjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlUGVyc29uYUFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHtwZXJzb25hQWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsncGVyc29uYSddKTtcbiAgcmV0dXJuIHBlcnNvbmFBY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVJlYWN0aW9uQWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge3JlYWN0aW9uQWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsncmVhY3Rpb24nXSk7XG4gIHJldHVybiByZWFjdGlvbkFjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlVGFnQWN0aW9ucyA9ICgpID0+IHtcbiAgY29uc3Qge3RhZ0FjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3RhZyddKTtcbiAgcmV0dXJuIHRhZ0FjdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlVmlkZW9BY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7dmlkZW9BY3Rpb25zfSA9IHVzZU1ldHJvcG9saXMoWyd2aWRlbyddKTtcbiAgcmV0dXJuIHZpZGVvQWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VUcmFuc2xhdGlvbkFjdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHt0cmFuc2xhdGlvbkFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3RyYW5zbGF0aW9uJ10pO1xuICByZXR1cm4gdHJhbnNsYXRpb25BY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVVzZXJBY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7dXNlckFjdGlvbnN9ID0gdXNlTWV0cm9wb2xpcyhbJ3VzZXInXSk7XG4gIHJldHVybiB1c2VyQWN0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VXZWJzb2NrZXRBY3Rpb25zID0gKCkgPT4ge1xuICBjb25zdCB7d2Vic29ja2V0QWN0aW9uc30gPSB1c2VNZXRyb3BvbGlzKFsnd2Vic29ja2V0J10pO1xuICByZXR1cm4gd2Vic29ja2V0QWN0aW9ucztcbn07XG4iXSwibmFtZXMiOlsidXNlRmx1eCIsInVzZUNvbnRleHQiLCJ1c2VNZW1vIiwiY3JlYXRlQWN0aW9ucyIsImNyZWF0ZUFsbEFjdGlvbnMiLCJNZXRyb3BvbGlzQ29udGV4dCIsImJ1aWxkQWN0aW9uT3B0aW9ucyIsImFkYXB0ZXJzIiwib3B0aW9ucyIsIkNvbnRlbnQiLCJjb250ZW50IiwiY29udGVudEFkYXB0ZXIiLCJFdmVudCIsImV2ZW50IiwiZXZlbnRBZGFwdGVyIiwiSW1hZ2UiLCJpbWFnZSIsImltYWdlQWRhcHRlciIsIkxvY2F0aW9uIiwibG9jYXRpb24iLCJsb2NhdGlvbkFkYXB0ZXIiLCJNZXNzYWdlIiwibWVzc2FnZSIsIm1lc3NhZ2VBZGFwdGVyIiwiUGVybWlzc2lvbiIsInBlcm1pc3Npb24iLCJwZXJtaXNzaW9uQWRhcHRlciIsIlBvc3QiLCJwb3N0IiwicG9zdEFkYXB0ZXIiLCJQZXJzb25hIiwicGVyc29uYSIsInBlcnNvbmFBZGFwdGVyIiwiUmVhY3Rpb24iLCJyZWFjdGlvbiIsInJlYWN0aW9uQWRhcHRlciIsIlRhZyIsInRhZyIsInRhZ0FkYXB0ZXIiLCJUcmFuc2xhdGlvbiIsInRyYW5zbGF0aW9uIiwidHJhbnNsYXRpb25BZGFwdGVyIiwiVXNlciIsInVzZXIiLCJ1c2VyQWRhcHRlciIsIlZpZGVvIiwidmlkZW8iLCJ2aWRlb0FkYXB0ZXIiLCJtYXBBY3Rpb25zVG9SZXR1cm5LZXlzIiwiYWN0aW9ucyIsIm1hcHBlZCIsImNvbnRlbnRBY3Rpb25zIiwiZXZlbnRBY3Rpb25zIiwiZ3JvdXAiLCJncm91cEFjdGlvbnMiLCJpbWFnZUFjdGlvbnMiLCJsb2NhdGlvbkFjdGlvbnMiLCJtZXNzYWdlQWN0aW9ucyIsInBlcm1pc3Npb25BY3Rpb25zIiwicG9zdEFjdGlvbnMiLCJwZXJzb25hQWN0aW9ucyIsInJlYWN0aW9uQWN0aW9ucyIsInN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvbkFjdGlvbnMiLCJ0YWdBY3Rpb25zIiwidHJhbnNsYXRpb25BY3Rpb25zIiwidXNlckFjdGlvbnMiLCJ2aWRlb0FjdGlvbnMiLCJ3ZWJzb2NrZXQiLCJ3ZWJzb2NrZXRBY3Rpb25zIiwidXNlTWV0cm9wb2xpcyIsImFjdGlvblR5cGVzIiwiY29udGV4dCIsImNvbnRleHRGbHV4IiwiZmx1eCIsImhvb2tGbHV4IiwiYWN0aW9uT3B0aW9ucyIsImxlbmd0aCIsImFsbEFjdGlvbnMiLCJqb2luIiwidXNlTWV0cm9wb2xpc0NvbmZpZyIsImNvbmZpZyIsIkVycm9yIiwidXNlTWV0cm9wb2xpc0ZsdXgiLCJ1c2VDb250ZW50QWN0aW9ucyIsInVzZUV2ZW50QWN0aW9ucyIsInVzZUdyb3VwQWN0aW9ucyIsInVzZUltYWdlQWN0aW9ucyIsInVzZUxvY2F0aW9uQWN0aW9ucyIsInVzZU1lc3NhZ2VBY3Rpb25zIiwidXNlU3Vic2NyaXB0aW9uQWN0aW9ucyIsInVzZVBlcm1pc3Npb25BY3Rpb25zIiwidXNlUG9zdEFjdGlvbnMiLCJ1c2VQZXJzb25hQWN0aW9ucyIsInVzZVJlYWN0aW9uQWN0aW9ucyIsInVzZVRhZ0FjdGlvbnMiLCJ1c2VWaWRlb0FjdGlvbnMiLCJ1c2VUcmFuc2xhdGlvbkFjdGlvbnMiLCJ1c2VVc2VyQWN0aW9ucyIsInVzZVdlYnNvY2tldEFjdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLE9BQU8sUUFBTyw4QkFBOEI7QUFDcEQsU0FBUUMsVUFBVSxFQUFFQyxPQUFPLFFBQU8sUUFBUTtBQUkxQyxTQUFRQyxhQUFhLEVBQUVDLGdCQUFnQixRQUFPLDRCQUE0QjtBQUUxRSxTQUFRQyxpQkFBaUIsUUFBTywwQkFBMEI7QUFHMUQ7O0NBRUMsR0FDRCxNQUFNQyxxQkFBcUIsQ0FDekJDO0lBRUEsSUFBSSxDQUFDQSxVQUFVO1FBQ2IsT0FBTyxDQUFDO0lBQ1Y7SUFFQSxNQUFNQyxVQUFzRCxDQUFDO0lBRTdELElBQUlELFNBQVNFLE9BQU8sRUFBRTtRQUNwQkQsUUFBUUUsT0FBTyxHQUFHO1lBQUNDLGdCQUFnQkosU0FBU0UsT0FBTztRQUFBO0lBQ3JEO0lBQ0EsSUFBSUYsU0FBU0ssS0FBSyxFQUFFO1FBQ2xCSixRQUFRSyxLQUFLLEdBQUc7WUFBQ0MsY0FBY1AsU0FBU0ssS0FBSztRQUFBO0lBQy9DO0lBQ0EsSUFBSUwsU0FBU1EsS0FBSyxFQUFFO1FBQ2xCUCxRQUFRUSxLQUFLLEdBQUc7WUFBQ0MsY0FBY1YsU0FBU1EsS0FBSztRQUFBO0lBQy9DO0lBQ0EsSUFBSVIsU0FBU1csUUFBUSxFQUFFO1FBQ3JCVixRQUFRVyxRQUFRLEdBQUc7WUFBQ0MsaUJBQWlCYixTQUFTVyxRQUFRO1FBQUE7SUFDeEQ7SUFDQSxJQUFJWCxTQUFTYyxPQUFPLEVBQUU7UUFDcEJiLFFBQVFjLE9BQU8sR0FBRztZQUFDQyxnQkFBZ0JoQixTQUFTYyxPQUFPO1FBQUE7SUFDckQ7SUFDQSxJQUFJZCxTQUFTaUIs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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface UseTranslationsOptions {
|
|
2
|
+
readonly locale?: string;
|
|
3
|
+
readonly namespace?: string;
|
|
4
|
+
readonly autoProcess?: boolean;
|
|
5
|
+
readonly processInterval?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface UseTranslationsReturn {
|
|
8
|
+
readonly t: (key: string, fallback?: string) => string;
|
|
9
|
+
readonly hasTranslation: (key: string) => boolean;
|
|
10
|
+
readonly queueTranslation: (key: string) => void;
|
|
11
|
+
readonly processPending: () => Promise<void>;
|
|
12
|
+
readonly isLoading: boolean;
|
|
13
|
+
readonly error: Error | null;
|
|
14
|
+
}
|
|
15
|
+
export declare const useTranslations: (options?: UseTranslationsOptions) => UseTranslationsReturn;
|
|
16
|
+
//# sourceMappingURL=useTranslations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTranslations.d.ts","sourceRoot":"","sources":["../../src/utils/useTranslations.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CAC9B;AAED,eAAO,MAAM,eAAe,GAAI,UAAS,sBAA2B,KAAG,qBA+FtE,CAAC"}
|