@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.
- package/FACTORY_PATTERN_GUIDE.md +244 -0
- package/README.md +332 -0
- package/examples/factory-pattern-usage.ts +283 -0
- package/lex.config.mjs +17 -0
- package/lib/actions/eventActions/eventActions.d.ts +45 -0
- package/lib/actions/eventActions/eventActions.js +2 -0
- package/lib/actions/imageActions/imageActions.d.ts +56 -0
- package/lib/actions/imageActions/imageActions.js +2 -0
- package/lib/actions/index.d.ts +9 -0
- package/lib/actions/index.js +2 -0
- package/lib/actions/locationActions/locationActions.d.ts +58 -0
- package/lib/actions/locationActions/locationActions.js +2 -0
- package/lib/actions/messageActions/messageActions.d.ts +54 -0
- package/lib/actions/messageActions/messageActions.js +2 -0
- package/lib/actions/postActions/postActions.d.ts +56 -0
- package/lib/actions/postActions/postActions.js +2 -0
- package/lib/actions/profileActions/profileActions.d.ts +50 -0
- package/lib/actions/profileActions/profileActions.js +2 -0
- package/lib/actions/reactionActions/reactionActions.d.ts +52 -0
- package/lib/actions/reactionActions/reactionActions.js +2 -0
- package/lib/actions/sseActions/sseActions.d.ts +37 -0
- package/lib/actions/sseActions/sseActions.js +2 -0
- package/lib/actions/tagActions/tagActions.d.ts +55 -0
- package/lib/actions/tagActions/tagActions.js +2 -0
- package/lib/actions/userActions/userActions.d.ts +131 -0
- package/lib/actions/userActions/userActions.js +2 -0
- package/lib/actions/websocketActions/websocketActions.d.ts +31 -0
- package/lib/actions/websocketActions/websocketActions.js +2 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +20 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.js +2 -0
- package/lib/adapters/contentAdapter/contentAdapter.d.ts +31 -0
- package/lib/adapters/contentAdapter/contentAdapter.js +2 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +23 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.js +2 -0
- package/lib/adapters/eventAdapter/eventAdapter.d.ts +43 -0
- package/lib/adapters/eventAdapter/eventAdapter.js +2 -0
- package/lib/adapters/fileAdapter/fileAdapter.d.ts +29 -0
- package/lib/adapters/fileAdapter/fileAdapter.js +2 -0
- package/lib/adapters/imageAdapter/imageAdapter.d.ts +31 -0
- package/lib/adapters/imageAdapter/imageAdapter.js +2 -0
- package/lib/adapters/index.d.ts +16 -0
- package/lib/adapters/index.js +2 -0
- package/lib/adapters/locationAdapter/locationAdapter.d.ts +27 -0
- package/lib/adapters/locationAdapter/locationAdapter.js +2 -0
- package/lib/adapters/messageAdapter/messageAdapter.d.ts +27 -0
- package/lib/adapters/messageAdapter/messageAdapter.js +2 -0
- package/lib/adapters/personaAdapter/personaAdapter.d.ts +18 -0
- package/lib/adapters/personaAdapter/personaAdapter.js +2 -0
- package/lib/adapters/postAdapter/postAdapter.d.ts +32 -0
- package/lib/adapters/postAdapter/postAdapter.js +2 -0
- package/lib/adapters/profileAdapter/profileAdapter.d.ts +32 -0
- package/lib/adapters/profileAdapter/profileAdapter.js +2 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +20 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.js +2 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +16 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.js +2 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +23 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.js +2 -0
- package/lib/adapters/tagAdapter/tagAdapter.d.ts +20 -0
- package/lib/adapters/tagAdapter/tagAdapter.js +2 -0
- package/lib/adapters/userAdapter/userAdapter.d.ts +55 -0
- package/lib/adapters/userAdapter/userAdapter.js +2 -0
- package/lib/config/index.d.ts +31 -0
- package/lib/config/index.js +2 -0
- package/lib/constants/MetropolisConstants.d.ts +14 -0
- package/lib/constants/MetropolisConstants.js +2 -0
- package/lib/graphql/message.d.ts +2 -0
- package/lib/graphql/message.js +18 -0
- package/lib/graphql/notification.d.ts +2 -0
- package/lib/graphql/notification.js +18 -0
- package/lib/graphql/session.d.ts +1 -0
- package/lib/graphql/session.js +16 -0
- package/lib/index.d.ts +29 -0
- package/lib/index.js +2 -0
- package/lib/stores/appStore.d.ts +22 -0
- package/lib/stores/appStore.js +2 -0
- package/lib/stores/eventStore.d.ts +34 -0
- package/lib/stores/eventStore.js +2 -0
- package/lib/stores/imageStore.d.ts +35 -0
- package/lib/stores/imageStore.js +2 -0
- package/lib/stores/index.d.ts +15 -0
- package/lib/stores/index.js +2 -0
- package/lib/stores/locationStore.d.ts +33 -0
- package/lib/stores/locationStore.js +2 -0
- package/lib/stores/messageStore.d.ts +36 -0
- package/lib/stores/messageStore.js +2 -0
- package/lib/stores/postStore.d.ts +33 -0
- package/lib/stores/postStore.js +2 -0
- package/lib/stores/profileStore.d.ts +24 -0
- package/lib/stores/profileStore.js +2 -0
- package/lib/stores/reactionStore.d.ts +24 -0
- package/lib/stores/reactionStore.js +2 -0
- package/lib/stores/tagStore.d.ts +31 -0
- package/lib/stores/tagStore.js +2 -0
- package/lib/stores/userStore.d.ts +73 -0
- package/lib/stores/userStore.js +2 -0
- package/lib/stores/websocketStore.d.ts +23 -0
- package/lib/stores/websocketStore.js +2 -0
- package/lib/utils/MetropolisProvider.d.ts +34 -0
- package/lib/utils/MetropolisProvider.js +2 -0
- package/lib/utils/actionFactory.d.ts +22 -0
- package/lib/utils/actionFactory.js +2 -0
- package/lib/utils/api.d.ts +43 -0
- package/lib/utils/api.js +7 -0
- package/lib/utils/app.d.ts +6 -0
- package/lib/utils/app.js +2 -0
- package/lib/utils/baseActionFactory.d.ts +34 -0
- package/lib/utils/baseActionFactory.js +2 -0
- package/lib/utils/dateUtils.d.ts +2 -0
- package/lib/utils/dateUtils.js +2 -0
- package/lib/utils/file.d.ts +1 -0
- package/lib/utils/file.js +2 -0
- package/lib/utils/location.d.ts +9 -0
- package/lib/utils/location.js +2 -0
- package/lib/utils/useMetropolis.d.ts +12 -0
- package/lib/utils/useMetropolis.js +2 -0
- package/lib/utils/validatorFactory.d.ts +48 -0
- package/lib/utils/validatorFactory.js +2 -0
- package/package.json +33 -27
- package/tsconfig.lint.json +25 -0
- 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;
|