@nlabs/metropolisjs 0.1.2 → 0.3.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 +44 -95
- package/lib/actions/userActions/userActions.d.ts.map +1 -0
- package/lib/actions/userActions/userActions.js +870 -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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
|
-
import type { TagType } from '../../adapters/tagAdapter/tagAdapter';
|
|
2
|
+
import type { TagType } from '../../adapters/tagAdapter/tagAdapter.js';
|
|
3
|
+
import type { ActionRequestOptions } from '../../utils/requestCache.js';
|
|
3
4
|
export interface TagAdapterOptions {
|
|
4
5
|
strict?: boolean;
|
|
5
6
|
allowPartial?: boolean;
|
|
@@ -13,43 +14,24 @@ export interface TagActionsOptions {
|
|
|
13
14
|
export type TagApiResultsType = {
|
|
14
15
|
tags: {
|
|
15
16
|
addTag: TagType;
|
|
16
|
-
|
|
17
|
+
addTagToItem: TagType;
|
|
17
18
|
deleteTag: TagType;
|
|
18
|
-
|
|
19
|
+
deleteTagFromItem: boolean;
|
|
20
|
+
getTagsByItem: TagType[];
|
|
19
21
|
getTags: TagType[];
|
|
20
22
|
updateTag: TagType;
|
|
21
23
|
};
|
|
22
24
|
};
|
|
23
25
|
export interface TagActions {
|
|
24
|
-
addTag: (tag: Partial<TagType>, tagProps?: string[]) => Promise<TagType>;
|
|
25
|
-
|
|
26
|
-
deleteTag: (tagId: string, tagProps?: string[]) => Promise<TagType>;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
addTag: (tag: Partial<TagType>, tagProps?: string[], requestOptions?: ActionRequestOptions) => Promise<TagType>;
|
|
27
|
+
addTagToItem: (tagId: string, itemDocId?: string, tagProps?: string[], requestOptions?: ActionRequestOptions) => Promise<TagType>;
|
|
28
|
+
deleteTag: (tagId: string, tagProps?: string[], requestOptions?: ActionRequestOptions) => Promise<TagType>;
|
|
29
|
+
deleteTagFromItem: (tagId: string, itemDocId?: string, requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
30
|
+
getTagsByItem: (itemDocId: string, tagProps?: string[], requestOptions?: ActionRequestOptions) => Promise<TagType[]>;
|
|
31
|
+
getTags: (searchQuery?: string, tagProps?: string[], options?: ActionRequestOptions) => Promise<TagType[]>;
|
|
32
|
+
updateTag: (tag: Partial<TagType>, tagProps?: string[], requestOptions?: ActionRequestOptions) => Promise<TagType>;
|
|
30
33
|
updateTagAdapter: (adapter: (input: unknown, options?: TagAdapterOptions) => any) => void;
|
|
31
34
|
updateTagAdapterOptions: (options: TagAdapterOptions) => void;
|
|
32
35
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Factory function to create TagActions with enhanced adapter injection capabilities.
|
|
35
|
-
* Custom adapters are merged with default behavior, allowing partial overrides.
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* // Basic usage with default adapters
|
|
39
|
-
* const tagActions = createTagActions(flux);
|
|
40
|
-
*
|
|
41
|
-
* @example
|
|
42
|
-
* // Custom adapter that extends default behavior
|
|
43
|
-
* const customTagAdapter = (input: unknown, options?: TagAdapterOptions) => {
|
|
44
|
-
* // input is already validated by default adapter
|
|
45
|
-
* if (input.name && input.name.length > 50) {
|
|
46
|
-
* throw new Error('Tag name too long');
|
|
47
|
-
* }
|
|
48
|
-
* return input;
|
|
49
|
-
* };
|
|
50
|
-
*
|
|
51
|
-
* const tagActions = createTagActions(flux, {
|
|
52
|
-
* tagAdapter: customTagAdapter
|
|
53
|
-
* });
|
|
54
|
-
*/
|
|
55
36
|
export declare const createTagActions: (flux: FluxFramework, options?: TagActionsOptions) => TagActions;
|
|
37
|
+
//# sourceMappingURL=tagActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tagActions.d.ts","sourceRoot":"","sources":["../../../src/actions/tagActions/tagActions.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAa,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,yCAAyC,CAAC;AACrE,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AAuBtE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC;IACpD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,GAAG,CAAC;IAClE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE;QACJ,MAAM,EAAE,OAAO,CAAC;QAChB,YAAY,EAAE,OAAO,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;QACnB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,aAAa,EAAE,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChH,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClI,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3G,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClH,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACrH,OAAO,EAAE,CACP,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxB,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnH,gBAAgB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,KAAK,GAAG,KAAK,IAAI,CAAC;IAC1F,uBAAuB,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC/D;AAsBD,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,EACnB,UAAU,iBAAiB,KAC1B,UAiVF,CAAC"}
|
|
@@ -1,2 +1,347 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FjdGlvbnMvdGFnQWN0aW9ucy90YWdBY3Rpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt2YWxpZGF0ZVRhZ0lucHV0fSBmcm9tICcuLi8uLi9hZGFwdGVycy90YWdBZGFwdGVyL3RhZ0FkYXB0ZXInO1xuaW1wb3J0IHtUQUdfQ09OU1RBTlRTfSBmcm9tICcuLi8uLi9zdG9yZXMvdGFnU3RvcmUnO1xuaW1wb3J0IHthcHBNdXRhdGlvbiwgYXBwUXVlcnl9IGZyb20gJy4uLy4uL3V0aWxzL2FwaSc7XG5cbmltcG9ydCB0eXBlIHtGbHV4RnJhbWV3b3JrfSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuaW1wb3J0IHR5cGUge1RhZ1R5cGV9IGZyb20gJy4uLy4uL2FkYXB0ZXJzL3RhZ0FkYXB0ZXIvdGFnQWRhcHRlcic7XG5pbXBvcnQgdHlwZSB7UmVha3RvckRiQ29sbGVjdGlvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpJztcblxuY29uc3QgREFUQV9UWVBFOiBSZWFrdG9yRGJDb2xsZWN0aW9uID0gJ3RhZ3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ0FkYXB0ZXJPcHRpb25zIHtcbiAgc3RyaWN0PzogYm9vbGVhbjtcbiAgYWxsb3dQYXJ0aWFsPzogYm9vbGVhbjtcbiAgZW52aXJvbm1lbnQ/OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nIHwgJ3Rlc3QnO1xuICBjdXN0b21WYWxpZGF0aW9uPzogKGlucHV0OiB1bmtub3duKSA9PiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ0FjdGlvbnNPcHRpb25zIHtcbiAgdGFnQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFRhZ0FkYXB0ZXJPcHRpb25zKSA9PiBhbnk7XG4gIHRhZ0FkYXB0ZXJPcHRpb25zPzogVGFnQWRhcHRlck9wdGlvbnM7XG59XG5cbmV4cG9ydCB0eXBlIFRhZ0FwaVJlc3VsdHNUeXBlID0ge1xuICB0YWdzOiB7XG4gICAgYWRkVGFnOiBUYWdUeXBlO1xuICAgIGFkZFRhZ1RvUHJvZmlsZTogVGFnVHlwZTtcbiAgICBkZWxldGVUYWc6IFRhZ1R5cGU7XG4gICAgZGVsZXRlVGFnRnJvbVByb2ZpbGU6IFRhZ1R5cGU7XG4gICAgZ2V0VGFnczogVGFnVHlwZVtdO1xuICAgIHVwZGF0ZVRhZzogVGFnVHlwZTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnQWN0aW9ucyB7XG4gIGFkZFRhZzogKHRhZzogUGFydGlhbDxUYWdUeXBlPiwgdGFnUHJvcHM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxUYWdUeXBlPjtcbiAgYWRkVGFnVG9Qcm9maWxlOiAodGFnSWQ6IHN0cmluZywgdGFnUHJvcHM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxUYWdUeXBlPjtcbiAgZGVsZXRlVGFnOiAodGFnSWQ6IHN0cmluZywgdGFnUHJvcHM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxUYWdUeXBlPjtcbiAgZGVsZXRlVGFnRnJvbVByb2ZpbGU6ICh0YWdJZDogc3RyaW5nLCB0YWdQcm9wcz86IHN0cmluZ1tdKSA9PiBQcm9taXNlPFRhZ1R5cGU+O1xuICBnZXRUYWdzOiAodGFnUHJvcHM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxUYWdUeXBlW10+O1xuICB1cGRhdGVUYWc6ICh0YWc6IFBhcnRpYWw8VGFnVHlwZT4sIHRhZ1Byb3BzPzogc3RyaW5nW10pID0+IFByb21pc2U8VGFnVHlwZT47XG4gIHVwZGF0ZVRhZ0FkYXB0ZXI6IChhZGFwdGVyOiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBUYWdBZGFwdGVyT3B0aW9ucykgPT4gYW55KSA9PiB2b2lkO1xuICB1cGRhdGVUYWdBZGFwdGVyT3B0aW9uczogKG9wdGlvbnM6IFRhZ0FkYXB0ZXJPcHRpb25zKSA9PiB2b2lkO1xufVxuXG4vLyBEZWZhdWx0IHZhbGlkYXRpb24gZnVuY3Rpb25cbmNvbnN0IGRlZmF1bHRUYWdWYWxpZGF0b3IgPSAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBUYWdBZGFwdGVyT3B0aW9ucykgPT4gdmFsaWRhdGVUYWdJbnB1dChpbnB1dCk7XG5cbi8vIEVuaGFuY2VkIHZhbGlkYXRpb24gZnVuY3Rpb24gdGhhdCBtZXJnZXMgY3VzdG9tIGxvZ2ljIHdpdGggZGVmYXVsdHNcbmNvbnN0IGNyZWF0ZVRhZ1ZhbGlkYXRvciA9IChcbiAgY3VzdG9tQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFRhZ0FkYXB0ZXJPcHRpb25zKSA9PiBhbnksXG4gIG9wdGlvbnM/OiBUYWdBZGFwdGVyT3B0aW9uc1xuKSA9PiAoaW5wdXQ6IHVua25vd24sIHZhbGlkYXRvck9wdGlvbnM/OiBUYWdBZGFwdGVyT3B0aW9ucykgPT4ge1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gey4uLm9wdGlvbnMsIC4uLnZhbGlkYXRvck9wdGlvbnN9O1xuXG4gIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCB2YWxpZGF0aW9uXG4gIGxldCB2YWxpZGF0ZWQgPSBkZWZhdWx0VGFnVmFsaWRhdG9yKGlucHV0LCBtZXJnZWRPcHRpb25zKTtcblxuICAvLyBBcHBseSBjdXN0b20gdmFsaWRhdGlvbiBpZiBwcm92aWRlZFxuICBpZihjdXN0b21BZGFwdGVyKSB7XG4gICAgdmFsaWRhdGVkID0gY3VzdG9tQWRhcHRlcih2YWxpZGF0ZWQsIG1lcmdlZE9wdGlvbnMpO1xuICB9XG5cbiAgLy8gQXBwbHkgY3VzdG9tIHZhbGlkYXRpb24gZnJvbSBvcHRpb25zIGlmIHByb3ZpZGVkXG4gIGlmKG1lcmdlZE9wdGlvbnM/LmN1c3RvbVZhbGlkYXRpb24pIHtcbiAgICB2YWxpZGF0ZWQgPSBtZXJnZWRPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24odmFsaWRhdGVkKSBhcyBUYWdUeXBlO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZDtcbn07XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgVGFnQWN0aW9ucyB3aXRoIGVuaGFuY2VkIGFkYXB0ZXIgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy5cbiAqIEN1c3RvbSBhZGFwdGVycyBhcmUgbWVyZ2VkIHdpdGggZGVmYXVsdCBiZWhhdmlvciwgYWxsb3dpbmcgcGFydGlhbCBvdmVycmlkZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIHVzYWdlIHdpdGggZGVmYXVsdCBhZGFwdGVyc1xuICogY29uc3QgdGFnQWN0aW9ucyA9IGNyZWF0ZVRhZ0FjdGlvbnMoZmx1eCk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEN1c3RvbSBhZGFwdGVyIHRoYXQgZXh0ZW5kcyBkZWZhdWx0IGJlaGF2aW9yXG4gKiBjb25zdCBjdXN0b21UYWdBZGFwdGVyID0gKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogVGFnQWRhcHRlck9wdGlvbnMpID0+IHtcbiAqICAgLy8gaW5wdXQgaXMgYWxyZWFkeSB2YWxpZGF0ZWQgYnkgZGVmYXVsdCBhZGFwdGVyXG4gKiAgIGlmIChpbnB1dC5uYW1lICYmIGlucHV0Lm5hbWUubGVuZ3RoID4gNTApIHtcbiAqICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RhZyBuYW1lIHRvbyBsb25nJyk7XG4gKiAgIH1cbiAqICAgcmV0dXJuIGlucHV0O1xuICogfTtcbiAqXG4gKiBjb25zdCB0YWdBY3Rpb25zID0gY3JlYXRlVGFnQWN0aW9ucyhmbHV4LCB7XG4gKiAgIHRhZ0FkYXB0ZXI6IGN1c3RvbVRhZ0FkYXB0ZXJcbiAqIH0pO1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlVGFnQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFRhZ0FjdGlvbnNPcHRpb25zXG4pOiBUYWdBY3Rpb25zID0+IHtcbiAgLy8gSW5pdGlhbGl6ZSBhZGFwdGVyIHN0YXRlXG4gIGxldCB0YWdBZGFwdGVyT3B0aW9uczogVGFnQWRhcHRlck9wdGlvbnMgPSBvcHRpb25zPy50YWdBZGFwdGVyT3B0aW9ucyB8fCB7fTtcbiAgbGV0IGN1c3RvbVRhZ0FkYXB0ZXIgPSBvcHRpb25zPy50YWdBZGFwdGVyO1xuXG4gIC8vIENyZWF0ZSB2YWxpZGF0b3JzIHRoYXQgbWVyZ2UgY3VzdG9tIGFkYXB0ZXJzIHdpdGggZGVmYXVsdHNcbiAgbGV0IHZhbGlkYXRlVGFnID0gY3JlYXRlVGFnVmFsaWRhdG9yKGN1c3RvbVRhZ0FkYXB0ZXIsIHRhZ0FkYXB0ZXJPcHRpb25zKTtcblxuICAvLyBVcGRhdGUgZnVuY3Rpb25zIHRoYXQgcmVjcmVhdGUgdmFsaWRhdG9yc1xuICBjb25zdCB1cGRhdGVUYWdBZGFwdGVyID0gKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFRhZ0FkYXB0ZXJPcHRpb25zKSA9PiBhbnkpOiB2b2lkID0+IHtcbiAgICBjdXN0b21UYWdBZGFwdGVyID0gYWRhcHRlcjtcbiAgICB2YWxpZGF0ZVRhZyA9IGNyZWF0ZVRhZ1ZhbGlkYXRvcihjdXN0b21UYWdBZGFwdGVyLCB0YWdBZGFwdGVyT3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlVGFnQWRhcHRlck9wdGlvbnMgPSAob3B0aW9uczogVGFnQWRhcHRlck9wdGlvbnMpOiB2b2lkID0+IHtcbiAgICB0YWdBZGFwdGVyT3B0aW9ucyA9IHsuLi50YWdBZGFwdGVyT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgdmFsaWRhdGVUYWcgPSBjcmVhdGVUYWdWYWxpZGF0b3IoY3VzdG9tVGFnQWRhcHRlciwgdGFnQWRhcHRlck9wdGlvbnMpO1xuICB9O1xuXG4gIC8vIEFjdGlvbiBpbXBsZW1lbnRhdGlvbnNcbiAgY29uc3QgYWRkVGFnID0gYXN5bmMgKHRhZzogUGFydGlhbDxUYWdUeXBlPiwgdGFnUHJvcHM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIHRhZzoge1xuICAgICAgICAgIHR5cGU6ICdUYWdJbnB1dCEnLFxuICAgICAgICAgIHZhbHVlOiB2YWxpZGF0ZVRhZyh0YWcsIHRhZ0FkYXB0ZXJPcHRpb25zKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogVGFnQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3Qge3RhZ3M6IHthZGRUYWc6IHRhZyA9IHt9fX0gPSBkYXRhO1xuICAgICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dGFnLCB0eXBlOiBUQUdfQ09OU1RBTlRTLkFERF9JVEVNX1NVQ0NFU1N9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHt0YWc6IGFkZGVkVGFnfSA9IGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAnYWRkVGFnJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgWydjYXRlZ29yeScsICdpZCcsICduYW1lJywgJ3RhZ0lkJywgLi4udGFnUHJvcHNdLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGFkZGVkVGFnIGFzIFRhZ1R5cGU7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFRBR19DT05TVEFOVFMuQUREX0lURU1fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhZGRUYWdUb1Byb2ZpbGUgPSBhc3luYyAodGFnSWQ6IHN0cmluZywgdGFnUHJvcHM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIHRhZ0lkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgICAgdmFsdWU6IHRhZ0lkXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBUYWdBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCB7dGFnczoge2FkZFRhZ1RvUHJvZmlsZTogdGFnID0ge319fSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHt0YWcsIHR5cGU6IFRBR19DT05TVEFOVFMuQUREX1BST0ZJTEVfU1VDQ0VTU30pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge3RhZzogYWRkZWRUYWd9ID0gYXdhaXQgYXBwTXV0YXRpb24oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdhZGRUYWdUb1Byb2ZpbGUnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbJ2NhdGVnb3J5JywgJ2lkJywgJ25hbWUnLCAndGFnSWQnLCAuLi50YWdQcm9wc10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYWRkZWRUYWcgYXMgVGFnVHlwZTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVEFHX0NPTlNUQU5UUy5BRERfUFJPRklMRV9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZVRhZyA9IGFzeW5jICh0YWdJZDogc3RyaW5nLCB0YWdQcm9wczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgdGFnSWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgICB2YWx1ZTogdGFnSWRcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFRhZ0FwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHt0YWdzOiB7ZGVsZXRlVGFnOiB0YWcgPSB7fX19ID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3RhZywgdHlwZTogVEFHX0NPTlNUQU5UUy5SRU1PVkVfSVRFTV9TVUNDRVNTfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7dGFnOiBkZWxldGVkVGFnfSA9IGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAnZGVsZXRlVGFnJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgWydjYXRlZ29yeScsICdpZCcsICduYW1lJywgJ3RhZ0lkJywgLi4udGFnUHJvcHNdLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGRlbGV0ZWRUYWcgYXMgVGFnVHlwZTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVEFHX0NPTlNUQU5UUy5SRU1PVkVfSVRFTV9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZVRhZ0Zyb21Qcm9maWxlID0gYXN5bmMgKHRhZ0lkOiBzdHJpbmcsIHRhZ1Byb3BzOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICB0YWdJZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiB0YWdJZFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogVGFnQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3Qge3RhZ3M6IHtkZWxldGVUYWdGcm9tUHJvZmlsZTogdGFnID0ge319fSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICB0YWcsXG4gICAgICAgICAgdHlwZTogVEFHX0NPTlNUQU5UUy5SRU1PVkVfUFJPRklMRV9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge3RhZzogZGVsZXRlZFRhZ30gPSBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2RlbGV0ZVRhZ0Zyb21Qcm9maWxlJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgWydjYXRlZ29yeScsICdpZCcsICduYW1lJywgJ3RhZ0lkJywgLi4udGFnUHJvcHNdLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGRlbGV0ZWRUYWcgYXMgVGFnVHlwZTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVEFHX0NPTlNUQU5UUy5SRU1PVkVfUFJPRklMRV9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFRhZ3MgPSBhc3luYyAodGFnUHJvcHM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICAgIGNvbnN0IGluaXRpYWxUYWdzOiBUYWdUeXBlW10gPSBmbHV4LmdldFN0YXRlKCd0YWcubGlzdCcsIFtdKSBhcyBUYWdUeXBlW107XG4gICAgY29uc3QgY2FjaGVFeHBpcmVzOiBudW1iZXIgPSBmbHV4LmdldFN0YXRlKCd0YWcuZXhwaXJlcycsIDApIGFzIG51bWJlcjtcbiAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgICBpZihpbml0aWFsVGFncy5sZW5ndGggJiYgbm93IDwgY2FjaGVFeHBpcmVzKSB7XG4gICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0YWdzOiBpbml0aWFsVGFncywgdHlwZTogVEFHX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgICByZXR1cm4gaW5pdGlhbFRhZ3M7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBmcm9tOiB7XG4gICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoOiB7XG4gICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHRvOiB7XG4gICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgdmFsdWU6IC0xXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBUYWdBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCB7dGFnczoge2dldFRhZ3N9fSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICB0YWdzOiBnZXRUYWdzLFxuICAgICAgICAgIHR5cGU6IFRBR19DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHt0YWdzOiB0YWdzTGlzdH0gPSBhd2FpdCBhcHBRdWVyeShcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3RhZ3MnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbJ2NhdGVnb3J5JywgJ2lkJywgJ25hbWUnLCAndGFnSWQnLCAuLi50YWdQcm9wc10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gdGFnc0xpc3QgYXMgVGFnVHlwZVtdO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBUQUdfQ09OU1RBTlRTLkdFVF9MSVNUX1NVQ0NFU1N9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVUYWcgPSBhc3luYyAodGFnOiBQYXJ0aWFsPFRhZ1R5cGU+LCB0YWdQcm9wczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgdGFnOiB7XG4gICAgICAgICAgdHlwZTogJ1RhZ0lucHV0IScsXG4gICAgICAgICAgdmFsdWU6IHZhbGlkYXRlVGFnKHRhZywgdGFnQWRhcHRlck9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBUYWdBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCB7dGFnczoge3VwZGF0ZVRhZzogdGFnID0ge319fSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHt0YWcsIHR5cGU6IFRBR19DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTU30pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge3RhZzogdXBkYXRlZFRhZ30gPSBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3VwZGF0ZVRhZycsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFsnY2F0ZWdvcnknLCAnaWQnLCAnbmFtZScsICd0YWdJZCcsIC4uLnRhZ1Byb3BzXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB1cGRhdGVkVGFnIGFzIFRhZ1R5cGU7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFRBR19DT05TVEFOVFMuVVBEQVRFX0lURU1fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGFjdGlvbnMgb2JqZWN0XG4gIHJldHVybiB7XG4gICAgYWRkVGFnLFxuICAgIGFkZFRhZ1RvUHJvZmlsZSxcbiAgICBkZWxldGVUYWcsXG4gICAgZGVsZXRlVGFnRnJvbVByb2ZpbGUsXG4gICAgZ2V0VGFncyxcbiAgICB1cGRhdGVUYWcsXG4gICAgdXBkYXRlVGFnQWRhcHRlcixcbiAgICB1cGRhdGVUYWdBZGFwdGVyT3B0aW9uc1xuICB9O1xufTtcblxuIl0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBUSxvQkFBQUEsTUFBdUIsdUNBQy9CLE9BQVEsaUJBQUFDLE1BQW9CLHdCQUM1QixPQUFRLGVBQUFDLEVBQWEsWUFBQUMsTUFBZSxrQkFNcEMsTUFBTUMsRUFBaUMsT0FxQ2pDQyxFQUFzQixDQUFDQyxFQUFnQkMsSUFBZ0NQLEVBQWlCTSxDQUFLLEVBRzdGRSxFQUFxQixDQUN6QkMsRUFDQUYsSUFDRyxDQUFDRCxFQUFnQkksSUFBeUMsQ0FDN0QsTUFBTUMsRUFBZ0IsQ0FBQyxHQUFHSixFQUFTLEdBQUdHLENBQWdCLEVBR3RELElBQUlFLEVBQVlQLEVBQW9CQyxFQUFPSyxDQUFhLEVBR3hELE9BQUdGLElBQ0RHLEVBQVlILEVBQWNHLEVBQVdELENBQWEsR0FJakRBLEdBQWUsbUJBQ2hCQyxFQUFZRCxFQUFjLGlCQUFpQkMsQ0FBUyxHQUcvQ0EsQ0FDVCxFQXdCYUMsRUFBbUIsQ0FDOUJDLEVBQ0FQLElBQ2UsQ0FFZixJQUFJUSxFQUF1Q1IsR0FBUyxtQkFBcUIsQ0FBQyxFQUN0RVMsRUFBbUJULEdBQVMsV0FHNUJVLEVBQWNULEVBQW1CUSxFQUFrQkQsQ0FBaUIsRUEwTnhFLE1BQU8sQ0FDTCxPQTdNYSxNQUFPRyxFQUF1QkMsRUFBcUIsQ0FBQyxJQUF3QixDQUN6RixHQUFJLENBQ0YsTUFBTUMsRUFBaUIs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R0FBSSxDQUNGLE1BQU1DLEVBQWlCLENBQ3JCLElBQUssQ0FDSCxLQUFNLFlBQ04sTUFBT0gsRUFBWUMsRUFBS0gsQ0FBaUIsQ0FDM0MsQ0FDRixFQUVNTSxFQUFhQyxHQUE0QixDQUM3QyxLQUFNLENBQUMsS0FBTSxDQUFDLFVBQVdKLEVBQU0sQ0FBQyxDQUFDLENBQUMsRUFBSUksRUFDdEMsT0FBT1IsRUFBSyxTQUFTLENBQUMsSUFBQUksRUFBSyxLQUFNakIsRUFBYyxtQkFBbUIsQ0FBQyxDQUNyRSxFQUVNLENBQUMsSUFBSytCLENBQVUsRUFBSSxNQUFNOUIsRUFDOUJZLEVBQ0EsWUFDQVYsRUFDQWdCLEVBQ0EsQ0FBQyxXQUFZLEtBQU0sT0FBUSxRQUFTLEdBQUdELENBQVEsRUFDL0MsQ0FBQyxVQUFBRSxDQUFTLENBQ1osRUFFQSxPQUFPVyxDQUNULE9BQVFSLEVBQU8sQ0FDYixNQUFBVixFQUFLLFNBQVMsQ0FBQyxNQUFBVSxFQUFPLEtBQU12QixFQUFjLGlCQUFpQixDQUFDLEVBQ3REdUIsQ0FDUixDQUNGLEVBVUUsaUJBOU53QlMsR0FBd0UsQ0FDaEdqQixFQUFtQmlCLEVBQ25CaEIsRUFBY1QsRUFBbUJRLEVBQWtCRCxDQUFpQixDQUN0RSxFQTRORSx3QkExTitCUixHQUFxQyxDQUNwRVEsRUFBb0IsQ0FBQyxHQUFHQSxFQUFtQixHQUFHUixDQUFPLEVBQ3JEVSxFQUFjVCxFQUFtQlEsRUFBa0JELENBQWlCLENBQ3RFLENBd05BLENBQ0YiLAogICJuYW1lcyI6IFsidmFsaWRhdGVUYWdJbnB1dCIsICJUQUdfQ09OU1RBTlRTIiwgImFwcE11dGF0aW9uIiwgImFwcFF1ZXJ5IiwgIkRBVEFfVFlQRSIsICJkZWZhdWx0VGFnVmFsaWRhdG9yIiwgImlucHV0IiwgIm9wdGlvbnMiLCAiY3JlYXRlVGFnVmFsaWRhdG9yIiwgImN1c3RvbUFkYXB0ZXIiLCAidmFsaWRhdG9yT3B0aW9ucyIsICJtZXJnZWRPcHRpb25zIiwgInZhbGlkYXRlZCIsICJjcmVhdGVUYWdBY3Rpb25zIiwgImZsdXgiLCAidGFnQWRhcHRlck9wdGlvbnMiLCAiY3VzdG9tVGFnQWRhcHRlciIsICJ2YWxpZGF0ZVRhZyIsICJ0YWciLCAidGFnUHJvcHMiLCAicXVlcnlWYXJpYWJsZXMiLCAib25TdWNjZXNzIiwgImRhdGEiLCAiYWRkZWRUYWciLCAiZXJyb3IiLCAidGFnSWQiLCAiZGVsZXRlZFRhZyIsICJpbml0aWFsVGFncyIsICJjYWNoZUV4cGlyZXMiLCAibm93IiwgImdldFRhZ3MiLCAidGFnc0xpc3QiLCAidXBkYXRlZFRhZyIsICJhZGFwdGVyIl0KfQo=
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2021-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ import { validateTagInput } from '../../adapters/tagAdapter/tagAdapter.js';
|
|
5
|
+
import { TAG_CONSTANTS } from '../../stores/tagStore.js';
|
|
6
|
+
import { appMutation, appQuery } from '../../utils/api.js';
|
|
7
|
+
import { clearCachedRequest, getCachedRequest, setCachedRequest } from '../../utils/requestCache.js';
|
|
8
|
+
const DATA_TYPE = 'tags';
|
|
9
|
+
const DEFAULT_TAG_PROPS = [
|
|
10
|
+
'added',
|
|
11
|
+
'category',
|
|
12
|
+
'description',
|
|
13
|
+
'modified',
|
|
14
|
+
'name',
|
|
15
|
+
'tagId'
|
|
16
|
+
];
|
|
17
|
+
const DELETE_TAG_PROPS = DEFAULT_TAG_PROPS.filter((field)=>field !== 'tagId');
|
|
18
|
+
const sanitizeTagProps = (tagProps = [], baseProps = DEFAULT_TAG_PROPS)=>{
|
|
19
|
+
const fields = [
|
|
20
|
+
...baseProps,
|
|
21
|
+
...tagProps
|
|
22
|
+
];
|
|
23
|
+
const seen = new Set();
|
|
24
|
+
return fields.reduce((result, field)=>{
|
|
25
|
+
const nextField = String(field || '').trim();
|
|
26
|
+
if (!nextField || seen.has(nextField)) {
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
seen.add(nextField);
|
|
30
|
+
result.push(nextField);
|
|
31
|
+
return result;
|
|
32
|
+
}, []);
|
|
33
|
+
};
|
|
34
|
+
const defaultTagValidator = (input, options)=>validateTagInput(input);
|
|
35
|
+
const createTagValidator = (customAdapter, options)=>(input, validatorOptions)=>{
|
|
36
|
+
const mergedOptions = {
|
|
37
|
+
...options,
|
|
38
|
+
...validatorOptions
|
|
39
|
+
};
|
|
40
|
+
let validated = defaultTagValidator(input, mergedOptions);
|
|
41
|
+
if (customAdapter) {
|
|
42
|
+
validated = customAdapter(validated, mergedOptions);
|
|
43
|
+
}
|
|
44
|
+
if (mergedOptions?.customValidation) {
|
|
45
|
+
validated = mergedOptions.customValidation(validated);
|
|
46
|
+
}
|
|
47
|
+
return validated;
|
|
48
|
+
};
|
|
49
|
+
export const createTagActions = (flux, options)=>{
|
|
50
|
+
let tagAdapterOptions = options?.tagAdapterOptions || {};
|
|
51
|
+
let customTagAdapter = options?.tagAdapter;
|
|
52
|
+
let validateTag = createTagValidator(customTagAdapter, tagAdapterOptions);
|
|
53
|
+
const updateTagAdapter = (adapter)=>{
|
|
54
|
+
customTagAdapter = adapter;
|
|
55
|
+
validateTag = createTagValidator(customTagAdapter, tagAdapterOptions);
|
|
56
|
+
};
|
|
57
|
+
const updateTagAdapterOptions = (options)=>{
|
|
58
|
+
tagAdapterOptions = {
|
|
59
|
+
...tagAdapterOptions,
|
|
60
|
+
...options
|
|
61
|
+
};
|
|
62
|
+
validateTag = createTagValidator(customTagAdapter, tagAdapterOptions);
|
|
63
|
+
};
|
|
64
|
+
const addTag = async (tag, tagProps = [], requestOptions = {})=>{
|
|
65
|
+
try {
|
|
66
|
+
const requestedTagProps = sanitizeTagProps(tagProps);
|
|
67
|
+
const queryVariables = {
|
|
68
|
+
tag: {
|
|
69
|
+
type: 'TagInput!',
|
|
70
|
+
value: validateTag(tag, tagAdapterOptions)
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const onSuccess = async (data)=>{
|
|
74
|
+
const tag = data?.tags?.addTag || {};
|
|
75
|
+
return await flux.dispatch({
|
|
76
|
+
tag,
|
|
77
|
+
type: TAG_CONSTANTS.ADD_ITEM_SUCCESS
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
return await appMutation(flux, 'addTag', DATA_TYPE, queryVariables, requestedTagProps, {
|
|
81
|
+
onSuccess
|
|
82
|
+
});
|
|
83
|
+
} catch (error) {
|
|
84
|
+
flux.dispatch({
|
|
85
|
+
error,
|
|
86
|
+
type: TAG_CONSTANTS.ADD_ITEM_ERROR
|
|
87
|
+
});
|
|
88
|
+
throw error;
|
|
89
|
+
} finally{
|
|
90
|
+
await clearCachedRequest(flux, 'tag.getTags');
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const addTagToItem = async (tagId, itemDocId = '', tagProps = [], requestOptions = {})=>{
|
|
94
|
+
try {
|
|
95
|
+
const session = flux.getState('user.session', {}) || {};
|
|
96
|
+
const sessionPersonaDocId = session?.personaId ? `personas/${session.personaId}` : '';
|
|
97
|
+
const existingPersonaTag = itemDocId === sessionPersonaDocId ? (session?.tags || []).find((tag)=>String(tag?.tagId || '').trim() === String(tagId || '').trim()) : null;
|
|
98
|
+
if (existingPersonaTag) {
|
|
99
|
+
return existingPersonaTag;
|
|
100
|
+
}
|
|
101
|
+
const requestedTagProps = sanitizeTagProps(tagProps);
|
|
102
|
+
const queryVariables = {
|
|
103
|
+
itemDocId: {
|
|
104
|
+
type: 'ID!',
|
|
105
|
+
value: itemDocId
|
|
106
|
+
},
|
|
107
|
+
tagId: {
|
|
108
|
+
type: 'ID!',
|
|
109
|
+
value: tagId
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const onSuccess = async (data)=>{
|
|
113
|
+
const tag = data?.tags?.addTagToItem || {};
|
|
114
|
+
if (itemDocId.startsWith('personas/')) {
|
|
115
|
+
return await flux.dispatch({
|
|
116
|
+
tag,
|
|
117
|
+
type: TAG_CONSTANTS.ADD_PERSONA_SUCCESS
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return await flux.dispatch({
|
|
121
|
+
itemDocId,
|
|
122
|
+
tag,
|
|
123
|
+
type: TAG_CONSTANTS.ADD_LINK_SUCCESS
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
return await appMutation(flux, 'addTagToItem', DATA_TYPE, queryVariables, requestedTagProps, {
|
|
127
|
+
onSuccess
|
|
128
|
+
});
|
|
129
|
+
} catch (error) {
|
|
130
|
+
flux.dispatch({
|
|
131
|
+
error,
|
|
132
|
+
type: TAG_CONSTANTS.ADD_PERSONA_ERROR
|
|
133
|
+
});
|
|
134
|
+
throw error;
|
|
135
|
+
} finally{
|
|
136
|
+
await clearCachedRequest(flux, 'tag.getTags');
|
|
137
|
+
await clearCachedRequest(flux, `tag.getTagsByItem:${itemDocId}`);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
const deleteTag = async (tagId, tagProps = [], requestOptions = {})=>{
|
|
141
|
+
try {
|
|
142
|
+
const requestedTagProps = sanitizeTagProps(tagProps, DELETE_TAG_PROPS);
|
|
143
|
+
const queryVariables = {
|
|
144
|
+
tagId: {
|
|
145
|
+
type: 'ID!',
|
|
146
|
+
value: tagId
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
const onSuccess = async (data)=>{
|
|
150
|
+
const tag = data?.tags?.deleteTag || {};
|
|
151
|
+
const deletedTag = {
|
|
152
|
+
...tag,
|
|
153
|
+
...tagId ? {
|
|
154
|
+
tagId
|
|
155
|
+
} : {}
|
|
156
|
+
};
|
|
157
|
+
return await flux.dispatch({
|
|
158
|
+
tag: deletedTag,
|
|
159
|
+
type: TAG_CONSTANTS.REMOVE_ITEM_SUCCESS
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
return await appMutation(flux, 'deleteTag', DATA_TYPE, queryVariables, requestedTagProps, {
|
|
163
|
+
onSuccess
|
|
164
|
+
});
|
|
165
|
+
} catch (error) {
|
|
166
|
+
flux.dispatch({
|
|
167
|
+
error,
|
|
168
|
+
type: TAG_CONSTANTS.REMOVE_ITEM_ERROR
|
|
169
|
+
});
|
|
170
|
+
throw error;
|
|
171
|
+
} finally{
|
|
172
|
+
await clearCachedRequest(flux, 'tag.getTags');
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
const deleteTagFromItem = async (tagId, itemDocId = '', requestOptions = {})=>{
|
|
176
|
+
try {
|
|
177
|
+
const queryVariables = {
|
|
178
|
+
itemDocId: {
|
|
179
|
+
type: 'ID!',
|
|
180
|
+
value: itemDocId
|
|
181
|
+
},
|
|
182
|
+
tagId: {
|
|
183
|
+
type: 'ID!',
|
|
184
|
+
value: tagId
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const onSuccess = async (data)=>{
|
|
188
|
+
const removed = data?.tags?.deleteTagFromItem ?? false;
|
|
189
|
+
if (removed && itemDocId.startsWith('personas/')) {
|
|
190
|
+
return await flux.dispatch({
|
|
191
|
+
tag: {
|
|
192
|
+
tagId
|
|
193
|
+
},
|
|
194
|
+
type: TAG_CONSTANTS.REMOVE_PERSONA_SUCCESS
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
return await flux.dispatch({
|
|
198
|
+
itemDocId,
|
|
199
|
+
removed,
|
|
200
|
+
tag: {
|
|
201
|
+
tagId
|
|
202
|
+
},
|
|
203
|
+
type: TAG_CONSTANTS.REMOVE_LINK_SUCCESS
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
return await appMutation(flux, 'deleteTagFromItem', DATA_TYPE, queryVariables, [], {
|
|
207
|
+
onSuccess
|
|
208
|
+
});
|
|
209
|
+
} catch (error) {
|
|
210
|
+
flux.dispatch({
|
|
211
|
+
error,
|
|
212
|
+
type: TAG_CONSTANTS.REMOVE_PERSONA_ERROR
|
|
213
|
+
});
|
|
214
|
+
throw error;
|
|
215
|
+
} finally{
|
|
216
|
+
await clearCachedRequest(flux, `tag.getTagsByItem:${itemDocId}`);
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
const getTags = async (searchQuery = '', tagProps = [], options = {})=>{
|
|
220
|
+
const initialTags = flux.getState('tag.list', []);
|
|
221
|
+
const cacheExpires = flux.getState('tag.expires', 0);
|
|
222
|
+
const now = Date.now();
|
|
223
|
+
const requestedTagProps = sanitizeTagProps(tagProps);
|
|
224
|
+
const cachedResult = getCachedRequest(flux, 'tag.getTags', {
|
|
225
|
+
searchQuery,
|
|
226
|
+
tagProps: requestedTagProps
|
|
227
|
+
}, options);
|
|
228
|
+
if (cachedResult !== undefined) {
|
|
229
|
+
return cachedResult;
|
|
230
|
+
}
|
|
231
|
+
if (initialTags.length && now < cacheExpires && !searchQuery && !options?.cacheTimeout) {
|
|
232
|
+
await flux.dispatch({
|
|
233
|
+
tags: initialTags,
|
|
234
|
+
type: TAG_CONSTANTS.GET_LIST_SUCCESS
|
|
235
|
+
});
|
|
236
|
+
return initialTags;
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
const queryVariables = searchQuery ? {
|
|
240
|
+
searchQuery: {
|
|
241
|
+
type: 'String',
|
|
242
|
+
value: searchQuery
|
|
243
|
+
}
|
|
244
|
+
} : {};
|
|
245
|
+
const onSuccess = async (data)=>{
|
|
246
|
+
const getTags = data?.tags?.getTags || [];
|
|
247
|
+
return await flux.dispatch({
|
|
248
|
+
tags: getTags,
|
|
249
|
+
type: TAG_CONSTANTS.GET_LIST_SUCCESS
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
const result = await appQuery(flux, 'getTags', DATA_TYPE, queryVariables, requestedTagProps, {
|
|
253
|
+
onSuccess
|
|
254
|
+
});
|
|
255
|
+
return await setCachedRequest(flux, 'tag.getTags', {
|
|
256
|
+
searchQuery,
|
|
257
|
+
tagProps: requestedTagProps
|
|
258
|
+
}, result, options);
|
|
259
|
+
} catch (error) {
|
|
260
|
+
flux.dispatch({
|
|
261
|
+
error,
|
|
262
|
+
type: TAG_CONSTANTS.GET_LIST_ERROR
|
|
263
|
+
});
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
const getTagsByItem = async (itemDocId, tagProps = [], requestOptions = {})=>{
|
|
268
|
+
try {
|
|
269
|
+
const requestedTagProps = sanitizeTagProps(tagProps);
|
|
270
|
+
const cachedResult = getCachedRequest(flux, `tag.getTagsByItem:${itemDocId}`, {
|
|
271
|
+
itemDocId,
|
|
272
|
+
tagProps: requestedTagProps
|
|
273
|
+
}, requestOptions);
|
|
274
|
+
if (cachedResult !== undefined) {
|
|
275
|
+
return cachedResult;
|
|
276
|
+
}
|
|
277
|
+
const queryVariables = {
|
|
278
|
+
itemDocId: {
|
|
279
|
+
type: 'ID!',
|
|
280
|
+
value: itemDocId
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
const onSuccess = async (data)=>{
|
|
284
|
+
const tags = data?.tags?.getTagsByItem || [];
|
|
285
|
+
return await flux.dispatch({
|
|
286
|
+
tags,
|
|
287
|
+
type: TAG_CONSTANTS.GET_LIST_SUCCESS
|
|
288
|
+
});
|
|
289
|
+
};
|
|
290
|
+
const result = await appQuery(flux, 'getTagsByItem', DATA_TYPE, queryVariables, requestedTagProps, {
|
|
291
|
+
onSuccess
|
|
292
|
+
});
|
|
293
|
+
return await setCachedRequest(flux, `tag.getTagsByItem:${itemDocId}`, {
|
|
294
|
+
itemDocId,
|
|
295
|
+
tagProps: requestedTagProps
|
|
296
|
+
}, result, requestOptions);
|
|
297
|
+
} catch (error) {
|
|
298
|
+
flux.dispatch({
|
|
299
|
+
error,
|
|
300
|
+
type: TAG_CONSTANTS.GET_LIST_ERROR
|
|
301
|
+
});
|
|
302
|
+
throw error;
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
const updateTag = async (tag, tagProps = [], requestOptions = {})=>{
|
|
306
|
+
try {
|
|
307
|
+
const requestedTagProps = sanitizeTagProps(tagProps);
|
|
308
|
+
const queryVariables = {
|
|
309
|
+
tag: {
|
|
310
|
+
type: 'TagInput!',
|
|
311
|
+
value: validateTag(tag, tagAdapterOptions)
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
const onSuccess = async (data)=>{
|
|
315
|
+
const tag = data?.tags?.updateTag || {};
|
|
316
|
+
return await flux.dispatch({
|
|
317
|
+
tag,
|
|
318
|
+
type: TAG_CONSTANTS.UPDATE_ITEM_SUCCESS
|
|
319
|
+
});
|
|
320
|
+
};
|
|
321
|
+
return await appMutation(flux, 'updateTag', DATA_TYPE, queryVariables, requestedTagProps, {
|
|
322
|
+
onSuccess
|
|
323
|
+
});
|
|
324
|
+
} catch (error) {
|
|
325
|
+
flux.dispatch({
|
|
326
|
+
error,
|
|
327
|
+
type: TAG_CONSTANTS.UPDATE_ITEM_ERROR
|
|
328
|
+
});
|
|
329
|
+
throw error;
|
|
330
|
+
} finally{
|
|
331
|
+
await clearCachedRequest(flux, 'tag.getTags');
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
return {
|
|
335
|
+
addTag,
|
|
336
|
+
addTagToItem,
|
|
337
|
+
deleteTag,
|
|
338
|
+
deleteTagFromItem,
|
|
339
|
+
getTagsByItem,
|
|
340
|
+
getTags,
|
|
341
|
+
updateTag,
|
|
342
|
+
updateTagAdapter,
|
|
343
|
+
updateTagAdapterOptions
|
|
344
|
+
};
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy90YWdBY3Rpb25zL3RhZ0FjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjEtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dmFsaWRhdGVUYWdJbnB1dH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdGFnQWRhcHRlci90YWdBZGFwdGVyLmpzJztcbmltcG9ydCB7VEFHX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vc3RvcmVzL3RhZ1N0b3JlLmpzJztcbmltcG9ydCB7YXBwTXV0YXRpb24sIGFwcFF1ZXJ5fSBmcm9tICcuLi8uLi91dGlscy9hcGkuanMnO1xuaW1wb3J0IHtjbGVhckNhY2hlZFJlcXVlc3QsIGdldENhY2hlZFJlcXVlc3QsIHNldENhY2hlZFJlcXVlc3R9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5cbmltcG9ydCB0eXBlIHtGbHV4QWN0aW9uLCBGbHV4RnJhbWV3b3JrfSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuaW1wb3J0IHR5cGUge1RhZ1R5cGV9IGZyb20gJy4uLy4uL2FkYXB0ZXJzL3RhZ0FkYXB0ZXIvdGFnQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uUmVxdWVzdE9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5cbmNvbnN0IERBVEFfVFlQRSA9ICd0YWdzJztcbmNvbnN0IERFRkFVTFRfVEFHX1BST1BTID0gWydhZGRlZCcsICdjYXRlZ29yeScsICdkZXNjcmlwdGlvbicsICdtb2RpZmllZCcsICduYW1lJywgJ3RhZ0lkJ107XG5jb25zdCBERUxFVEVfVEFHX1BST1BTID0gREVGQVVMVF9UQUdfUFJPUFMuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQgIT09ICd0YWdJZCcpO1xuXG5jb25zdCBzYW5pdGl6ZVRhZ1Byb3BzID0gKHRhZ1Byb3BzOiBzdHJpbmdbXSA9IFtdLCBiYXNlUHJvcHM6IHN0cmluZ1tdID0gREVGQVVMVF9UQUdfUFJPUFMpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGZpZWxkcyA9IFsuLi5iYXNlUHJvcHMsIC4uLnRhZ1Byb3BzXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHJldHVybiBmaWVsZHMucmVkdWNlKChyZXN1bHQ6IHN0cmluZ1tdLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbmV4dEZpZWxkID0gU3RyaW5nKGZpZWxkIHx8ICcnKS50cmltKCk7XG5cbiAgICBpZighbmV4dEZpZWxkIHx8IHNlZW4uaGFzKG5leHRGaWVsZCkpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgc2Vlbi5hZGQobmV4dEZpZWxkKTtcbiAgICByZXN1bHQucHVzaChuZXh0RmllbGQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtdKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnQWRhcHRlck9wdGlvbnMge1xuICBzdHJpY3Q/OiBib29sZWFuO1xuICBhbGxvd1BhcnRpYWw/OiBib29sZWFuO1xuICBlbnZpcm9ubWVudD86ICdkZXZlbG9wbWVudCcgfCAncHJvZHVjdGlvbicgfCAndGVzdCc7XG4gIGN1c3RvbVZhbGlkYXRpb24/OiAoaW5wdXQ6IHVua25vd24pID0+IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnQWN0aW9uc09wdGlvbnMge1xuICB0YWdBZGFwdGVyPzogKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogVGFnQWRhcHRlck9wdGlvbnMpID0+IGFueTtcbiAgdGFnQWRhcHRlck9wdGlvbnM/OiBUYWdBZGFwdGVyT3B0aW9ucztcbn1cblxuZXhwb3J0IHR5cGUgVGFnQXBpUmVzdWx0c1R5cGUgPSB7XG4gIHRhZ3M6IHtcbiAgICBhZGRUYWc6IFRhZ1R5cGU7XG4gICAgYWRkVGFnVG9JdGVtOiBUYWdUeXBlO1xuICAgIGRlbGV0ZVRhZzogVGFnVHlwZTtcbiAgICBkZWxldGVUYWdGcm9tSXRlbTogYm9vbGVhbjtcbiAgICBnZXRUYWdzQnlJdGVtOiBUYWdUeXBlW107XG4gICAgZ2V0VGFnczogVGFnVHlwZVtdO1xuICAgIHVwZGF0ZVRhZzogVGFnVHlwZTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFnQWN0aW9ucyB7XG4gIGFkZFRhZzogKHRhZzogUGFydGlhbDxUYWdUeXBlPiwgdGFnUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxUYWdUeXBlPjtcbiAgYWRkVGFnVG9JdGVtOiAodGFnSWQ6IHN0cmluZywgaXRlbURvY0lkPzogc3RyaW5nLCB0YWdQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFRhZ1R5cGU+O1xuICBkZWxldGVUYWc6ICh0YWdJZDogc3RyaW5nLCB0YWdQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFRhZ1R5cGU+O1xuICBkZWxldGVUYWdGcm9tSXRlbTogKHRhZ0lkOiBzdHJpbmcsIGl0ZW1Eb2NJZD86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgZ2V0VGFnc0J5SXRlbTogKGl0ZW1Eb2NJZDogc3RyaW5nLCB0YWdQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFRhZ1R5cGVbXT47XG4gIGdldFRhZ3M6IChcbiAgICBzZWFyY2hRdWVyeT86IHN0cmluZyxcbiAgICB0YWdQcm9wcz86IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VGFnVHlwZVtdPjtcbiAgdXBkYXRlVGFnOiAodGFnOiBQYXJ0aWFsPFRhZ1R5cGU+LCB0YWdQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFRhZ1R5cGU+O1xuICB1cGRhdGVUYWdBZGFwdGVyOiAoYWRhcHRlcjogKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogVGFnQWRhcHRlck9wdGlvbnMpID0+IGFueSkgPT4gdm9pZDtcbiAgdXBkYXRlVGFnQWRhcHRlck9wdGlvbnM6IChvcHRpb25zOiBUYWdBZGFwdGVyT3B0aW9ucykgPT4gdm9pZDtcbn1cblxuY29uc3QgZGVmYXVsdFRhZ1ZhbGlkYXRvciA9IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFRhZ0FkYXB0ZXJPcHRpb25zKSA9PiB2YWxpZGF0ZVRhZ0lucHV0KGlucHV0KTtcblxuY29uc3QgY3JlYXRlVGFnVmFsaWRhdG9yID0gKFxuICBjdXN0b21BZGFwdGVyPzogKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogVGFnQWRhcHRlck9wdGlvbnMpID0+IGFueSxcbiAgb3B0aW9ucz86IFRhZ0FkYXB0ZXJPcHRpb25zXG4pID0+IChpbnB1dDogdW5rbm93biwgdmFsaWRhdG9yT3B0aW9ucz86IFRhZ0FkYXB0ZXJPcHRpb25zKSA9PiB7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7Li4ub3B0aW9ucywgLi4udmFsaWRhdG9yT3B0aW9uc307XG4gIGxldCB2YWxpZGF0ZWQgPSBkZWZhdWx0VGFnVmFsaWRhdG9yKGlucHV0LCBtZXJnZWRPcHRpb25zKTtcblxuICBpZihjdXN0b21BZGFwdGVyKSB7XG4gICAgdmFsaWRhdGVkID0gY3VzdG9tQWRhcHRlcih2YWxpZGF0ZWQsIG1lcmdlZE9wdGlvbnMpO1xuICB9XG5cbiAgaWYobWVyZ2VkT3B0aW9ucz8uY3VzdG9tVmFsaWRhdGlvbikge1xuICAgIHZhbGlkYXRlZCA9IG1lcmdlZE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbih2YWxpZGF0ZWQpIGFzIFRhZ1R5cGU7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRhZ0FjdGlvbnMgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG9wdGlvbnM/OiBUYWdBY3Rpb25zT3B0aW9uc1xuKTogVGFnQWN0aW9ucyA9PiB7XG4gIGxldCB0YWdBZGFwdGVyT3B0aW9ucyA9IG9wdGlvbnM/LnRhZ0FkYXB0ZXJPcHRpb25zIHx8IHt9O1xuICBsZXQgY3VzdG9tVGFnQWRhcHRlciA9IG9wdGlvbnM/LnRhZ0FkYXB0ZXI7XG4gIGxldCB2YWxpZGF0ZVRhZyA9IGNyZWF0ZVRhZ1ZhbGlkYXRvcihjdXN0b21UYWdBZGFwdGVyLCB0YWdBZGFwdGVyT3B0aW9ucyk7XG5cbiAgY29uc3QgdXBkYXRlVGFnQWRhcHRlciA9IChhZGFwdGVyOiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBUYWdBZGFwdGVyT3B0aW9ucykgPT4gYW55KTogdm9pZCA9PiB7XG4gICAgY3VzdG9tVGFnQWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgdmFsaWRhdGVUYWcgPSBjcmVhdGVUYWdWYWxpZGF0b3IoY3VzdG9tVGFnQWRhcHRlciwgdGFnQWRhcHRlck9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVRhZ0FkYXB0ZXJPcHRpb25zID0gKG9wdGlvbnM6IFRhZ0FkYXB0ZXJPcHRpb25zKTogdm9pZCA9PiB7XG4gICAgdGFnQWRhcHRlck9wdGlvbnMgPSB7Li4udGFnQWRhcHRlck9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICAgIHZhbGlkYXRlVGFnID0gY3JlYXRlVGFnVmFsaWRhdG9yKGN1c3RvbVRhZ0FkYXB0ZXIsIHRhZ0FkYXB0ZXJPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBhZGRUYWcgPSBhc3luYyAodGFnOiBQYXJ0aWFsPFRhZ1R5cGU+LCB0YWdQcm9wczogc3RyaW5nW10gPSBbXSwgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdGVkVGFnUHJvcHMgPSBzYW5pdGl6ZVRhZ1Byb3BzKHRhZ1Byb3BzKTtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICB0YWc6IHtcbiAgICAgICAgICB0eXBlOiAnVGFnSW5wdXQhJyxcbiAgICAgICAgICB2YWx1ZTogdmFsaWRhdGVUYWcodGFnLCB0YWdBZGFwdGVyT3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gYXN5bmMgKGRhdGE6IFRhZ0FwaVJlc3VsdHNUeXBlKTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICAgIGNvbnN0IHRhZyA9IGRhdGE/LnRhZ3M/LmFkZFRhZyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZsdXguZGlzcGF0Y2goe3RhZywgdHlwZTogVEFHX0NPTlNUQU5UUy5BRERfSVRFTV9TVUNDRVNTfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb248VGFnVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdhZGRUYWcnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXF1ZXN0ZWRUYWdQcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFRBR19DT05TVEFOVFMuQUREX0lURU1fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgJ3RhZy5nZXRUYWdzJyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFkZFRhZ1RvSXRlbSA9IGFzeW5jIChcbiAgICB0YWdJZDogc3RyaW5nLFxuICAgIGl0ZW1Eb2NJZCA9ICcnLFxuICAgIHRhZ1Byb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMge3BlcnNvbmFJZD86IHN0cmluZzsgdGFncz86IFRhZ1R5cGVbXX07XG4gICAgICBjb25zdCBzZXNzaW9uUGVyc29uYURvY0lkID0gc2Vzc2lvbj8ucGVyc29uYUlkID8gYHBlcnNvbmFzLyR7c2Vzc2lvbi5wZXJzb25hSWR9YCA6ICcnO1xuICAgICAgY29uc3QgZXhpc3RpbmdQZXJzb25hVGFnID0gaXRlbURvY0lkID09PSBzZXNzaW9uUGVyc29uYURvY0lkXG4gICAgICAgID8gKHNlc3Npb24/LnRhZ3MgfHwgW10pLmZpbmQoKHRhZykgPT4gU3RyaW5nKHRhZz8udGFnSWQgfHwgJycpLnRyaW0oKSA9PT0gU3RyaW5nKHRhZ0lkIHx8ICcnKS50cmltKCkpXG4gICAgICAgIDogbnVsbDtcblxuICAgICAgaWYoZXhpc3RpbmdQZXJzb25hVGFnKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1BlcnNvbmFUYWc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RlZFRhZ1Byb3BzID0gc2FuaXRpemVUYWdQcm9wcyh0YWdQcm9wcyk7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaXRlbURvY0lkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgICAgdmFsdWU6IGl0ZW1Eb2NJZFxuICAgICAgICB9LFxuICAgICAgICB0YWdJZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiB0YWdJZFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSBhc3luYyAoZGF0YTogVGFnQXBpUmVzdWx0c1R5cGUpOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgICAgY29uc3QgdGFnID0gZGF0YT8udGFncz8uYWRkVGFnVG9JdGVtIHx8IHt9O1xuXG4gICAgICAgIGlmKGl0ZW1Eb2NJZC5zdGFydHNXaXRoKCdwZXJzb25hcy8nKSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0YWcsIHR5cGU6IFRBR19DT05TVEFOVFMuQUREX1BFUlNPTkFfU1VDQ0VTU30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGZsdXguZGlzcGF0Y2goe2l0ZW1Eb2NJZCwgdGFnLCB0eXBlOiBUQUdfQ09OU1RBTlRTLkFERF9MSU5LX1NVQ0NFU1N9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxUYWdUeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2FkZFRhZ1RvSXRlbScsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJlcXVlc3RlZFRhZ1Byb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVEFHX0NPTlNUQU5UUy5BRERfUEVSU09OQV9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndGFnLmdldFRhZ3MnKTtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCBgdGFnLmdldFRhZ3NCeUl0ZW06JHtpdGVtRG9jSWR9YCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZVRhZyA9IGFzeW5jICh0YWdJZDogc3RyaW5nLCB0YWdQcm9wczogc3RyaW5nW10gPSBbXSwgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdGVkVGFnUHJvcHMgPSBzYW5pdGl6ZVRhZ1Byb3BzKHRhZ1Byb3BzLCBERUxFVEVfVEFHX1BST1BTKTtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICB0YWdJZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiB0YWdJZFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSBhc3luYyAoZGF0YTogVGFnQXBpUmVzdWx0c1R5cGUpOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgICAgY29uc3QgdGFnID0gZGF0YT8udGFncz8uZGVsZXRlVGFnIHx8IHt9O1xuICAgICAgICBjb25zdCBkZWxldGVkVGFnID0ge1xuICAgICAgICAgIC4uLnRhZyxcbiAgICAgICAgICAuLi4odGFnSWQgPyB7dGFnSWR9IDoge30pXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0YWc6IGRlbGV0ZWRUYWcsIHR5cGU6IFRBR19DT05TVEFOVFMuUkVNT1ZFX0lURU1fU1VDQ0VTU30pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uPFRhZ1R5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnZGVsZXRlVGFnJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmVxdWVzdGVkVGFnUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBUQUdfQ09OU1RBTlRTLlJFTU9WRV9JVEVNX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd0YWcuZ2V0VGFncycpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWxldGVUYWdGcm9tSXRlbSA9IGFzeW5jIChcbiAgICB0YWdJZDogc3RyaW5nLFxuICAgIGl0ZW1Eb2NJZCA9ICcnLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaXRlbURvY0lkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgICAgdmFsdWU6IGl0ZW1Eb2NJZFxuICAgICAgICB9LFxuICAgICAgICB0YWdJZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiB0YWdJZFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSBhc3luYyAoZGF0YTogVGFnQXBpUmVzdWx0c1R5cGUpOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGRhdGE/LnRhZ3M/LmRlbGV0ZVRhZ0Zyb21JdGVtID8/IGZhbHNlO1xuXG4gICAgICAgIGlmKHJlbW92ZWQgJiYgaXRlbURvY0lkLnN0YXJ0c1dpdGgoJ3BlcnNvbmFzLycpKSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgICAgdGFnOiB7dGFnSWR9LFxuICAgICAgICAgICAgdHlwZTogVEFHX0NPTlNUQU5UUy5SRU1PVkVfUEVSU09OQV9TVUNDRVNTXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgICAgaXRlbURvY0lkLFxuICAgICAgICAgIHJlbW92ZWQsXG4gICAgICAgICAgdGFnOiB7dGFnSWR9LFxuICAgICAgICAgIHR5cGU6IFRBR19DT05TVEFOVFMuUkVNT1ZFX0xJTktfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxib29sZWFuPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2RlbGV0ZVRhZ0Zyb21JdGVtJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBUQUdfQ09OU1RBTlRTLlJFTU9WRV9QRVJTT05BX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGB0YWcuZ2V0VGFnc0J5SXRlbToke2l0ZW1Eb2NJZH1gKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0VGFncyA9IGFzeW5jIChcbiAgICBzZWFyY2hRdWVyeSA9ICcnLFxuICAgIHRhZ1Byb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIG9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgICBjb25zdCBpbml0aWFsVGFncyA9IGZsdXguZ2V0U3RhdGUoJ3RhZy5saXN0JywgW10pIGFzIFRhZ1R5cGVbXTtcbiAgICBjb25zdCBjYWNoZUV4cGlyZXMgPSBmbHV4LmdldFN0YXRlKCd0YWcuZXhwaXJlcycsIDApIGFzIG51bWJlcjtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RlZFRhZ1Byb3BzID0gc2FuaXRpemVUYWdQcm9wcyh0YWdQcm9wcyk7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxUYWdUeXBlW10gfCBGbHV4QWN0aW9uPihcbiAgICAgIGZsdXgsXG4gICAgICAndGFnLmdldFRhZ3MnLFxuICAgICAge3NlYXJjaFF1ZXJ5LCB0YWdQcm9wczogcmVxdWVzdGVkVGFnUHJvcHN9LFxuICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICBpZihjYWNoZWRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdCBhcyBUYWdUeXBlW107XG4gICAgfVxuXG4gICAgaWYoaW5pdGlhbFRhZ3MubGVuZ3RoICYmIG5vdyA8IGNhY2hlRXhwaXJlcyAmJiAhc2VhcmNoUXVlcnkgJiYgIW9wdGlvbnM/LmNhY2hlVGltZW91dCkge1xuICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dGFnczogaW5pdGlhbFRhZ3MsIHR5cGU6IFRBR19DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU30pO1xuICAgICAgcmV0dXJuIGluaXRpYWxUYWdzO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHNlYXJjaFF1ZXJ5XG4gICAgICAgID8ge1xuICAgICAgICAgIHNlYXJjaFF1ZXJ5OiB7XG4gICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hRdWVyeVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHt9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSBhc3luYyAoZGF0YTogVGFnQXBpUmVzdWx0c1R5cGUpOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgICAgY29uc3QgZ2V0VGFncyA9IGRhdGE/LnRhZ3M/LmdldFRhZ3MgfHwgW107XG4gICAgICAgIHJldHVybiBhd2FpdCBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICB0YWdzOiBnZXRUYWdzLFxuICAgICAgICAgIHR5cGU6IFRBR19DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcFF1ZXJ5PFRhZ1R5cGVbXT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdnZXRUYWdzJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmVxdWVzdGVkVGFnUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgICAgcmV0dXJuIGF3YWl0IHNldENhY2hlZFJlcXVlc3QoZmx1eCwgJ3RhZy5nZXRUYWdzJywge3NlYXJjaFF1ZXJ5LCB0YWdQcm9wczogcmVxdWVzdGVkVGFnUHJvcHN9LCByZXN1bHQsIG9wdGlvbnMpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBUQUdfQ09OU1RBTlRTLkdFVF9MSVNUX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0VGFnc0J5SXRlbSA9IGFzeW5jIChcbiAgICBpdGVtRG9jSWQ6IHN0cmluZyxcbiAgICB0YWdQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFRhZ1R5cGVbXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ZWRUYWdQcm9wcyA9IHNhbml0aXplVGFnUHJvcHModGFnUHJvcHMpO1xuICAgICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxUYWdUeXBlW10gfCBGbHV4QWN0aW9uPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgYHRhZy5nZXRUYWdzQnlJdGVtOiR7aXRlbURvY0lkfWAsXG4gICAgICAgIHtpdGVtRG9jSWQsIHRhZ1Byb3BzOiByZXF1ZXN0ZWRUYWdQcm9wc30sXG4gICAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgICApO1xuXG4gICAgICBpZihjYWNoZWRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkUmVzdWx0IGFzIFRhZ1R5cGVbXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1Eb2NJZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBpdGVtRG9jSWRcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gYXN5bmMgKGRhdGE6IFRhZ0FwaVJlc3VsdHNUeXBlKTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBkYXRhPy50YWdzPy5nZXRUYWdzQnlJdGVtIHx8IFtdO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICB0YWdzLFxuICAgICAgICAgIHR5cGU6IFRBR19DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcFF1ZXJ5PFRhZ1R5cGVbXT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdnZXRUYWdzQnlJdGVtJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmVxdWVzdGVkVGFnUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgICAgcmV0dXJuIGF3YWl0IHNldENhY2hlZFJlcXVlc3QoZmx1eCwgYHRhZy5nZXRUYWdzQnlJdGVtOiR7aXRlbURvY0lkfWAsIHtpdGVtRG9jSWQsIHRhZ1Byb3BzOiByZXF1ZXN0ZWRUYWdQcm9wc30sIHJlc3VsdCwgcmVxdWVzdE9wdGlvbnMpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBUQUdfQ09OU1RBTlRTLkdFVF9MSVNUX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlVGFnID0gYXN5bmMgKHRhZzogUGFydGlhbDxUYWdUeXBlPiwgdGFnUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RlZFRhZ1Byb3BzID0gc2FuaXRpemVUYWdQcm9wcyh0YWdQcm9wcyk7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgdGFnOiB7XG4gICAgICAgICAgdHlwZTogJ1RhZ0lucHV0IScsXG4gICAgICAgICAgdmFsdWU6IHZhbGlkYXRlVGFnKHRhZywgdGFnQWRhcHRlck9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IGFzeW5jIChkYXRhOiBUYWdBcGlSZXN1bHRzVHlwZSk6IFByb21pc2U8Rmx1eEFjdGlvbj4gPT4ge1xuICAgICAgICBjb25zdCB0YWcgPSBkYXRhPy50YWdzPy51cGRhdGVUYWcgfHwge307XG4gICAgICAgIHJldHVybiBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0YWcsIHR5cGU6IFRBR19DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTU30pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uPFRhZ1R5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAndXBkYXRlVGFnJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmVxdWVzdGVkVGFnUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBUQUdfQ09OU1RBTlRTLlVQREFURV9JVEVNX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd0YWcuZ2V0VGFncycpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFkZFRhZyxcbiAgICBhZGRUYWdUb0l0ZW0sXG4gICAgZGVsZXRlVGFnLFxuICAgIGRlbGV0ZVRhZ0Zyb21JdGVtLFxuICAgIGdldFRhZ3NCeUl0ZW0sXG4gICAgZ2V0VGFncyxcbiAgICB1cGRhdGVUYWcsXG4gICAgdXBkYXRlVGFnQWRhcHRlcixcbiAgICB1cGRhdGVUYWdBZGFwdGVyT3B0aW9uc1xuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVRhZ0lucHV0IiwiVEFHX0NPTlNUQU5UUyIsImFwcE11dGF0aW9uIiwiYXBwUXVlcnkiLCJjbGVhckNhY2hlZFJlcXVlc3QiLCJnZXRDYWNoZWRSZXF1ZXN0Iiwic2V0Q2FjaGVkUmVxdWVzdCIsIkRBVEFfVFlQRSIsIkRFRkFVTFRfVEFHX1BST1BTIiwiREVMRVRFX1RBR19QUk9QUyIsImZpbHRlciIsImZpZWxkIiwic2FuaXRpemVUYWdQcm9wcyIsInRhZ1Byb3BzIiwiYmFzZVByb3BzIiwiZmllbGRzIiwic2VlbiIsIlNldCIsInJlZHVjZSIsInJlc3VsdCIsIm5leHRGaWVsZCIsIlN0cmluZyIsInRyaW0iLCJoYXMiLCJhZGQiLCJwdXNoIiwiZGVmYXVsdFRhZ1ZhbGlkYXRvciIsImlucHV0Iiwib3B0aW9ucyIsImNyZWF0ZVRhZ1ZhbGlkYXRvciIsImN1c3RvbUFkYXB0ZXIiLCJ2YWxpZGF0b3JPcHRpb25zIiwibWVyZ2VkT3B0aW9ucyIsInZhbGlkYXRlZCIsImN1c3RvbVZhbGlkYXRpb24iLCJjcmVhdGVUYWdBY3Rpb25zIiwiZmx1eCIsInRhZ0FkYXB0ZXJPcHRpb25zIiwiY3VzdG9tVGFnQWRhcHRlciIsInRhZ0FkYXB0ZXIiLCJ2YWxpZGF0ZVRhZyIsInVwZGF0ZVRhZ0FkYXB0ZXIiLCJhZGFwdGVyIiwidXBkYXRlVGFnQWRhcHRlck9wdGlvbnMiLCJhZGRUYWciLCJ0YWciLCJyZXF1ZXN0T3B0aW9ucyIsInJlcXVlc3RlZFRhZ1Byb3BzIiwicXVlcnlWYXJpYWJsZXMiLCJ0eXBlIiwidmFsdWUiLCJvblN1Y2Nlc3MiLCJkYXRhIiwidGFncyIsImRpc3BhdGNoIiwiQUREX0lURU1fU1VDQ0VTUyIsImVycm9yIiwiQUREX0lURU1fRVJST1IiLCJhZGRUYWdUb0l0ZW0iLCJ0YWdJZCIsIml0ZW1Eb2NJZCIsInNlc3Npb24iLCJnZXRTdGF0ZSIsInNlc3Npb25QZXJzb25hRG9jSWQiLCJwZXJzb25hSWQiLCJleGlzdGluZ1BlcnNvbmFUYWciLCJmaW5kIiwic3RhcnRzV2l0aCIsIkFERF9QRVJTT05BX1NVQ0NFU1MiLCJBRERfTElOS19TVUNDRVNTIiwiQUREX1BFUlNPTkFfRVJST1IiLCJkZWxldGVUYWciLCJkZWxldGVkVGFnIiwiUkVNT1ZFX0lURU1fU1VDQ0VTUyIsIlJFTU9WRV9JVEVNX0VSUk9SIiwiZGVsZXRlVGFnRnJvbUl0ZW0iLCJyZW1vdmVkIiwiUkVNT1ZFX1BFUlNPTkFfU1VDQ0VTUyIsIlJFTU9WRV9MSU5LX1NVQ0NFU1MiLCJSRU1PVkVfUEVSU09OQV9FUlJPUiIsImdldFRhZ3MiLCJzZWFyY2hRdWVyeSIsImluaXRpYWxUYWdzIiwiY2FjaGVFeHBpcmVzIiwibm93IiwiRGF0ZSIsImNhY2hlZFJlc3VsdCIsInVuZGVmaW5lZCIsImxlbmd0aCIsImNhY2hlVGltZW91dCIsIkdFVF9MSVNUX1NVQ0NFU1MiLCJHRVRfTElTVF9FUlJPUiIsImdldFRhZ3NCeUl0ZW0iLCJ1cGRhdGVUYWciLCJVUERB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
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/
|
|
5
|
+
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
6
|
+
import type { TranslationType } from '../../stores/translationStore.js';
|
|
7
|
+
import type { BaseAdapterOptions } from '../../utils/validatorFactory.js';
|
|
8
|
+
import type { ActionRequestOptions } from '../../utils/requestCache.js';
|
|
9
|
+
export interface TranslationInputType {
|
|
10
|
+
readonly key: string;
|
|
11
|
+
readonly locale: string;
|
|
12
|
+
readonly value: string;
|
|
13
|
+
readonly namespace?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface TranslationActionsOptions {
|
|
16
|
+
translationAdapter?: (input: unknown, options?: BaseAdapterOptions) => any;
|
|
17
|
+
translationAdapterOptions?: BaseAdapterOptions;
|
|
18
|
+
autoSyncI18n?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export type TranslationApiResultsType = {
|
|
21
|
+
translations: {
|
|
22
|
+
addTranslations: TranslationType[];
|
|
23
|
+
getTranslations: TranslationType[];
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export interface TranslationActions {
|
|
27
|
+
addTranslations: (translations: TranslationInputType[], translationProps?: string[], requestOptions?: ActionRequestOptions) => Promise<TranslationType[]>;
|
|
28
|
+
getTranslation: (key: string, locale: string, namespace?: string) => string | null;
|
|
29
|
+
getTranslations: (keys: string[], locale: string, namespace?: string, translationProps?: string[], requestOptions?: ActionRequestOptions) => Promise<TranslationType[]>;
|
|
30
|
+
hasTranslation: (key: string, locale: string, namespace?: string) => boolean;
|
|
31
|
+
processPendingTranslations: (locale: string, namespace?: string, requestOptions?: ActionRequestOptions) => Promise<void>;
|
|
32
|
+
queueTranslationKey: (key: string, locale: string, namespace?: string) => void;
|
|
33
|
+
syncWithI18n: () => void;
|
|
34
|
+
updateTranslationAdapter: (adapter: (input: unknown, options?: BaseAdapterOptions) => any) => void;
|
|
35
|
+
updateTranslationAdapterOptions: (options: BaseAdapterOptions) => void;
|
|
36
|
+
}
|
|
37
|
+
export declare const createTranslationActions: (flux: FluxFramework, options?: TranslationActionsOptions) => TranslationActions;
|
|
38
|
+
//# sourceMappingURL=translationActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translationActions.d.ts","sourceRoot":"","sources":["../../../src/actions/translationActions/translationActions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kCAAkC,CAAC;AAEtE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AAItE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,GAAG,CAAC;IAC3E,yBAAyB,CAAC,EAAE,kBAAkB,CAAC;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,EAAE;QACZ,eAAe,EAAE,eAAe,EAAE,CAAC;QACnC,eAAe,EAAE,eAAe,EAAE,CAAC;KACpC,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAE,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC1J,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACnF,eAAe,EAAE,CACf,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAC3B,cAAc,CAAC,EAAE,oBAAoB,KAClC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAChC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7E,0BAA0B,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzH,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/E,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,wBAAwB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,GAAG,KAAK,IAAI,CAAC;IACnG,+BAA+B,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACxE;AAID,eAAO,MAAM,wBAAwB,GACnC,MAAM,aAAa,EACnB,UAAU,yBAAyB,KAClC,kBA0LF,CAAC"}
|