@nlabs/metropolisjs 0.1.1 → 0.1.2

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.
Files changed (121) hide show
  1. package/FACTORY_PATTERN_GUIDE.md +244 -0
  2. package/README.md +332 -0
  3. package/examples/factory-pattern-usage.ts +283 -0
  4. package/lex.config.mjs +17 -0
  5. package/lib/actions/eventActions/eventActions.d.ts +45 -0
  6. package/lib/actions/eventActions/eventActions.js +2 -0
  7. package/lib/actions/imageActions/imageActions.d.ts +56 -0
  8. package/lib/actions/imageActions/imageActions.js +2 -0
  9. package/lib/actions/index.d.ts +9 -0
  10. package/lib/actions/index.js +2 -0
  11. package/lib/actions/locationActions/locationActions.d.ts +58 -0
  12. package/lib/actions/locationActions/locationActions.js +2 -0
  13. package/lib/actions/messageActions/messageActions.d.ts +54 -0
  14. package/lib/actions/messageActions/messageActions.js +2 -0
  15. package/lib/actions/postActions/postActions.d.ts +56 -0
  16. package/lib/actions/postActions/postActions.js +2 -0
  17. package/lib/actions/profileActions/profileActions.d.ts +50 -0
  18. package/lib/actions/profileActions/profileActions.js +2 -0
  19. package/lib/actions/reactionActions/reactionActions.d.ts +52 -0
  20. package/lib/actions/reactionActions/reactionActions.js +2 -0
  21. package/lib/actions/sseActions/sseActions.d.ts +37 -0
  22. package/lib/actions/sseActions/sseActions.js +2 -0
  23. package/lib/actions/tagActions/tagActions.d.ts +55 -0
  24. package/lib/actions/tagActions/tagActions.js +2 -0
  25. package/lib/actions/userActions/userActions.d.ts +131 -0
  26. package/lib/actions/userActions/userActions.js +2 -0
  27. package/lib/actions/websocketActions/websocketActions.d.ts +31 -0
  28. package/lib/actions/websocketActions/websocketActions.js +2 -0
  29. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +20 -0
  30. package/lib/adapters/arangoAdapter/arangoAdapter.js +2 -0
  31. package/lib/adapters/contentAdapter/contentAdapter.d.ts +31 -0
  32. package/lib/adapters/contentAdapter/contentAdapter.js +2 -0
  33. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +23 -0
  34. package/lib/adapters/conversationAdapter/conversationAdapter.js +2 -0
  35. package/lib/adapters/eventAdapter/eventAdapter.d.ts +43 -0
  36. package/lib/adapters/eventAdapter/eventAdapter.js +2 -0
  37. package/lib/adapters/fileAdapter/fileAdapter.d.ts +29 -0
  38. package/lib/adapters/fileAdapter/fileAdapter.js +2 -0
  39. package/lib/adapters/imageAdapter/imageAdapter.d.ts +31 -0
  40. package/lib/adapters/imageAdapter/imageAdapter.js +2 -0
  41. package/lib/adapters/index.d.ts +16 -0
  42. package/lib/adapters/index.js +2 -0
  43. package/lib/adapters/locationAdapter/locationAdapter.d.ts +27 -0
  44. package/lib/adapters/locationAdapter/locationAdapter.js +2 -0
  45. package/lib/adapters/messageAdapter/messageAdapter.d.ts +27 -0
  46. package/lib/adapters/messageAdapter/messageAdapter.js +2 -0
  47. package/lib/adapters/personaAdapter/personaAdapter.d.ts +18 -0
  48. package/lib/adapters/personaAdapter/personaAdapter.js +2 -0
  49. package/lib/adapters/postAdapter/postAdapter.d.ts +32 -0
  50. package/lib/adapters/postAdapter/postAdapter.js +2 -0
  51. package/lib/adapters/profileAdapter/profileAdapter.d.ts +32 -0
  52. package/lib/adapters/profileAdapter/profileAdapter.js +2 -0
  53. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +20 -0
  54. package/lib/adapters/reactionAdapter/reactionAdapter.js +2 -0
  55. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +16 -0
  56. package/lib/adapters/reaktorAdapter/reaktorAdapter.js +2 -0
  57. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +23 -0
  58. package/lib/adapters/sessionAdapter/sessionAdapter.js +2 -0
  59. package/lib/adapters/tagAdapter/tagAdapter.d.ts +20 -0
  60. package/lib/adapters/tagAdapter/tagAdapter.js +2 -0
  61. package/lib/adapters/userAdapter/userAdapter.d.ts +55 -0
  62. package/lib/adapters/userAdapter/userAdapter.js +2 -0
  63. package/lib/config/index.d.ts +31 -0
  64. package/lib/config/index.js +2 -0
  65. package/lib/constants/MetropolisConstants.d.ts +14 -0
  66. package/lib/constants/MetropolisConstants.js +2 -0
  67. package/lib/graphql/message.d.ts +2 -0
  68. package/lib/graphql/message.js +18 -0
  69. package/lib/graphql/notification.d.ts +2 -0
  70. package/lib/graphql/notification.js +18 -0
  71. package/lib/graphql/session.d.ts +1 -0
  72. package/lib/graphql/session.js +16 -0
  73. package/lib/index.d.ts +29 -0
  74. package/lib/index.js +2 -0
  75. package/lib/stores/appStore.d.ts +22 -0
  76. package/lib/stores/appStore.js +2 -0
  77. package/lib/stores/eventStore.d.ts +34 -0
  78. package/lib/stores/eventStore.js +2 -0
  79. package/lib/stores/imageStore.d.ts +35 -0
  80. package/lib/stores/imageStore.js +2 -0
  81. package/lib/stores/index.d.ts +15 -0
  82. package/lib/stores/index.js +2 -0
  83. package/lib/stores/locationStore.d.ts +33 -0
  84. package/lib/stores/locationStore.js +2 -0
  85. package/lib/stores/messageStore.d.ts +36 -0
  86. package/lib/stores/messageStore.js +2 -0
  87. package/lib/stores/postStore.d.ts +33 -0
  88. package/lib/stores/postStore.js +2 -0
  89. package/lib/stores/profileStore.d.ts +24 -0
  90. package/lib/stores/profileStore.js +2 -0
  91. package/lib/stores/reactionStore.d.ts +24 -0
  92. package/lib/stores/reactionStore.js +2 -0
  93. package/lib/stores/tagStore.d.ts +31 -0
  94. package/lib/stores/tagStore.js +2 -0
  95. package/lib/stores/userStore.d.ts +73 -0
  96. package/lib/stores/userStore.js +2 -0
  97. package/lib/stores/websocketStore.d.ts +23 -0
  98. package/lib/stores/websocketStore.js +2 -0
  99. package/lib/utils/MetropolisProvider.d.ts +34 -0
  100. package/lib/utils/MetropolisProvider.js +2 -0
  101. package/lib/utils/actionFactory.d.ts +22 -0
  102. package/lib/utils/actionFactory.js +2 -0
  103. package/lib/utils/api.d.ts +43 -0
  104. package/lib/utils/api.js +7 -0
  105. package/lib/utils/app.d.ts +6 -0
  106. package/lib/utils/app.js +2 -0
  107. package/lib/utils/baseActionFactory.d.ts +34 -0
  108. package/lib/utils/baseActionFactory.js +2 -0
  109. package/lib/utils/dateUtils.d.ts +2 -0
  110. package/lib/utils/dateUtils.js +2 -0
  111. package/lib/utils/file.d.ts +1 -0
  112. package/lib/utils/file.js +2 -0
  113. package/lib/utils/location.d.ts +9 -0
  114. package/lib/utils/location.js +2 -0
  115. package/lib/utils/useMetropolis.d.ts +12 -0
  116. package/lib/utils/useMetropolis.js +2 -0
  117. package/lib/utils/validatorFactory.d.ts +48 -0
  118. package/lib/utils/validatorFactory.js +2 -0
  119. package/package.json +33 -27
  120. package/tsconfig.lint.json +25 -0
  121. package/tsconfig.test.json +14 -0
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Example: Using the Factory Pattern in MetropolisJS
3
+ *
4
+ * This file demonstrates how to use the new consolidated action factory
5
+ * instead of individual createXxxActions functions.
6
+ */
7
+
8
+ import type { FluxFramework } from '@nlabs/arkhamjs';
9
+ import { createAction, createActions, createAllActions } from '../src/utils/actionFactory';
10
+
11
+ // Example 1: Basic Usage
12
+ export const basicUsage = (flux: FluxFramework) => {
13
+ // Create actions using consolidated factory functions
14
+ const userActions = createAction('user', flux) as any;
15
+ const postActions = createAction('post', flux) as any;
16
+ const eventActions = createAction('event', flux) as any;
17
+
18
+ // Use actions normally
19
+ const addUser = async () => {
20
+ const user = await userActions.add({
21
+ username: 'john_doe',
22
+ email: 'john@example.com',
23
+ firstName: 'John',
24
+ lastName: 'Doe'
25
+ });
26
+ return user;
27
+ };
28
+
29
+ const createPost = async () => {
30
+ const post = await postActions.add({
31
+ content: 'Hello, world!',
32
+ name: 'My First Post'
33
+ });
34
+ return post;
35
+ };
36
+
37
+ return {addUser, createPost};
38
+ };
39
+
40
+ // Example 2: Custom Adapter with Business Logic
41
+ export const customAdapterUsage = (flux: FluxFramework) => {
42
+ // Custom user adapter that adds business logic
43
+ const businessUserAdapter = (input: unknown, options?: any) => {
44
+ const user = input as any;
45
+
46
+ // Business validation
47
+ if (user.email && !user.email.includes('@company.com')) {
48
+ throw new Error('Only company emails are allowed');
49
+ }
50
+
51
+ // Add computed fields
52
+ return {
53
+ ...user,
54
+ fullName: `${user.firstName || ''} ${user.lastName || ''}`.trim(),
55
+ isAdmin: user.userAccess >= 3,
56
+ department: user.email?.split('@')[0]?.split('.')[1] || 'general'
57
+ };
58
+ };
59
+
60
+ // Create actions with custom adapter
61
+ const userActions = createAction('user', flux, {
62
+ userAdapter: businessUserAdapter,
63
+ userAdapterOptions: {
64
+ strict: true,
65
+ environment: 'production'
66
+ }
67
+ });
68
+
69
+ return userActions;
70
+ };
71
+
72
+ // Example 3: Runtime Adapter Updates
73
+ export const runtimeUpdates = (flux: FluxFramework) => {
74
+ const userActions = createAction('user', flux) as any;
75
+
76
+ // Update adapter at runtime
77
+ const updateToStrictMode = () => {
78
+ userActions.updateUserAdapterOptions({
79
+ strict: true,
80
+ environment: 'production'
81
+ });
82
+ };
83
+
84
+ // Add custom validation at runtime
85
+ const addCustomValidation = () => {
86
+ userActions.updateUserAdapter((input, options) => {
87
+ const user = input as any;
88
+
89
+ // Additional runtime validation
90
+ if (user.age && user.age < 18) {
91
+ throw new Error('User must be 18 or older');
92
+ }
93
+
94
+ return user;
95
+ });
96
+ };
97
+
98
+ return {updateToStrictMode, addCustomValidation, userActions};
99
+ };
100
+
101
+ // Example 4: Testing with Mock Adapters
102
+ export const testingExample = (flux: FluxFramework) => {
103
+ // Mock adapter for testing
104
+ const mockUserAdapter = jest.fn((input: unknown) => ({
105
+ ...(input as Record<string, unknown>),
106
+ id: 'mock-user-id',
107
+ validated: true,
108
+ timestamp: new Date().toISOString()
109
+ }));
110
+
111
+ const userActions = createAction('user', flux, {
112
+ userAdapter: mockUserAdapter
113
+ }) as any;
114
+
115
+ // Test that adapter was called
116
+ const testUserCreation = async () => {
117
+ const user = await userActions.add({
118
+ username: 'test_user',
119
+ email: 'test@example.com'
120
+ });
121
+
122
+ expect(mockUserAdapter).toHaveBeenCalled();
123
+ expect(user.id).toBe('mock-user-id');
124
+ expect(user.validated).toBe(true);
125
+ };
126
+
127
+ return {userActions, testUserCreation};
128
+ };
129
+
130
+ // Example 5: Multiple Adapters with Different Configurations
131
+ export const multipleAdapters = (flux: FluxFramework) => {
132
+ // User adapter with strict validation
133
+ const strictUserAdapter = (input: unknown) => {
134
+ const user = input as any;
135
+ if (!user.username || !user.email) {
136
+ throw new Error('Username and email are required');
137
+ }
138
+ return user;
139
+ };
140
+
141
+ // Post adapter with content validation
142
+ const contentPostAdapter = (input: unknown) => {
143
+ const post = input as any;
144
+ if (post.content && post.content.length > 1000) {
145
+ throw new Error('Post content too long');
146
+ }
147
+ return post;
148
+ };
149
+
150
+ // Create actions with different adapters
151
+ const userActions = createAction('user', flux, {
152
+ userAdapter: strictUserAdapter,
153
+ userAdapterOptions: {strict: true}
154
+ }) as any;
155
+
156
+ const postActions = createAction('post', flux, {
157
+ postAdapter: contentPostAdapter,
158
+ postAdapterOptions: {environment: 'development'}
159
+ }) as any;
160
+
161
+ return {userActions, postActions};
162
+ };
163
+
164
+ // Example 6: Error Handling
165
+ export const errorHandling = (flux: FluxFramework) => {
166
+ const userActions = createAction('user', flux, {
167
+ userAdapterOptions: {
168
+ strict: true,
169
+ customValidation: (input) => {
170
+ const user = input as any;
171
+
172
+ // Custom error handling
173
+ if (user.username && user.username.length < 3) {
174
+ throw new Error('Username must be at least 3 characters');
175
+ }
176
+
177
+ if (user.email && !user.email.includes('@')) {
178
+ throw new Error('Invalid email format');
179
+ }
180
+
181
+ return user;
182
+ }
183
+ }
184
+ }) as any;
185
+
186
+ const createUserWithErrorHandling = async (userData: any) => {
187
+ try {
188
+ const user = await userActions.add(userData);
189
+ return {success: true, user};
190
+ } catch (error) {
191
+ return {success: false, error: error.message};
192
+ }
193
+ };
194
+
195
+ return {createUserWithErrorHandling};
196
+ };
197
+
198
+ // Example 7: Multiple Actions Creation
199
+ export const multipleActionsExample = (flux: FluxFramework) => {
200
+ // Create multiple actions at once
201
+ const actions = createActions(['user', 'post', 'message'], flux, {
202
+ user: {
203
+ userAdapterOptions: { strict: true }
204
+ },
205
+ post: {
206
+ postAdapter: (input: any) => {
207
+ if (input.content && input.content.length > 1000) {
208
+ throw new Error('Post content too long');
209
+ }
210
+ return input;
211
+ }
212
+ }
213
+ });
214
+
215
+ const createUserAndPost = async (userData: any, postData: any) => {
216
+ const user = await actions.user.add(userData);
217
+ const post = await actions.post.add({
218
+ ...postData,
219
+ userId: user.userId
220
+ });
221
+ return { user, post };
222
+ };
223
+
224
+ return { actions, createUserAndPost };
225
+ };
226
+
227
+ // Example 8: All Actions Creation
228
+ export const allActionsExample = (flux: FluxFramework) => {
229
+ // Create all available actions
230
+ const allActions = createAllActions(flux, {
231
+ user: { userAdapterOptions: { strict: true } },
232
+ post: { postAdapterOptions: { environment: 'production' } },
233
+ image: { imageAdapterOptions: { allowPartial: true } }
234
+ });
235
+
236
+ const comprehensiveWorkflow = async () => {
237
+ // Create user
238
+ const user = await allActions.user.add({
239
+ username: 'jane_doe',
240
+ email: 'jane@example.com'
241
+ });
242
+
243
+ // Create post
244
+ const post = await allActions.post.add({
245
+ content: 'Hello world!',
246
+ name: 'My Post'
247
+ });
248
+
249
+ // Upload image
250
+ const image = await allActions.image.add({
251
+ base64: 'data:image/jpeg;base64,...',
252
+ description: 'Profile picture'
253
+ });
254
+
255
+ // Send message
256
+ await allActions.message.sendMessage({
257
+ content: 'Welcome!',
258
+ recipientId: user.userId
259
+ });
260
+
261
+ return { user, post, image };
262
+ };
263
+
264
+ return { allActions, comprehensiveWorkflow };
265
+ };
266
+
267
+ // Example 9: Migration from Old Pattern
268
+ export const migrationExample = (flux: FluxFramework) => {
269
+ // New way (recommended)
270
+ const userActions = createAction('user', flux) as any;
271
+ const postActions = createAction('post', flux) as any;
272
+ const eventActions = createAction('event', flux) as any;
273
+
274
+ const createUser = async (userData: any) => {
275
+ return await userActions.add(userData);
276
+ };
277
+
278
+ const createPost = async (postData: any) => {
279
+ return await postActions.add(postData);
280
+ };
281
+
282
+ return { createUser, createPost };
283
+ };
package/lex.config.mjs ADDED
@@ -0,0 +1,17 @@
1
+ export default {
2
+ ai: {
3
+ maxTokens: 4000,
4
+ model: 'cursor-code',
5
+ provider: 'cursor',
6
+ temperature: 0.1
7
+ },
8
+ entryJS: 'app.tsx',
9
+ gitUrl: 'https://github.com/nitrogenlabs/metropolisjs',
10
+ jest: {
11
+ testEnvironment: 'jsdom'
12
+ },
13
+ outputPath: 'lib',
14
+ targetEnvironment: 'web',
15
+ useESM: true,
16
+ useTypescript: true
17
+ };
@@ -0,0 +1,45 @@
1
+ import type { FluxFramework } from '@nlabs/arkhamjs';
2
+ import type { EventType } from '../../adapters/eventAdapter/eventAdapter';
3
+ export interface EventAdapterOptions {
4
+ readonly strict?: boolean;
5
+ readonly allowPartial?: boolean;
6
+ readonly environment?: 'development' | 'production' | 'test';
7
+ readonly customValidation?: (input: unknown) => unknown;
8
+ }
9
+ export interface EventActionsOptions {
10
+ readonly eventAdapter?: (input: unknown, options?: EventAdapterOptions) => any;
11
+ readonly eventAdapterOptions?: EventAdapterOptions;
12
+ }
13
+ export interface EventActions {
14
+ readonly addEvent: (eventData: Partial<EventType>, eventProps?: string[]) => Promise<EventType>;
15
+ readonly getEvent: (eventId: string, eventProps?: string[]) => Promise<EventType>;
16
+ readonly getEventsByTags: (tags: string[], latitude: number, longitude: number, eventProps?: string[]) => Promise<EventType[]>;
17
+ readonly getEventsByReactions: (reactions: string[], latitude: number, longitude: number, eventProps?: string[]) => Promise<EventType[]>;
18
+ readonly deleteEvent: (eventId: string, eventProps?: string[]) => Promise<EventType>;
19
+ readonly updateEvent: (event: Partial<EventType>, eventProps?: string[]) => Promise<EventType>;
20
+ readonly updateEventAdapter: (adapter: (input: unknown, options?: EventAdapterOptions) => any) => void;
21
+ readonly updateEventAdapterOptions: (options: EventAdapterOptions) => void;
22
+ }
23
+ /**
24
+ * Factory function to create EventActions with enhanced adapter injection capabilities.
25
+ * Custom adapters are merged with default behavior, allowing partial overrides.
26
+ *
27
+ * @example
28
+ * // Basic usage with default adapters
29
+ * const eventActions = createEventActions(flux);
30
+ *
31
+ * @example
32
+ * // Custom adapter that extends default behavior
33
+ * const customEventAdapter = (input: unknown, options?: EventAdapterOptions) => {
34
+ * // input is already validated by default adapter
35
+ * if (input.startDate && input.endDate && input.startDate > input.endDate) {
36
+ * throw new Error('Start date must be before end date');
37
+ * }
38
+ * return input;
39
+ * };
40
+ *
41
+ * const eventActions = createEventActions(flux, {
42
+ * eventAdapter: customEventAdapter
43
+ * });
44
+ */
45
+ export declare const createEventActions: (flux: FluxFramework, options?: EventActionsOptions) => EventActions;
@@ -0,0 +1,2 @@
1
+ import{parseId as R,parseNum as l}from"@nlabs/utils";import{validateEventInput as h}from"../../adapters/eventAdapter/eventAdapter";import{EVENT_CONSTANTS as o}from"../../stores/eventStore";import{appMutation as T,appQuery as A}from"../../utils/api";const y="posts",O=(t,u)=>h(t),P=(t,u)=>(d,c)=>{const v={...u,...c};let E=O(d,v);return t&&(E=t(E,v)),v?.customValidation&&(E=v.customValidation(E)),E},F=(t,u)=>{let d=u?.eventAdapterOptions||{},c=u?.eventAdapter,v=P(c,d);return{addEvent:async(s,r=[])=>{try{const e={event:{type:"PostInput!",value:v(s,d)}},p=n=>{const{posts:{addPost:i={}}}=n;return t.dispatch({event:i,type:o.ADD_ITEM_SUCCESS})},{addEvent:a}=await T(t,"addEvent",y,e,["eventId",...r],{onSuccess:p});return a}catch(e){throw t.dispatch({error:e,type:o.ADD_ITEM_ERROR}),e}},getEvent:async(s,r=[])=>{try{const e={postId:{type:"ID!",value:R(s)}},p=n=>{const{posts:{getPost:i={}}}=n;return t.dispatch({event:i,type:o.GET_ITEM_SUCCESS})},{event:a}=await A(t,"event",y,e,["address","added","content","endDate","hasRsvp","images(from: 0 to: 10) { id, imageId, imageUrl, thumbUrl }","modified","name","eventId","startDate","rsvpCount","tags {name, tagId}","user { imageUrl, userId, username }","viewCount",...r],{onSuccess:p});return a}catch(e){throw t.dispatch({error:e,type:o.GET_ITEM_ERROR}),e}},getEventsByTags:async(s,r,e,p=[])=>{const a=s.map(n=>n.trim().toLowerCase());try{const n={latitude:{type:"Float",value:l(r)},longitude:{type:"Float",value:l(e)},tags:{type:"TagInput!",value:a}},i=g=>{const{posts:{getPostsByTags:I=[]}}=g;return t.dispatch({list:I,type:o.GET_LIST_SUCCESS})},{eventsByTags:m}=await A(t,"eventsByTags",y,n,["address","added","content","endDate","hasRsvp","images(from: 0 to: 10) { id, imageId, imageUrl, thumbUrl }","modified","name","eventId","startDate","rsvpCount","tags {name, tagId}","user { imageUrl, userId, username }","viewCount",...p],{onSuccess:i});return m}catch(n){throw t.dispatch({error:n,type:o.GET_LIST_ERROR}),n}},getEventsByReactions:async(s,r,e,p=[])=>{try{const a={latitude:{type:"Float",value:l(r)},longitude:{type:"Float",value:l(e)},reactions:{type:"ReactionInput!",value:s}},n=m=>{const{posts:{getPostsByReactions:g=[]}}=m;return t.dispatch({list:g,type:o.GET_LIST_SUCCESS})},{eventsByReactions:i}=await A(t,"eventsByReactions",y,a,["address","added","content","endDate","hasRsvp","images(from: 0 to: 10) { id, imageId, imageUrl, thumbUrl }","modified","name","eventId","startDate","rsvpCount","tags {name, tagId}","user { imageUrl, userId, username }","viewCount",...p],{onSuccess:n});return i}catch(a){throw t.dispatch({error:a,type:o.GET_LIST_ERROR}),a}},deleteEvent:async(s,r=[])=>{try{const e={postId:{type:"ID!",value:R(s)}},p=n=>{const{posts:{deletePost:i={}}}=n;return t.dispatch({event:i,type:o.REMOVE_ITEM_SUCCESS})},{deleteEvent:a}=await T(t,"deleteEvent",y,e,["eventId",...r],{onSuccess:p});return a}catch(e){throw t.dispatch({error:e,type:o.REMOVE_ITEM_ERROR}),e}},updateEvent:async(s,r=[])=>{try{const e={event:{type:"PostUpdateInput!",value:v(s,d)}},p=n=>{const{posts:{updatePost:i={}}}=n;return t.dispatch({event:i,type:o.UPDATE_ITEM_SUCCESS})},{updateEvent:a}=await T(t,"updateEvent",y,e,["eventId",...r],{onSuccess:p});return a}catch(e){throw t.dispatch({error:e,type:o.UPDATE_ITEM_ERROR}),e}},updateEventAdapter:s=>{c=s,v=P(c,d)},updateEventAdapterOptions:s=>{d={...d,...s},v=P(c,d)}}};export{F as createEventActions};
2
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FjdGlvbnMvZXZlbnRBY3Rpb25zL2V2ZW50QWN0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cGFyc2VJZCwgcGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7dmFsaWRhdGVFdmVudElucHV0fSBmcm9tICcuLi8uLi9hZGFwdGVycy9ldmVudEFkYXB0ZXIvZXZlbnRBZGFwdGVyJztcbmltcG9ydCB7RVZFTlRfQ09OU1RBTlRTfSBmcm9tICcuLi8uLi9zdG9yZXMvZXZlbnRTdG9yZSc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpJztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7RXZlbnRUeXBlfSBmcm9tICcuLi8uLi9hZGFwdGVycy9ldmVudEFkYXB0ZXIvZXZlbnRBZGFwdGVyJztcbmltcG9ydCB0eXBlIHtSZWFrdG9yRGJDb2xsZWN0aW9ufSBmcm9tICcuLi8uLi91dGlscy9hcGknO1xuaW1wb3J0IHR5cGUge1Bvc3RBcGlSZXN1bHRzVHlwZX0gZnJvbSAnLi4vcG9zdEFjdGlvbnMvcG9zdEFjdGlvbnMnO1xuXG5jb25zdCBEQVRBX1RZUEU6IFJlYWt0b3JEYkNvbGxlY3Rpb24gPSAncG9zdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50QWRhcHRlck9wdGlvbnMge1xuICByZWFkb25seSBzdHJpY3Q/OiBib29sZWFuO1xuICByZWFkb25seSBhbGxvd1BhcnRpYWw/OiBib29sZWFuO1xuICByZWFkb25seSBlbnZpcm9ubWVudD86ICdkZXZlbG9wbWVudCcgfCAncHJvZHVjdGlvbicgfCAndGVzdCc7XG4gIHJlYWRvbmx5IGN1c3RvbVZhbGlkYXRpb24/OiAoaW5wdXQ6IHVua25vd24pID0+IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRBY3Rpb25zT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGV2ZW50QWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEV2ZW50QWRhcHRlck9wdGlvbnMpID0+IGFueTtcbiAgcmVhZG9ubHkgZXZlbnRBZGFwdGVyT3B0aW9ucz86IEV2ZW50QWRhcHRlck9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRBY3Rpb25zIHtcbiAgcmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudERhdGE6IFBhcnRpYWw8RXZlbnRUeXBlPiwgZXZlbnRQcm9wcz86IHN0cmluZ1tdKSA9PiBQcm9taXNlPEV2ZW50VHlwZT47XG4gIHJlYWRvbmx5IGdldEV2ZW50OiAoZXZlbnRJZDogc3RyaW5nLCBldmVudFByb3BzPzogc3RyaW5nW10pID0+IFByb21pc2U8RXZlbnRUeXBlPjtcbiAgcmVhZG9ubHkgZ2V0RXZlbnRzQnlUYWdzOiAodGFnczogc3RyaW5nW10sIGxhdGl0dWRlOiBudW1iZXIsIGxvbmdpdHVkZTogbnVtYmVyLCBldmVudFByb3BzPzogc3RyaW5nW10pID0+IFByb21pc2U8RXZlbnRUeXBlW10+O1xuICByZWFkb25seSBnZXRFdmVudHNCeVJlYWN0aW9uczogKHJlYWN0aW9uczogc3RyaW5nW10sIGxhdGl0dWRlOiBudW1iZXIsIGxvbmdpdHVkZTogbnVtYmVyLCBldmVudFByb3BzPzogc3RyaW5nW10pID0+IFByb21pc2U8RXZlbnRUeXBlW10+O1xuICByZWFkb25seSBkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZywgZXZlbnRQcm9wcz86IHN0cmluZ1tdKSA9PiBQcm9taXNlPEV2ZW50VHlwZT47XG4gIHJlYWRvbmx5IHVwZGF0ZUV2ZW50OiAoZXZlbnQ6IFBhcnRpYWw8RXZlbnRUeXBlPiwgZXZlbnRQcm9wcz86IHN0cmluZ1tdKSA9PiBQcm9taXNlPEV2ZW50VHlwZT47XG4gIHJlYWRvbmx5IHVwZGF0ZUV2ZW50QWRhcHRlcjogKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEV2ZW50QWRhcHRlck9wdGlvbnMpID0+IGFueSkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgdXBkYXRlRXZlbnRBZGFwdGVyT3B0aW9uczogKG9wdGlvbnM6IEV2ZW50QWRhcHRlck9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbi8vIERlZmF1bHQgdmFsaWRhdGlvbiBmdW5jdGlvblxuY29uc3QgZGVmYXVsdEV2ZW50VmFsaWRhdG9yID0gKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogRXZlbnRBZGFwdGVyT3B0aW9ucykgPT4gdmFsaWRhdGVFdmVudElucHV0KGlucHV0KTtcblxuLy8gRW5oYW5jZWQgdmFsaWRhdGlvbiBmdW5jdGlvbiB0aGF0IG1lcmdlcyBjdXN0b20gbG9naWMgd2l0aCBkZWZhdWx0c1xuY29uc3QgY3JlYXRlRXZlbnRWYWxpZGF0b3IgPSAoXG4gIGN1c3RvbUFkYXB0ZXI/OiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBFdmVudEFkYXB0ZXJPcHRpb25zKSA9PiBhbnksXG4gIG9wdGlvbnM/OiBFdmVudEFkYXB0ZXJPcHRpb25zXG4pID0+IChpbnB1dDogdW5rbm93biwgdmFsaWRhdG9yT3B0aW9ucz86IEV2ZW50QWRhcHRlck9wdGlvbnMpID0+IHtcbiAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IHsuLi5vcHRpb25zLCAuLi52YWxpZGF0b3JPcHRpb25zfTtcblxuICAvLyBTdGFydCB3aXRoIGRlZmF1bHQgdmFsaWRhdGlvblxuICBsZXQgdmFsaWRhdGVkID0gZGVmYXVsdEV2ZW50VmFsaWRhdG9yKGlucHV0LCBtZXJnZWRPcHRpb25zKTtcblxuICAvLyBBcHBseSBjdXN0b20gdmFsaWRhdGlvbiBpZiBwcm92aWRlZFxuICBpZihjdXN0b21BZGFwdGVyKSB7XG4gICAgdmFsaWRhdGVkID0gY3VzdG9tQWRhcHRlcih2YWxpZGF0ZWQsIG1lcmdlZE9wdGlvbnMpO1xuICB9XG5cbiAgLy8gQXBwbHkgY3VzdG9tIHZhbGlkYXRpb24gZnJvbSBvcHRpb25zIGlmIHByb3ZpZGVkXG4gIGlmKG1lcmdlZE9wdGlvbnM/LmN1c3RvbVZhbGlkYXRpb24pIHtcbiAgICB2YWxpZGF0ZWQgPSBtZXJnZWRPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24odmFsaWRhdGVkKSBhcyBFdmVudFR5cGU7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkO1xufTtcblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBFdmVudEFjdGlvbnMgd2l0aCBlbmhhbmNlZCBhZGFwdGVyIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuXG4gKiBDdXN0b20gYWRhcHRlcnMgYXJlIG1lcmdlZCB3aXRoIGRlZmF1bHQgYmVoYXZpb3IsIGFsbG93aW5nIHBhcnRpYWwgb3ZlcnJpZGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSB3aXRoIGRlZmF1bHQgYWRhcHRlcnNcbiAqIGNvbnN0IGV2ZW50QWN0aW9ucyA9IGNyZWF0ZUV2ZW50QWN0aW9ucyhmbHV4KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3VzdG9tIGFkYXB0ZXIgdGhhdCBleHRlbmRzIGRlZmF1bHQgYmVoYXZpb3JcbiAqIGNvbnN0IGN1c3RvbUV2ZW50QWRhcHRlciA9IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEV2ZW50QWRhcHRlck9wdGlvbnMpID0+IHtcbiAqICAgLy8gaW5wdXQgaXMgYWxyZWFkeSB2YWxpZGF0ZWQgYnkgZGVmYXVsdCBhZGFwdGVyXG4gKiAgIGlmIChpbnB1dC5zdGFydERhdGUgJiYgaW5wdXQuZW5kRGF0ZSAmJiBpbnB1dC5zdGFydERhdGUgPiBpbnB1dC5lbmREYXRlKSB7XG4gKiAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFydCBkYXRlIG11c3QgYmUgYmVmb3JlIGVuZCBkYXRlJyk7XG4gKiAgIH1cbiAqICAgcmV0dXJuIGlucHV0O1xuICogfTtcbiAqXG4gKiBjb25zdCBldmVudEFjdGlvbnMgPSBjcmVhdGVFdmVudEFjdGlvbnMoZmx1eCwge1xuICogICBldmVudEFkYXB0ZXI6IGN1c3RvbUV2ZW50QWRhcHRlclxuICogfSk7XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVFdmVudEFjdGlvbnMgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG9wdGlvbnM/OiBFdmVudEFjdGlvbnNPcHRpb25zXG4pOiBFdmVudEFjdGlvbnMgPT4ge1xuICAvLyBJbml0aWFsaXplIGFkYXB0ZXIgc3RhdGVcbiAgbGV0IGV2ZW50QWRhcHRlck9wdGlvbnM6IEV2ZW50QWRhcHRlck9wdGlvbnMgPSBvcHRpb25zPy5ldmVudEFkYXB0ZXJPcHRpb25zIHx8IHt9O1xuICBsZXQgY3VzdG9tRXZlbnRBZGFwdGVyID0gb3B0aW9ucz8uZXZlbnRBZGFwdGVyO1xuXG4gIC8vIENyZWF0ZSB2YWxpZGF0b3JzIHRoYXQgbWVyZ2UgY3VzdG9tIGFkYXB0ZXJzIHdpdGggZGVmYXVsdHNcbiAgbGV0IHZhbGlkYXRlRXZlbnQgPSBjcmVhdGVFdmVudFZhbGlkYXRvcihjdXN0b21FdmVudEFkYXB0ZXIsIGV2ZW50QWRhcHRlck9wdGlvbnMpO1xuXG4gIC8vIFVwZGF0ZSBmdW5jdGlvbnMgdGhhdCByZWNyZWF0ZSB2YWxpZGF0b3JzXG4gIGNvbnN0IHVwZGF0ZUV2ZW50QWRhcHRlciA9IChhZGFwdGVyOiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBFdmVudEFkYXB0ZXJPcHRpb25zKSA9PiBhbnkpOiB2b2lkID0+IHtcbiAgICBjdXN0b21FdmVudEFkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIHZhbGlkYXRlRXZlbnQgPSBjcmVhdGVFdmVudFZhbGlkYXRvcihjdXN0b21FdmVudEFkYXB0ZXIsIGV2ZW50QWRhcHRlck9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUV2ZW50QWRhcHRlck9wdGlvbnMgPSAob3B0aW9uczogRXZlbnRBZGFwdGVyT3B0aW9ucyk6IHZvaWQgPT4ge1xuICAgIGV2ZW50QWRhcHRlck9wdGlvbnMgPSB7Li4uZXZlbnRBZGFwdGVyT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgdmFsaWRhdGVFdmVudCA9IGNyZWF0ZUV2ZW50VmFsaWRhdG9yKGN1c3RvbUV2ZW50QWRhcHRlciwgZXZlbnRBZGFwdGVyT3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gQWN0aW9uIGltcGxlbWVudGF0aW9uc1xuICBjb25zdCBhZGRFdmVudCA9IGFzeW5jIChldmVudERhdGE6IFBhcnRpYWw8RXZlbnRUeXBlPiwgZXZlbnRQcm9wczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8RXZlbnRUeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBldmVudDoge1xuICAgICAgICAgIHR5cGU6ICdQb3N0SW5wdXQhJyxcbiAgICAgICAgICB2YWx1ZTogdmFsaWRhdGVFdmVudChldmVudERhdGEsIGV2ZW50QWRhcHRlck9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBQb3N0QXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3Qge3Bvc3RzOiB7YWRkUG9zdCA9IHt9fX0gPSBkYXRhO1xuICAgICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7ZXZlbnQ6IGFkZFBvc3QsIHR5cGU6IEVWRU5UX0NPTlNUQU5UUy5BRERfSVRFTV9TVUNDRVNTfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7YWRkRXZlbnR9ID0gYXdhaXQgYXBwTXV0YXRpb24oZmx1eCwgJ2FkZEV2ZW50JywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydldmVudElkJywgLi4uZXZlbnRQcm9wc10sIHtvblN1Y2Nlc3N9KTtcbiAgICAgIHJldHVybiBhZGRFdmVudCBhcyBFdmVudFR5cGU7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IEVWRU5UX0NPTlNUQU5UUy5BRERfSVRFTV9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldEV2ZW50ID0gYXN5bmMgKGV2ZW50SWQ6IHN0cmluZywgZXZlbnRQcm9wczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8RXZlbnRUeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBwb3N0SWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgICB2YWx1ZTogcGFyc2VJZChldmVudElkKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogUG9zdEFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtwb3N0czoge2dldFBvc3Q6IGV2ZW50ID0ge319fSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtldmVudCwgdHlwZTogRVZFTlRfQ09OU1RBTlRTLkdFVF9JVEVNX1NVQ0NFU1N9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHtldmVudH0gPSBhd2FpdCBhcHBRdWVyeShcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2V2ZW50JyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW1xuICAgICAgICAgICdhZGRyZXNzJyxcbiAgICAgICAgICAnYWRkZWQnLFxuICAgICAgICAgICdjb250ZW50JyxcbiAgICAgICAgICAnZW5kRGF0ZScsXG4gICAgICAgICAgJ2hhc1JzdnAnLFxuICAgICAgICAgICdpbWFnZXMoZnJvbTogMCB0bzogMTApIHsgaWQsIGltYWdlSWQsIGltYWdlVXJsLCB0aHVtYlVybCB9JyxcbiAgICAgICAgICAnbW9kaWZpZWQnLFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAnZXZlbnRJZCcsXG4gICAgICAgICAgJ3N0YXJ0RGF0ZScsXG4gICAgICAgICAgJ3JzdnBDb3VudCcsXG4gICAgICAgICAgJ3RhZ3Mge25hbWUsIHRhZ0lkfScsXG4gICAgICAgICAgJ3VzZXIgeyBpbWFnZVVybCwgdXNlcklkLCB1c2VybmFtZSB9JyxcbiAgICAgICAgICAndmlld0NvdW50JyxcbiAgICAgICAgICAuLi5ldmVudFByb3BzXG4gICAgICAgIF0sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgICAgcmV0dXJuIGV2ZW50IGFzIEV2ZW50VHlwZTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogRVZFTlRfQ09OU1RBTlRTLkdFVF9JVEVNX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0RXZlbnRzQnlUYWdzID0gYXN5bmMgKFxuICAgIHRhZ3M6IHN0cmluZ1tdLFxuICAgIGxhdGl0dWRlOiBudW1iZXIsXG4gICAgbG9uZ2l0dWRlOiBudW1iZXIsXG4gICAgZXZlbnRQcm9wczogc3RyaW5nW10gPSBbXVxuICApOiBQcm9taXNlPEV2ZW50VHlwZVtdPiA9PiB7XG4gICAgY29uc3QgZm9ybWF0VGFnczogc3RyaW5nW10gPSB0YWdzLm1hcCgodGFnOiBzdHJpbmcpID0+IHRhZy50cmltKCkudG9Mb3dlckNhc2UoKSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGxhdGl0dWRlOiB7XG4gICAgICAgICAgdHlwZTogJ0Zsb2F0JyxcbiAgICAgICAgICB2YWx1ZTogcGFyc2VOdW0obGF0aXR1ZGUpXG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdpdHVkZToge1xuICAgICAgICAgIHR5cGU6ICdGbG9hdCcsXG4gICAgICAgICAgdmFsdWU6IHBhcnNlTnVtKGxvbmdpdHVkZSlcbiAgICAgICAgfSxcbiAgICAgICAgdGFnczoge1xuICAgICAgICAgIHR5cGU6ICdUYWdJbnB1dCEnLFxuICAgICAgICAgIHZhbHVlOiBmb3JtYXRUYWdzXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBQb3N0QXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3Qge3Bvc3RzOiB7Z2V0UG9zdHNCeVRhZ3M6IGV2ZW50c0J5VGFncyA9IFtdfX0gPSBkYXRhO1xuICAgICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgICAgbGlzdDogZXZlbnRzQnlUYWdzLFxuICAgICAgICAgIHR5cGU6IEVWRU5UX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge2V2ZW50c0J5VGFnczogbGlzdH0gPSBhd2FpdCBhcHBRdWVyeShcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2V2ZW50c0J5VGFncycsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFtcbiAgICAgICAgICAnYWRkcmVzcycsXG4gICAgICAgICAgJ2FkZGVkJyxcbiAgICAgICAgICAnY29udGVudCcsXG4gICAgICAgICAgJ2VuZERhdGUnLFxuICAgICAgICAgICdoYXNSc3ZwJyxcbiAgICAgICAgICAnaW1hZ2VzKGZyb206IDAgdG86IDEwKSB7IGlkLCBpbWFnZUlkLCBpbWFnZVVybCwgdGh1bWJVcmwgfScsXG4gICAgICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICAgJ2V2ZW50SWQnLFxuICAgICAgICAgICdzdGFydERhdGUnLFxuICAgICAgICAgICdyc3ZwQ291bnQnLFxuICAgICAgICAgICd0YWdzIHtuYW1lLCB0YWdJZH0nLFxuICAgICAgICAgICd1c2VyIHsgaW1hZ2VVcmwsIHVzZXJJZCwgdXNlcm5hbWUgfScsXG4gICAgICAgICAgJ3ZpZXdDb3VudCcsXG4gICAgICAgICAgLi4uZXZlbnRQcm9wc1xuICAgICAgICBdLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBsaXN0IGFzIEV2ZW50VHlwZVtdO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBFVkVOVF9DT05TVEFOVFMuR0VUX0xJU1RfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRFdmVudHNCeVJlYWN0aW9ucyA9IGFzeW5jIChcbiAgICByZWFjdGlvbnM6IHN0cmluZ1tdLFxuICAgIGxhdGl0dWRlOiBudW1iZXIsXG4gICAgbG9uZ2l0dWRlOiBudW1iZXIsXG4gICAgZXZlbnRQcm9wczogc3RyaW5nW10gPSBbXVxuICApOiBQcm9taXNlPEV2ZW50VHlwZVtdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBsYXRpdHVkZToge1xuICAgICAgICAgIHR5cGU6ICdGbG9hdCcsXG4gICAgICAgICAgdmFsdWU6IHBhcnNlTnVtKGxhdGl0dWRlKVxuICAgICAgICB9LFxuICAgICAgICBsb25naXR1ZGU6IHtcbiAgICAgICAgICB0eXBlOiAnRmxvYXQnLFxuICAgICAgICAgIHZhbHVlOiBwYXJzZU51bShsb25naXR1ZGUpXG4gICAgICAgIH0sXG4gICAgICAgIHJlYWN0aW9uczoge1xuICAgICAgICAgIHR5cGU6ICdSZWFjdGlvbklucHV0IScsXG4gICAgICAgICAgdmFsdWU6IHJlYWN0aW9uc1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogUG9zdEFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtwb3N0czoge2dldFBvc3RzQnlSZWFjdGlvbnM6IGV2ZW50c0J5UmVhY3Rpb25zID0gW119fSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICBsaXN0OiBldmVudHNCeVJlYWN0aW9ucyxcbiAgICAgICAgICB0eXBlOiBFVkVOVF9DT05TVEFOVFMuR0VUX0xJU1RfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHtldmVudHNCeVJlYWN0aW9uczogbGlzdH0gPSBhd2FpdCBhcHBRdWVyeShcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2V2ZW50c0J5UmVhY3Rpb25zJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW1xuICAgICAgICAgICdhZGRyZXNzJyxcbiAgICAgICAgICAnYWRkZWQnLFxuICAgICAgICAgICdjb250ZW50JyxcbiAgICAgICAgICAnZW5kRGF0ZScsXG4gICAgICAgICAgJ2hhc1JzdnAnLFxuICAgICAgICAgICdpbWFnZXMoZnJvbTogMCB0bzogMTApIHsgaWQsIGltYWdlSWQsIGltYWdlVXJsLCB0aHVtYlVybCB9JyxcbiAgICAgICAgICAnbW9kaWZpZWQnLFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAnZXZlbnRJZCcsXG4gICAgICAgICAgJ3N0YXJ0RGF0ZScsXG4gICAgICAgICAgJ3JzdnBDb3VudCcsXG4gICAgICAgICAgJ3RhZ3Mge25hbWUsIHRhZ0lkfScsXG4gICAgICAgICAgJ3VzZXIgeyBpbWFnZVVybCwgdXNlcklkLCB1c2VybmFtZSB9JyxcbiAgICAgICAgICAndmlld0NvdW50JyxcbiAgICAgICAgICAuLi5ldmVudFByb3BzXG4gICAgICAgIF0sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgICAgcmV0dXJuIGxpc3QgYXMgRXZlbnRUeXBlW107XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IEVWRU5UX0NPTlNUQU5UUy5HRVRfTElTVF9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZUV2ZW50ID0gYXN5bmMgKGV2ZW50SWQ6IHN0cmluZywgZXZlbnRQcm9wczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8RXZlbnRUeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBwb3N0SWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgICB2YWx1ZTogcGFyc2VJZChldmVudElkKVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogUG9zdEFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtwb3N0czoge2RlbGV0ZVBvc3Q6IGV2ZW50ID0ge319fSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtldmVudCwgdHlwZTogRVZFTlRfQ09OU1RBTlRTLlJFTU9WRV9JVEVNX1NVQ0NFU1N9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHtkZWxldGVFdmVudH0gPSBhd2FpdCBhcHBNdXRhdGlvbihmbHV4LCAnZGVsZXRlRXZlbnQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbJ2V2ZW50SWQnLCAuLi5ldmVudFByb3BzXSwge29uU3VjY2Vzc30pO1xuICAgICAgcmV0dXJuIGRlbGV0ZUV2ZW50IGFzIEV2ZW50VHlwZTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogRVZFTlRfQ09OU1RBTlRTLlJFTU9WRV9JVEVNX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlRXZlbnQgPSBhc3luYyAoZXZlbnQ6IFBhcnRpYWw8RXZlbnRUeXBlPiwgZXZlbnRQcm9wczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8RXZlbnRUeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBldmVudDoge1xuICAgICAgICAgIHR5cGU6ICdQb3N0VXBkYXRlSW5wdXQhJyxcbiAgICAgICAgICB2YWx1ZTogdmFsaWRhdGVFdmVudChldmVudCwgZXZlbnRBZGFwdGVyT3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFBvc3RBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCB7cG9zdHM6IHt1cGRhdGVQb3N0OiB1cGRhdGVkRXZlbnQgPSB7fX19ID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe2V2ZW50OiB1cGRhdGVkRXZlbnQsIHR5cGU6IEVWRU5UX0NPTlNUQU5UUy5VUERBVEVfSVRFTV9TVUNDRVNTfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7dXBkYXRlRXZlbnR9ID0gYXdhaXQgYXBwTXV0YXRpb24oZmx1eCwgJ3VwZGF0ZUV2ZW50JywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydldmVudElkJywgLi4uZXZlbnRQcm9wc10sIHtvblN1Y2Nlc3N9KTtcbiAgICAgIHJldHVybiB1cGRhdGVFdmVudCBhcyBFdmVudFR5cGU7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IEVWRU5UX0NPTlNUQU5UUy5VUERBVEVfSVRFTV9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHVybiB0aGUgYWN0aW9ucyBvYmplY3RcbiAgcmV0dXJuIHtcbiAgICBhZGRFdmVudCxcbiAgICBnZXRFdmVudCxcbiAgICBnZXRFdmVudHNCeVRhZ3MsXG4gICAgZ2V0RXZlbnRzQnlSZWFjdGlvbnMsXG4gICAgZGVsZXRlRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQsXG4gICAgdXBkYXRlRXZlbnRBZGFwdGVyLFxuICAgIHVwZGF0ZUV2ZW50QWRhcHRlck9wdGlvbnNcbiAgfTtcbn07XG5cbiJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQVEsV0FBQUEsRUFBUyxZQUFBQyxNQUFlLGVBRWhDLE9BQVEsc0JBQUFDLE1BQXlCLDJDQUNqQyxPQUFRLG1CQUFBQyxNQUFzQiwwQkFDOUIsT0FBUSxlQUFBQyxFQUFhLFlBQUFDLE1BQWUsa0JBT3BDLE1BQU1DLEVBQWlDLFFBMEJqQ0MsRUFBd0IsQ0FBQ0MsRUFBZ0JDLElBQWtDUCxFQUFtQk0sQ0FBSyxFQUduR0UsRUFBdUIsQ0FDM0JDLEVBQ0FGLElBQ0csQ0FBQ0QsRUFBZ0JJLElBQTJDLENBQy9ELE1BQU1DLEVBQWdCLENBQUMsR0FBR0osRUFBUyxHQUFHRyxDQUFnQixFQUd0RCxJQUFJRSxFQUFZUCxFQUFzQkMsRUFBT0ssQ0FBYSxFQUcxRCxPQUFHRixJQUNERyxFQUFZSCxFQUFjRyxFQUFXRCxDQUFhLEdBSWpEQSxHQUFlLG1CQUNoQkMsRUFBWUQsRUFBYyxpQkFBaUJDLENBQVMsR0FHL0NBLENBQ1QsRUF3QmFDLEVBQXFCLENBQ2hDQyxFQUNBUCxJQUNpQixDQUVqQixJQUFJUSxFQUEyQ1IsR0FBUyxxQkFBdUIsQ0FBQyxFQUM1RVMsRUFBcUJULEdBQVMsYUFHOUJVLEVBQWdCVCxFQUFxQlEsRUFBb0JELENBQW1CLEVBMFBoRixNQUFPLENBQ0wsU0E3T2UsTUFBT0csRUFBK0JDLEVBQXVCLENBQUMsSUFBMEIsQ0FDdkcsR0FBSSxDQUNGLE1BQU1DLEVBQWlCLENBQ3JCLE1BQU8sQ0FDTCxLQUFNLGFBQ04sTUFBT0gsRUFBY0MsRUFBV0gsQ0FBbUIsQ0FDckQsQ0FDRixFQUVNTSxFQUFhQyxHQUE2QixDQUM5QyxLQUFNLENBQUMsTUFBTyxDQUFDLFFBQUFDLEVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBSUQsRUFDaEMsT0FBT1IsRUFBSyxTQUFTLENBQUMs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QUFPRSxFQUEyQlIsRUFBdUIsQ0FBQyxJQUEwQixDQUN0RyxHQUFJLENBQ0YsTUFBTUMsRUFBaUIsQ0FDckIsTUFBTyxDQUNMLEtBQU0sbUJBQ04sTUFBT0gsRUFBY1UsRUFBT1osQ0FBbUIsQ0FDakQsQ0FDRixFQUVNTSxFQUFhQyxHQUE2QixDQUM5QyxLQUFNLENBQUMsTUFBTyxDQUFDLFdBQVlnQixFQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUloQixFQUNqRCxPQUFPUixFQUFLLFNBQVMsQ0FBQyxNQUFPd0IsRUFBYyxLQUFNckMsRUFBZ0IsbUJBQW1CLENBQUMsQ0FDdkYsRUFFTSxDQUFDLFlBQUFzQyxDQUFXLEVBQUksTUFBTXJDLEVBQVlZLEVBQU0sY0FBZVYsRUFBV2dCLEVBQWdCLENBQUMsVUFBVyxHQUFHRCxDQUFVLEVBQUcsQ0FBQyxVQUFBRSxDQUFTLENBQUMsRUFDL0gsT0FBT2tCLENBQ1QsT0FBUWQsRUFBTyxDQUNiLE1BQUFYLEVBQUssU0FBUyxDQUFDLE1BQUFXLEVBQU8sS0FBTXhCLEVBQWdCLGlCQUFpQixDQUFDLEVBQ3hEd0IsQ0FDUixDQUNGLEVBVUUsbUJBOVAwQmUsR0FBMEUsQ0FDcEd4QixFQUFxQndCLEVBQ3JCdkIsRUFBZ0JULEVBQXFCUSxFQUFvQkQsQ0FBbUIsQ0FDOUUsRUE0UEUsMEJBMVBpQ1IsR0FBdUMsQ0FDeEVRLEVBQXNCLENBQUMsR0FBR0EsRUFBcUIsR0FBR1IsQ0FBTyxFQUN6RFUsRUFBZ0JULEVBQXFCUSxFQUFvQkQsQ0FBbUIsQ0FDOUUsQ0F3UEEsQ0FDRiIsCiAgIm5hbWVzIjogWyJwYXJzZUlkIiwgInBhcnNlTnVtIiwgInZhbGlkYXRlRXZlbnRJbnB1dCIsICJFVkVOVF9DT05TVEFOVFMiLCAiYXBwTXV0YXRpb24iLCAiYXBwUXVlcnkiLCAiREFUQV9UWVBFIiwgImRlZmF1bHRFdmVudFZhbGlkYXRvciIsICJpbnB1dCIsICJvcHRpb25zIiwgImNyZWF0ZUV2ZW50VmFsaWRhdG9yIiwgImN1c3RvbUFkYXB0ZXIiLCAidmFsaWRhdG9yT3B0aW9ucyIsICJtZXJnZWRPcHRpb25zIiwgInZhbGlkYXRlZCIsICJjcmVhdGVFdmVudEFjdGlvbnMiLCAiZmx1eCIsICJldmVudEFkYXB0ZXJPcHRpb25zIiwgImN1c3RvbUV2ZW50QWRhcHRlciIsICJ2YWxpZGF0ZUV2ZW50IiwgImV2ZW50RGF0YSIsICJldmVudFByb3BzIiwgInF1ZXJ5VmFyaWFibGVzIiwgIm9uU3VjY2VzcyIsICJkYXRhIiwgImFkZFBvc3QiLCAiYWRkRXZlbnQiLCAiZXJyb3IiLCAiZXZlbnRJZCIsICJldmVudCIsICJ0YWdzIiwgImxhdGl0dWRlIiwgImxvbmdpdHVkZSIsICJmb3JtYXRUYWdzIiwgInRhZyIsICJldmVudHNCeVRhZ3MiLCAibGlzdCIsICJyZWFjdGlvbnMiLCAiZXZlbnRzQnlSZWFjdGlvbnMiLCAiZGVsZXRlRXZlbnQiLCAidXBkYXRlZEV2ZW50IiwgInVwZGF0ZUV2ZW50IiwgImFkYXB0ZXIiXQp9Cg==
@@ -0,0 +1,56 @@
1
+ import type { FluxFramework } from '@nlabs/arkhamjs';
2
+ import type { ImageType } from '../../adapters/imageAdapter/imageAdapter';
3
+ export interface ImageAdapterOptions {
4
+ strict?: boolean;
5
+ allowPartial?: boolean;
6
+ environment?: 'development' | 'production' | 'test';
7
+ customValidation?: (input: unknown) => unknown;
8
+ }
9
+ export interface ImageActionsOptions {
10
+ imageAdapter?: (input: unknown, options?: ImageAdapterOptions) => any;
11
+ imageAdapterOptions?: ImageAdapterOptions;
12
+ }
13
+ export type ImageApiResultsType = {
14
+ addImage: ImageType;
15
+ deleteImage: ImageType;
16
+ image: ImageType;
17
+ updateImage: ImageType;
18
+ uploadFileImages: ImageType[];
19
+ getImageCount: number;
20
+ getImagesByItem: ImageType[];
21
+ getImagesByReactions: ImageType[];
22
+ };
23
+ export interface ImageActions {
24
+ add: (image: Partial<ImageType>, type?: string) => Promise<ImageType>;
25
+ delete: (imageId: string, imageProps?: string[]) => Promise<ImageType>;
26
+ update: (image: Partial<ImageType>, type?: string) => Promise<ImageType>;
27
+ upload: (imageFiles: File[], itemId: string, itemType?: string) => Promise<ImageType[]>;
28
+ countByItem: (itemId: string) => Promise<number>;
29
+ listByItem: (itemId: string, from?: number, to?: number, imageProps?: string[]) => Promise<ImageType[]>;
30
+ listByReactions: (reactions: string[], from?: number, to?: number, imageProps?: string[]) => Promise<ImageType[]>;
31
+ updateImageAdapter: (adapter: (input: unknown, options?: ImageAdapterOptions) => any) => void;
32
+ updateImageAdapterOptions: (options: ImageAdapterOptions) => void;
33
+ }
34
+ /**
35
+ * Factory function to create ImageActions with enhanced adapter injection capabilities.
36
+ * Custom adapters are merged with default behavior, allowing partial overrides.
37
+ *
38
+ * @example
39
+ * // Basic usage with default adapters
40
+ * const imageActions = createImageActions(flux);
41
+ *
42
+ * @example
43
+ * // Custom adapter that extends default behavior
44
+ * const customImageAdapter = (input: unknown, options?: ImageAdapterOptions) => {
45
+ * // input is already validated by default adapter
46
+ * if (input.fileSize && input.fileSize > 5000000) {
47
+ * throw new Error('Image file too large');
48
+ * }
49
+ * return input;
50
+ * };
51
+ *
52
+ * const imageActions = createImageActions(flux, {
53
+ * imageAdapter: customImageAdapter
54
+ * });
55
+ */
56
+ export declare const createImageActions: (flux: FluxFramework, options?: ImageActionsOptions) => ImageActions;
@@ -0,0 +1,2 @@
1
+ import{parseString as h}from"@nlabs/utils";import{validateImageInput as S}from"../../adapters/imageAdapter/imageAdapter";import{Config as w}from"../../config";import{IMAGE_CONSTANTS as o}from"../../stores/imageStore";import{appMutation as _,appQuery as T,uploadImage as E}from"../../utils/api";import{convertFileToBase64 as b}from"../../utils/file";const u="images",C=(e,d)=>S(e),A=(e,d)=>(p,y)=>{const g={...d,...y};let I=C(p,g);return e&&(I=e(I,g)),g?.customValidation&&(I=g.customValidation(I)),I},q=(e,d)=>{let p=d?.imageAdapterOptions||{},y=d?.imageAdapter,g=A(y,p);const I=i=>{y=i,g=A(y,p)},O=i=>{p={...p,...i},g=A(y,p)},R=async(i,s="image")=>{try{const t=g(i,p),{base64:n,description:a,itemId:r}=t,m={base64:n,description:a?h(a,500):void 0,fileType:"image/jpeg",itemId:r,itemType:s},{image:c}=await E(e,m);return await e.dispatch({image:c,type:o.ADD_ITEM_SUCCESS}),c}catch(t){throw e.dispatch({error:t,type:o.ADD_ITEM_ERROR}),t}};return{add:R,delete:async(i,s=[])=>{try{const t={imageId:{type:"ID!",value:i}},n=(r={})=>{const{deleteImage:m={}}=r;return e.dispatch({image:m,type:o.REMOVE_ITEM_SUCCESS})},{deleteImage:a}=await _(e,"deleteImage",u,t,["id",...s],{onSuccess:n});return a}catch(t){throw e.dispatch({error:t,type:o.REMOVE_ITEM_ERROR}),t}},update:async(i,s="image")=>{try{const t=g(i,p),{base64:n,description:a,itemId:r}=t,m={base64:n,description:a?h(a,500):void 0,fileType:"image/jpeg",itemId:r,itemType:s},{image:c}=await E(e,m);return await e.dispatch({image:c,type:o.ADD_ITEM_SUCCESS}),c}catch(t){throw e.dispatch({error:t,type:o.ADD_ITEM_ERROR}),t}},upload:async(i,s,t="users")=>{try{const n=await Promise.all(i.map(async a=>{const r=await b(a,w.get("app.images.maxImageSize")),{type:m}=a;return R({base64:r,fileType:m,itemId:s},t)}));return await e.dispatch({images:n,type:o.UPLOAD_ITEM_SUCCESS}),n}catch(n){throw e.dispatch({error:n,type:o.UPLOAD_ITEM_ERROR}),n}},countByItem:async i=>{try{const s={itemId:{type:"String!",value:i}},t=(a={})=>{const{imageCount:r=0}=a;return e.dispatch({itemId:i,count:r,type:o.GET_COUNT_SUCCESS})},{imageCount:n}=await T(e,"imageCount",u,s,["count"],{onSuccess:t});return n}catch(s){throw e.dispatch({error:s,type:o.GET_COUNT_ERROR}),s}},listByItem:async(i,s=0,t=10,n=[])=>{try{const a={from:{type:"Int",value:s},itemId:{type:"ID!",value:i},to:{type:"Int",value:t}},r=(c={})=>{const{imagesByItem:l=[]}=c;return e.dispatch({itemId:i,list:l,type:o.GET_LIST_SUCCESS})},{imagesByItem:m}=await T(e,"imagesByItem",u,a,["color","description","height","imageId","imageUrl","likeCount","thumbUrl","width",...n],{onSuccess:r});return m}catch(a){throw e.dispatch({error:a,type:o.GET_LIST_ERROR}),a}},listByReactions:async(i,s=0,t=10,n=[])=>{try{const a={from:{type:"Int",value:s},reactions:{type:"ReactionInput!",value:i},to:{type:"Int",value:t}},r=(c={})=>{const{imagesByReactions:l=[]}=c;return e.dispatch({list:l,type:o.GET_LIST_SUCCESS})},{imagesByReactions:m}=await T(e,"imagesByReactions",u,a,["color","description","height","imageId","imageUrl","likeCount","thumbUrl","width",...n],{onSuccess:r});return m}catch(a){throw e.dispatch({error:a,type:o.GET_LIST_ERROR}),a}},updateImageAdapter:I,updateImageAdapterOptions:O}};export{q as createImageActions};
2
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FjdGlvbnMvaW1hZ2VBY3Rpb25zL2ltYWdlQWN0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7dmFsaWRhdGVJbWFnZUlucHV0fSBmcm9tICcuLi8uLi9hZGFwdGVycy9pbWFnZUFkYXB0ZXIvaW1hZ2VBZGFwdGVyJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi8uLi9jb25maWcnO1xuaW1wb3J0IHtJTUFHRV9DT05TVEFOVFN9IGZyb20gJy4uLy4uL3N0b3Jlcy9pbWFnZVN0b3JlJztcbmltcG9ydCB7YXBwTXV0YXRpb24sIGFwcFF1ZXJ5LCB1cGxvYWRJbWFnZX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpJztcbmltcG9ydCB7Y29udmVydEZpbGVUb0Jhc2U2NH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZSc7XG5cbmltcG9ydCB0eXBlIHtGbHV4RnJhbWV3b3JrfSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuaW1wb3J0IHR5cGUge0ltYWdlVHlwZX0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvaW1hZ2VBZGFwdGVyL2ltYWdlQWRhcHRlcic7XG5pbXBvcnQgdHlwZSB7QXBpUmVzdWx0c1R5cGUsIFJlYWt0b3JEYkNvbGxlY3Rpb259IGZyb20gJy4uLy4uL3V0aWxzL2FwaSc7XG5cbmNvbnN0IERBVEFfVFlQRTogUmVha3RvckRiQ29sbGVjdGlvbiA9ICdpbWFnZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlQWRhcHRlck9wdGlvbnMge1xuICBzdHJpY3Q/OiBib29sZWFuO1xuICBhbGxvd1BhcnRpYWw/OiBib29sZWFuO1xuICBlbnZpcm9ubWVudD86ICdkZXZlbG9wbWVudCcgfCAncHJvZHVjdGlvbicgfCAndGVzdCc7XG4gIGN1c3RvbVZhbGlkYXRpb24/OiAoaW5wdXQ6IHVua25vd24pID0+IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VBY3Rpb25zT3B0aW9ucyB7XG4gIGltYWdlQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEltYWdlQWRhcHRlck9wdGlvbnMpID0+IGFueTtcbiAgaW1hZ2VBZGFwdGVyT3B0aW9ucz86IEltYWdlQWRhcHRlck9wdGlvbnM7XG59XG5cbmV4cG9ydCB0eXBlIEltYWdlQXBpUmVzdWx0c1R5cGUgPSB7XG4gIGFkZEltYWdlOiBJbWFnZVR5cGU7XG4gIGRlbGV0ZUltYWdlOiBJbWFnZVR5cGU7XG4gIGltYWdlOiBJbWFnZVR5cGU7XG4gIHVwZGF0ZUltYWdlOiBJbWFnZVR5cGU7XG4gIHVwbG9hZEZpbGVJbWFnZXM6IEltYWdlVHlwZVtdO1xuICBnZXRJbWFnZUNvdW50OiBudW1iZXI7XG4gIGdldEltYWdlc0J5SXRlbTogSW1hZ2VUeXBlW107XG4gIGdldEltYWdlc0J5UmVhY3Rpb25zOiBJbWFnZVR5cGVbXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VBY3Rpb25zIHtcbiAgYWRkOiAoaW1hZ2U6IFBhcnRpYWw8SW1hZ2VUeXBlPiwgdHlwZT86IHN0cmluZykgPT4gUHJvbWlzZTxJbWFnZVR5cGU+O1xuICBkZWxldGU6IChpbWFnZUlkOiBzdHJpbmcsIGltYWdlUHJvcHM/OiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxJbWFnZVR5cGU+O1xuICB1cGRhdGU6IChpbWFnZTogUGFydGlhbDxJbWFnZVR5cGU+LCB0eXBlPzogc3RyaW5nKSA9PiBQcm9taXNlPEltYWdlVHlwZT47XG4gIHVwbG9hZDogKGltYWdlRmlsZXM6IEZpbGVbXSwgaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlPzogc3RyaW5nKSA9PiBQcm9taXNlPEltYWdlVHlwZVtdPjtcbiAgY291bnRCeUl0ZW06IChpdGVtSWQ6IHN0cmluZykgPT4gUHJvbWlzZTxudW1iZXI+O1xuICBsaXN0QnlJdGVtOiAoaXRlbUlkOiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCBpbWFnZVByb3BzPzogc3RyaW5nW10pID0+IFByb21pc2U8SW1hZ2VUeXBlW10+O1xuICBsaXN0QnlSZWFjdGlvbnM6IChyZWFjdGlvbnM6IHN0cmluZ1tdLCBmcm9tPzogbnVtYmVyLCB0bz86IG51bWJlciwgaW1hZ2VQcm9wcz86IHN0cmluZ1tdKSA9PiBQcm9taXNlPEltYWdlVHlwZVtdPjtcbiAgdXBkYXRlSW1hZ2VBZGFwdGVyOiAoYWRhcHRlcjogKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogSW1hZ2VBZGFwdGVyT3B0aW9ucykgPT4gYW55KSA9PiB2b2lkO1xuICB1cGRhdGVJbWFnZUFkYXB0ZXJPcHRpb25zOiAob3B0aW9uczogSW1hZ2VBZGFwdGVyT3B0aW9ucykgPT4gdm9pZDtcbn1cblxuLy8gRGVmYXVsdCB2YWxpZGF0aW9uIGZ1bmN0aW9uXG5jb25zdCBkZWZhdWx0SW1hZ2VWYWxpZGF0b3IgPSAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBJbWFnZUFkYXB0ZXJPcHRpb25zKSA9PiB2YWxpZGF0ZUltYWdlSW5wdXQoaW5wdXQpO1xuXG4vLyBFbmhhbmNlZCB2YWxpZGF0aW9uIGZ1bmN0aW9uIHRoYXQgbWVyZ2VzIGN1c3RvbSBsb2dpYyB3aXRoIGRlZmF1bHRzXG5jb25zdCBjcmVhdGVJbWFnZVZhbGlkYXRvciA9IChcbiAgY3VzdG9tQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEltYWdlQWRhcHRlck9wdGlvbnMpID0+IGFueSxcbiAgb3B0aW9ucz86IEltYWdlQWRhcHRlck9wdGlvbnNcbikgPT4gKGlucHV0OiB1bmtub3duLCB2YWxpZGF0b3JPcHRpb25zPzogSW1hZ2VBZGFwdGVyT3B0aW9ucykgPT4ge1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gey4uLm9wdGlvbnMsIC4uLnZhbGlkYXRvck9wdGlvbnN9O1xuXG4gIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCB2YWxpZGF0aW9uXG4gIGxldCB2YWxpZGF0ZWQgPSBkZWZhdWx0SW1hZ2VWYWxpZGF0b3IoaW5wdXQsIG1lcmdlZE9wdGlvbnMpO1xuXG4gIC8vIEFwcGx5IGN1c3RvbSB2YWxpZGF0aW9uIGlmIHByb3ZpZGVkXG4gIGlmKGN1c3RvbUFkYXB0ZXIpIHtcbiAgICB2YWxpZGF0ZWQgPSBjdXN0b21BZGFwdGVyKHZhbGlkYXRlZCwgbWVyZ2VkT3B0aW9ucyk7XG4gIH1cblxuICAvLyBBcHBseSBjdXN0b20gdmFsaWRhdGlvbiBmcm9tIG9wdGlvbnMgaWYgcHJvdmlkZWRcbiAgaWYobWVyZ2VkT3B0aW9ucz8uY3VzdG9tVmFsaWRhdGlvbikge1xuICAgIHZhbGlkYXRlZCA9IG1lcmdlZE9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbih2YWxpZGF0ZWQpIGFzIEltYWdlVHlwZTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZWQ7XG59O1xuXG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIEltYWdlQWN0aW9ucyB3aXRoIGVuaGFuY2VkIGFkYXB0ZXIgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy5cbiAqIEN1c3RvbSBhZGFwdGVycyBhcmUgbWVyZ2VkIHdpdGggZGVmYXVsdCBiZWhhdmlvciwgYWxsb3dpbmcgcGFydGlhbCBvdmVycmlkZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIHVzYWdlIHdpdGggZGVmYXVsdCBhZGFwdGVyc1xuICogY29uc3QgaW1hZ2VBY3Rpb25zID0gY3JlYXRlSW1hZ2VBY3Rpb25zKGZsdXgpO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b20gYWRhcHRlciB0aGF0IGV4dGVuZHMgZGVmYXVsdCBiZWhhdmlvclxuICogY29uc3QgY3VzdG9tSW1hZ2VBZGFwdGVyID0gKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogSW1hZ2VBZGFwdGVyT3B0aW9ucykgPT4ge1xuICogICAvLyBpbnB1dCBpcyBhbHJlYWR5IHZhbGlkYXRlZCBieSBkZWZhdWx0IGFkYXB0ZXJcbiAqICAgaWYgKGlucHV0LmZpbGVTaXplICYmIGlucHV0LmZpbGVTaXplID4gNTAwMDAwMCkge1xuICogICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2UgZmlsZSB0b28gbGFyZ2UnKTtcbiAqICAgfVxuICogICByZXR1cm4gaW5wdXQ7XG4gKiB9O1xuICpcbiAqIGNvbnN0IGltYWdlQWN0aW9ucyA9IGNyZWF0ZUltYWdlQWN0aW9ucyhmbHV4LCB7XG4gKiAgIGltYWdlQWRhcHRlcjogY3VzdG9tSW1hZ2VBZGFwdGVyXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUltYWdlQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IEltYWdlQWN0aW9uc09wdGlvbnNcbik6IEltYWdlQWN0aW9ucyA9PiB7XG4gIC8vIEluaXRpYWxpemUgYWRhcHRlciBzdGF0ZVxuICBsZXQgaW1hZ2VBZGFwdGVyT3B0aW9uczogSW1hZ2VBZGFwdGVyT3B0aW9ucyA9IG9wdGlvbnM/LmltYWdlQWRhcHRlck9wdGlvbnMgfHwge307XG4gIGxldCBjdXN0b21JbWFnZUFkYXB0ZXIgPSBvcHRpb25zPy5pbWFnZUFkYXB0ZXI7XG5cbiAgLy8gQ3JlYXRlIHZhbGlkYXRvcnMgdGhhdCBtZXJnZSBjdXN0b20gYWRhcHRlcnMgd2l0aCBkZWZhdWx0c1xuICBsZXQgdmFsaWRhdGVJbWFnZSA9IGNyZWF0ZUltYWdlVmFsaWRhdG9yKGN1c3RvbUltYWdlQWRhcHRlciwgaW1hZ2VBZGFwdGVyT3B0aW9ucyk7XG5cbiAgLy8gVXBkYXRlIGZ1bmN0aW9ucyB0aGF0IHJlY3JlYXRlIHZhbGlkYXRvcnNcbiAgY29uc3QgdXBkYXRlSW1hZ2VBZGFwdGVyID0gKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IEltYWdlQWRhcHRlck9wdGlvbnMpID0+IGFueSk6IHZvaWQgPT4ge1xuICAgIGN1c3RvbUltYWdlQWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgdmFsaWRhdGVJbWFnZSA9IGNyZWF0ZUltYWdlVmFsaWRhdG9yKGN1c3RvbUltYWdlQWRhcHRlciwgaW1hZ2VBZGFwdGVyT3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlSW1hZ2VBZGFwdGVyT3B0aW9ucyA9IChvcHRpb25zOiBJbWFnZUFkYXB0ZXJPcHRpb25zKTogdm9pZCA9PiB7XG4gICAgaW1hZ2VBZGFwdGVyT3B0aW9ucyA9IHsuLi5pbWFnZUFkYXB0ZXJPcHRpb25zLCAuLi5vcHRpb25zfTtcbiAgICB2YWxpZGF0ZUltYWdlID0gY3JlYXRlSW1hZ2VWYWxpZGF0b3IoY3VzdG9tSW1hZ2VBZGFwdGVyLCBpbWFnZUFkYXB0ZXJPcHRpb25zKTtcbiAgfTtcblxuICAvLyBBY3Rpb24gaW1wbGVtZW50YXRpb25zXG4gIGNvbnN0IGFkZCA9IGFzeW5jIChcbiAgICBpbWFnZTogUGFydGlhbDxJbWFnZVR5cGU+LFxuICAgIHR5cGU6IHN0cmluZyA9ICdpbWFnZSdcbiAgKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsaWRhdGVkSW1hZ2UgPSB2YWxpZGF0ZUltYWdlKGltYWdlLCBpbWFnZUFkYXB0ZXJPcHRpb25zKTtcbiAgICAgIGNvbnN0IHtiYXNlNjQsIGRlc2NyaXB0aW9uLCBpdGVtSWR9ID0gdmFsaWRhdGVkSW1hZ2U7XG4gICAgICBjb25zdCBmb3JtYXRJbWFnZSA9IHtcbiAgICAgICAgYmFzZTY0LFxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPyBwYXJzZVN0cmluZyhkZXNjcmlwdGlvbiwgNTAwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZmlsZVR5cGU6ICdpbWFnZS9qcGVnJyxcbiAgICAgICAgaXRlbUlkLFxuICAgICAgICBpdGVtVHlwZTogdHlwZVxuICAgICAgfTtcblxuICAgICAgY29uc3Qge2ltYWdlOiBuZXdJbWFnZX0gPSBhd2FpdCB1cGxvYWRJbWFnZShmbHV4LCBmb3JtYXRJbWFnZSk7XG4gICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtpbWFnZTogbmV3SW1hZ2UsIHR5cGU6IElNQUdFX0NPTlNUQU5UUy5BRERfSVRFTV9TVUNDRVNTfSk7XG4gICAgICByZXR1cm4gbmV3SW1hZ2UgYXMgSW1hZ2VUeXBlO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBJTUFHRV9DT05TVEFOVFMuQUREX0lURU1fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWxldGVJbWFnZSA9IGFzeW5jIChcbiAgICBpbWFnZUlkOiBzdHJpbmcsXG4gICAgaW1hZ2VQcm9wczogc3RyaW5nW10gPSBbXVxuICApOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaW1hZ2VJZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBpbWFnZUlkXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHtkZWxldGVJbWFnZSA9IHt9fSA9IGRhdGE7XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtpbWFnZTogZGVsZXRlSW1hZ2UsIHR5cGU6IElNQUdFX0NPTlNUQU5UUy5SRU1PVkVfSVRFTV9TVUNDRVNTfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7ZGVsZXRlSW1hZ2V9ID0gYXdhaXQgYXBwTXV0YXRpb24oZmx1eCwgJ2RlbGV0ZUltYWdlJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydpZCcsIC4uLmltYWdlUHJvcHNdLCB7b25TdWNjZXNzfSk7XG4gICAgICByZXR1cm4gZGVsZXRlSW1hZ2UgYXMgSW1hZ2VUeXBlO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBJTUFHRV9DT05TVEFOVFMuUkVNT1ZFX0lURU1fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGUgPSBhc3luYyAoXG4gICAgaW1hZ2U6IFBhcnRpYWw8SW1hZ2VUeXBlPixcbiAgICB0eXBlOiBzdHJpbmcgPSAnaW1hZ2UnXG4gICk6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlZEltYWdlID0gdmFsaWRhdGVJbWFnZShpbWFnZSwgaW1hZ2VBZGFwdGVyT3B0aW9ucyk7XG4gICAgICBjb25zdCB7YmFzZTY0LCBkZXNjcmlwdGlvbiwgaXRlbUlkfSA9IHZhbGlkYXRlZEltYWdlO1xuICAgICAgY29uc3QgZm9ybWF0SW1hZ2UgPSB7XG4gICAgICAgIGJhc2U2NCxcbiAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8gcGFyc2VTdHJpbmcoZGVzY3JpcHRpb24sIDUwMCkgOiB1bmRlZmluZWQsXG4gICAgICAgIGZpbGVUeXBlOiAnaW1hZ2UvanBlZycsXG4gICAgICAgIGl0ZW1JZCxcbiAgICAgICAgaXRlbVR5cGU6IHR5cGVcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHtpbWFnZTogbmV3SW1hZ2V9ID0gYXdhaXQgdXBsb2FkSW1hZ2UoZmx1eCwgZm9ybWF0SW1hZ2UpO1xuICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7aW1hZ2U6IG5ld0ltYWdlLCB0eXBlOiBJTUFHRV9DT05TVEFOVFMuQUREX0lURU1fU1VDQ0VTU30pO1xuICAgICAgcmV0dXJuIG5ld0ltYWdlIGFzIEltYWdlVHlwZTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogSU1BR0VfQ09OU1RBTlRTLkFERF9JVEVNX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBsb2FkID0gYXN5bmMgKFxuICAgIGltYWdlRmlsZXM6IEZpbGVbXSxcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nID0gJ3VzZXJzJ1xuICApOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhdmVkSW1hZ2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGltYWdlRmlsZXMubWFwKGFzeW5jIChmaWxlOiBGaWxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZTY0OiBzdHJpbmcgPSBhd2FpdCBjb252ZXJ0RmlsZVRvQmFzZTY0KGZpbGUsIENvbmZpZy5nZXQoJ2FwcC5pbWFnZXMubWF4SW1hZ2VTaXplJykpO1xuICAgICAgICAgIGNvbnN0IHt0eXBlOiBmaWxlVHlwZX0gPSBmaWxlO1xuICAgICAgICAgIHJldHVybiBhZGQoe2Jhc2U2NCwgZmlsZVR5cGUsIGl0ZW1JZH0sIGl0ZW1UeXBlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe2ltYWdlczogc2F2ZWRJbWFnZXMsIHR5cGU6IElNQUdFX0NPTlNUQU5UUy5VUExPQURfSVRFTV9TVUNDRVNTfSk7XG4gICAgICByZXR1cm4gc2F2ZWRJbWFnZXM7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IElNQUdFX0NPTlNUQU5UUy5VUExPQURfSVRFTV9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvdW50QnlJdGVtID0gYXN5bmMgKGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1JZDoge1xuICAgICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgICB2YWx1ZTogaXRlbUlkXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHtpbWFnZUNvdW50OiBjb3VudCA9IDB9ID0gZGF0YTtcbiAgICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe2l0ZW1JZCwgY291bnQsIHR5cGU6IElNQUdFX0NPTlNUQU5UUy5HRVRfQ09VTlRfU1VDQ0VTU30pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge2ltYWdlQ291bnR9ID0gYXdhaXQgYXBwUXVlcnkoZmx1eCwgJ2ltYWdlQ291bnQnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbJ2NvdW50J10sIHtvblN1Y2Nlc3N9KTtcbiAgICAgIHJldHVybiBpbWFnZUNvdW50IGFzIG51bWJlcjtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogSU1BR0VfQ09OU1RBTlRTLkdFVF9DT1VOVF9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxpc3RCeUl0ZW0gPSBhc3luYyAoXG4gICAgaXRlbUlkOiBzdHJpbmcsXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgaW1hZ2VQcm9wczogc3RyaW5nW10gPSBbXVxuICApOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBmcm9tOiB7XG4gICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgdmFsdWU6IGZyb21cbiAgICAgICAgfSxcbiAgICAgICAgaXRlbUlkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgICAgdmFsdWU6IGl0ZW1JZFxuICAgICAgICB9LFxuICAgICAgICB0bzoge1xuICAgICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICAgIHZhbHVlOiB0b1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7aW1hZ2VzQnlJdGVtID0gW119ID0gZGF0YSBhcyB7aW1hZ2VzQnlJdGVtOiBJbWFnZVR5cGVbXX07XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgbGlzdDogaW1hZ2VzQnlJdGVtLFxuICAgICAgICAgIHR5cGU6IElNQUdFX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge2ltYWdlc0J5SXRlbX0gPSBhd2FpdCBhcHBRdWVyeShcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2ltYWdlc0J5SXRlbScsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFtcbiAgICAgICAgICAnY29sb3InLFxuICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgJ2ltYWdlSWQnLFxuICAgICAgICAgICdpbWFnZVVybCcsXG4gICAgICAgICAgJ2xpa2VDb3VudCcsXG4gICAgICAgICAgJ3RodW1iVXJsJyxcbiAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgIC4uLmltYWdlUHJvcHNcbiAgICAgICAgXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgICByZXR1cm4gaW1hZ2VzQnlJdGVtIGFzIEltYWdlVHlwZVtdO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBJTUFHRV9DT05TVEFOVFMuR0VUX0xJU1RfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBsaXN0QnlSZWFjdGlvbnMgPSBhc3luYyAoXG4gICAgcmVhY3Rpb25zOiBzdHJpbmdbXSxcbiAgICBmcm9tOiBudW1iZXIgPSAwLFxuICAgIHRvOiBudW1iZXIgPSAxMCxcbiAgICBpbWFnZVByb3BzOiBzdHJpbmdbXSA9IFtdXG4gICk6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGZyb206IHtcbiAgICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgICB2YWx1ZTogZnJvbVxuICAgICAgICB9LFxuICAgICAgICByZWFjdGlvbnM6IHtcbiAgICAgICAgICB0eXBlOiAnUmVhY3Rpb25JbnB1dCEnLFxuICAgICAgICAgIHZhbHVlOiByZWFjdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgdG86IHtcbiAgICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgICB2YWx1ZTogdG9cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgICAgY29uc3Qge2ltYWdlc0J5UmVhY3Rpb25zID0gW119ID0gZGF0YSBhcyB7aW1hZ2VzQnlSZWFjdGlvbnM6IEltYWdlVHlwZVtdfTtcbiAgICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIGxpc3Q6IGltYWdlc0J5UmVhY3Rpb25zLFxuICAgICAgICAgIHR5cGU6IElNQUdFX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge2ltYWdlc0J5UmVhY3Rpb25zfSA9IGF3YWl0IGFwcFF1ZXJ5KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnaW1hZ2VzQnlSZWFjdGlvbnMnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbXG4gICAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICdpbWFnZUlkJyxcbiAgICAgICAgICAnaW1hZ2VVcmwnLFxuICAgICAgICAgICdsaWtlQ291bnQnLFxuICAgICAgICAgICd0aHVtYlVybCcsXG4gICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAuLi5pbWFnZVByb3BzXG4gICAgICAgIF0sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgICAgcmV0dXJuIGltYWdlc0J5UmVhY3Rpb25zIGFzIEltYWdlVHlwZVtdO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBJTUFHRV9DT05TVEFOVFMuR0VUX0xJU1RfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGFjdGlvbnMgb2JqZWN0XG4gIHJldHVybiB7XG4gICAgYWRkLFxuICAgIGRlbGV0ZTogZGVsZXRlSW1hZ2UsXG4gICAgdXBkYXRlLFxuICAgIHVwbG9hZCxcbiAgICBjb3VudEJ5SXRlbSxcbiAgICBsaXN0QnlJdGVtLFxuICAgIGxpc3RCeVJlYWN0aW9ucyxcbiAgICB1cGRhdGVJbWFnZUFkYXB0ZXIsXG4gICAgdXBkYXRlSW1hZ2VBZGFwdGVyT3B0aW9uc1xuICB9O1xufTtcblxuIl0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBUSxlQUFBQSxNQUFrQixlQUUxQixPQUFRLHNCQUFBQyxNQUF5QiwyQ0FDakMsT0FBUSxVQUFBQyxNQUFhLGVBQ3JCLE9BQVEsbUJBQUFDLE1BQXNCLDBCQUM5QixPQUFRLGVBQUFDLEVBQWEsWUFBQUMsRUFBVSxl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LEdBQ2JiLEVBQXVCLENBQUMsSUFDQyxDQUN6QixHQUFJLENBQ0YsTUFBTUMsRUFBaUIsQ0FDckIsS0FBTSxDQUNKLEtBQU0sTUFDTixNQUFPVyxDQUNULEVBQ0EsVUFBVyxDQUNULEtBQU0saUJBQ04sTUFBT0csQ0FDVCxFQUNBLEdBQUksQ0FDRixLQUFNLE1BQ04sTUFBT0YsQ0FDVCxDQUNGLEVBRU1YLEVBQVksQ0FBQ0MsRUFBdUIsQ0FBQyxJQUFNLENBQy9DLEtBQU0sQ0FBQyxrQkFBQWEsRUFBb0IsQ0FBQyxDQUFDLEVBQUliLEVBQ2pDLE9BQU9yQixFQUFLLFNBQVMsQ0FDbkIsS0FBTWtDLEVBQ04sS0FBTWpELEVBQWdCLGdCQUN4QixDQUFDLENBQ0gsRUFFTSxDQUFDLGtCQUFBaUQsQ0FBaUIsRUFBSSxNQUFNL0MsRUFDaENhLEVBQ0Esb0JBQ0FWLEVBQ0E2QixFQUNBLENBQ0UsUUFDQSxjQUNBLFNBQ0EsVUFDQSxXQUNBLFlBQ0EsV0FDQSxRQUNBLEdBQUdELENBQ0wsRUFDQSxDQUFDLFVBQUFFLENBQVMsQ0FDWixFQUNBLE9BQU9jLENBQ1QsT0FBUWxCLEVBQU8sQ0FDYixNQUFBaEIsRUFBSyxTQUFTLENBQUMsTUFBQWdCLEVBQU8sS0FBTS9CLEVBQWdCLGNBQWMsQ0FBQyxFQUNyRCtCLENBQ1IsQ0FDRixFQVdFLG1CQUFBWixFQUNBLDBCQUFBRSxDQUNGLENBQ0YiLAogICJuYW1lcyI6IFsicGFyc2VTdHJpbmciLCAidmFsaWRhdGVJbWFnZUlucHV0IiwgIkNvbmZpZyIsICJJTUFHRV9DT05TVEFOVFMiLCAiYXBwTXV0YXRpb24iLCAiYXBwUXVlcnkiLCAidXBsb2FkSW1hZ2UiLCAiY29udmVydEZpbGVUb0Jhc2U2NCIsICJEQVRBX1RZUEUiLCAiZGVmYXVsdEltYWdlVmFsaWRhdG9yIiwgImlucHV0IiwgIm9wdGlvbnMiLCAiY3JlYXRlSW1hZ2VWYWxpZGF0b3IiLCAiY3VzdG9tQWRhcHRlciIsICJ2YWxpZGF0b3JPcHRpb25zIiwgIm1lcmdlZE9wdGlvbnMiLCAidmFsaWRhdGVkIiwgImNyZWF0ZUltYWdlQWN0aW9ucyIsICJmbHV4IiwgImltYWdlQWRhcHRlck9wdGlvbnMiLCAiY3VzdG9tSW1hZ2VBZGFwdGVyIiwgInZhbGlkYXRlSW1hZ2UiLCAidXBkYXRlSW1hZ2VBZGFwdGVyIiwgImFkYXB0ZXIiLCAidXBkYXRlSW1hZ2VBZGFwdGVyT3B0aW9ucyIsICJhZGQiLCAiaW1hZ2UiLCAidHlwZSIsICJ2YWxpZGF0ZWRJbWFnZSIsICJiYXNlNjQiLCAiZGVzY3JpcHRpb24iLCAiaXRlbUlkIiwgImZvcm1hdEltYWdlIiwgIm5ld0ltYWdlIiwgImVycm9yIiwgImltYWdlSWQiLCAiaW1hZ2VQcm9wcyIsICJxdWVyeVZhcmlhYmxlcyIsICJvblN1Y2Nlc3MiLCAiZGF0YSIsICJkZWxldGVJbWFnZSIsICJpbWFnZUZpbGVzIiwgIml0ZW1UeXBlIiwgInNhdmVkSW1hZ2VzIiwgImZpbGUiLCAiZmlsZVR5cGUiLCAiY291bnQiLCAiaW1hZ2VDb3VudCIsICJmcm9tIiwgInRvIiwgImltYWdlc0J5SXRlbSIsICJyZWFjdGlvbnMiLCAiaW1hZ2VzQnlSZWFjdGlvbnMiXQp9Cg==
@@ -0,0 +1,9 @@
1
+ export * from './eventActions/eventActions';
2
+ export * from './imageActions/imageActions';
3
+ export * from './locationActions/locationActions';
4
+ export * from './messageActions/messageActions';
5
+ export * from './postActions/postActions';
6
+ export * from './reactionActions/reactionActions';
7
+ export * from './tagActions/tagActions';
8
+ export * from './userActions/userActions';
9
+ export * from './websocketActions/websocketActions';
@@ -0,0 +1,2 @@
1
+ export*from"./eventActions/eventActions";export*from"./imageActions/imageActions";export*from"./locationActions/locationActions";export*from"./messageActions/messageActions";export*from"./postActions/postActions";export*from"./reactionActions/reactionActions";export*from"./tagActions/tagActions";export*from"./userActions/userActions";export*from"./websocketActions/websocketActions";
2
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gJy4vZXZlbnRBY3Rpb25zL2V2ZW50QWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlQWN0aW9ucy9pbWFnZUFjdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbkFjdGlvbnMvbG9jYXRpb25BY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZUFjdGlvbnMvbWVzc2FnZUFjdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9wb3N0QWN0aW9ucy9wb3N0QWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3JlYWN0aW9uQWN0aW9ucy9yZWFjdGlvbkFjdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi90YWdBY3Rpb25zL3RhZ0FjdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyQWN0aW9ucy91c2VyQWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3dlYnNvY2tldEFjdGlvbnMvd2Vic29ja2V0QWN0aW9ucyc7XG5cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFdBQWMsOEJBQ2QsV0FBYyw4QkFDZCxXQUFjLG9DQUNkLFdBQWMsa0NBQ2QsV0FBYyw0QkFDZCxXQUFjLG9DQUNkLFdBQWMsMEJBQ2QsV0FBYyw0QkFDZCxXQUFjIiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,58 @@
1
+ import type { FluxFramework } from '@nlabs/arkhamjs';
2
+ import type { LocationType } from '../../adapters/locationAdapter/locationAdapter';
3
+ export interface LocationAdapterOptions {
4
+ strict?: boolean;
5
+ allowPartial?: boolean;
6
+ environment?: 'development' | 'production' | 'test';
7
+ customValidation?: (input: unknown) => unknown;
8
+ }
9
+ export interface LocationActionsOptions {
10
+ locationAdapter?: (input: unknown, options?: LocationAdapterOptions) => any;
11
+ locationAdapterOptions?: LocationAdapterOptions;
12
+ }
13
+ export type LocationApiResultsType = {
14
+ addLocation: LocationType;
15
+ deleteLocation: LocationType;
16
+ getLocation: LocationType;
17
+ getLocationsByItem: LocationType[];
18
+ updateLocation: LocationType;
19
+ };
20
+ export interface LocationActions {
21
+ autocompleteLocation: (address: string, latitude?: number, longitude?: number, locationProps?: string[]) => Promise<LocationType[]>;
22
+ add: (location: Partial<LocationType>, locationProps?: string[]) => Promise<LocationType>;
23
+ delete: (locationId: string) => Promise<LocationType>;
24
+ getCurrentLocation: (setLocation?: (location: LocationType) => void) => Promise<LocationType>;
25
+ getGoogleLocation: (address: string) => Promise<{
26
+ latitude: number;
27
+ location: string;
28
+ longitude: number;
29
+ }>;
30
+ getLocation: (location: Partial<LocationType>, locationProps?: string[]) => Promise<LocationType>;
31
+ listByItem: (itemId: string, locationProps?: string[]) => Promise<LocationType[]>;
32
+ update: (location: Partial<LocationType>, locationProps?: string[]) => Promise<LocationType>;
33
+ updateLocationAdapter: (adapter: (input: unknown, options?: LocationAdapterOptions) => any) => void;
34
+ updateLocationAdapterOptions: (options: LocationAdapterOptions) => void;
35
+ }
36
+ /**
37
+ * Factory function to create LocationActions with enhanced adapter injection capabilities.
38
+ * Custom adapters are merged with default behavior, allowing partial overrides.
39
+ *
40
+ * @example
41
+ * // Basic usage with default adapters
42
+ * const locationActions = createLocationActions(flux);
43
+ *
44
+ * @example
45
+ * // Custom adapter that extends default behavior
46
+ * const customLocationAdapter = (input: unknown, options?: LocationAdapterOptions) => {
47
+ * // input is already validated by default adapter
48
+ * if (input.latitude && (input.latitude < -90 || input.latitude > 90)) {
49
+ * throw new Error('Invalid latitude');
50
+ * }
51
+ * return input;
52
+ * };
53
+ *
54
+ * const locationActions = createLocationActions(flux, {
55
+ * locationAdapter: customLocationAdapter
56
+ * });
57
+ */
58
+ export declare const createLocationActions: (flux: FluxFramework, options?: LocationActionsOptions) => LocationActions;