@nlabs/metropolisjs 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +167 -0
- package/AGENTS.md +13 -0
- package/CHANGELOG.md +112 -0
- package/GRAPHQL_VALIDATION_RESULTS.md +158 -0
- package/PERMISSION_GRAPHQL_INTEGRATION.md +293 -0
- package/PERMISSION_IMPLEMENTATION_SUMMARY.md +243 -0
- package/README.md +1343 -0
- package/SIGNIN_GRAPHQL_VALIDATION.md +125 -0
- package/VAULT_GRAPHQL_API_FINDINGS.md +312 -0
- package/docs/ACTIONS.md +63 -0
- package/docs/COLLECTIONS.md +1038 -0
- package/docs/CONNECTIONS.md +1367 -0
- package/docs/CRUD_INTEGRATION.md +702 -0
- package/examples/connections-usage.tsx +909 -0
- package/examples/content-actions-usage.ts +144 -0
- package/examples/crud-usage.tsx +847 -0
- package/examples/extensibility-usage.tsx +889 -0
- package/examples/factory-pattern-usage.ts +283 -0
- package/examples/i18n-import-examples.ts +86 -0
- package/examples/i18n-namespace-usage.ts +118 -0
- package/examples/i18next-singleton-demo.ts +187 -0
- package/examples/permission-system-usage.tsx +415 -0
- package/examples/project-details.tsx +397 -0
- package/examples/shared-i18n-usage.tsx +203 -0
- package/examples/signup-error-handling.ts +100 -0
- package/examples/translation-types.ts +86 -0
- package/examples/translation-usage.tsx +336 -0
- package/factoryPatternGuide.md +244 -0
- package/index.js +1 -0
- package/jest.config.mjs +28 -0
- package/lex.config.mjs +26 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
- package/lib/actions/appActions/appActions.d.ts +29 -0
- package/lib/actions/appActions/appActions.d.ts.map +1 -0
- package/lib/actions/appActions/appActions.js +159 -0
- package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
- package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
- package/lib/actions/connectionActions/connectionActions.js +131 -0
- package/lib/actions/contentActions/contentActions.d.ts +34 -0
- package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
- package/lib/actions/contentActions/contentActions.js +314 -0
- package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
- package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
- package/lib/actions/conversationActions/conversationActions.js +225 -0
- package/lib/actions/eventActions/eventActions.d.ts +65 -0
- package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
- package/lib/actions/eventActions/eventActions.js +436 -0
- package/lib/actions/groupActions/groupActions.d.ts +30 -0
- package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
- package/lib/actions/groupActions/groupActions.js +229 -0
- package/lib/actions/imageActions/imageActions.d.ts +62 -0
- package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
- package/lib/actions/imageActions/imageActions.js +593 -0
- package/lib/actions/index.d.ts +21 -0
- package/lib/actions/index.d.ts.map +1 -0
- package/lib/actions/index.js +22 -0
- package/lib/actions/locationActions/locationActions.d.ts +60 -0
- package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
- package/lib/actions/locationActions/locationActions.js +388 -0
- package/lib/actions/messageActions/messageActions.d.ts +38 -0
- package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
- package/lib/actions/messageActions/messageActions.js +235 -0
- package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
- package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
- package/lib/actions/permissionActions/permissionActions.js +330 -0
- package/lib/actions/personaActions/personaActions.d.ts +65 -0
- package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
- package/lib/actions/personaActions/personaActions.js +572 -0
- package/lib/actions/postActions/postActions.d.ts +36 -0
- package/lib/actions/postActions/postActions.d.ts.map +1 -0
- package/lib/actions/postActions/postActions.js +447 -0
- package/lib/actions/reactionActions/reactionActions.d.ts +38 -0
- package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
- package/lib/actions/reactionActions/reactionActions.js +413 -0
- package/lib/actions/sseActions/sseActions.d.ts +38 -0
- package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
- package/lib/actions/sseActions/sseActions.js +148 -0
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
- package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
- package/lib/actions/tagActions/tagActions.d.ts +37 -0
- package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
- package/lib/actions/tagActions/tagActions.js +347 -0
- package/lib/actions/translationActions/translationActions.d.ts +38 -0
- package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
- package/lib/actions/translationActions/translationActions.js +189 -0
- package/lib/actions/userActions/userActions.d.ts +78 -0
- package/lib/actions/userActions/userActions.d.ts.map +1 -0
- package/lib/actions/userActions/userActions.js +844 -0
- package/lib/actions/videoActions/videoActions.d.ts +41 -0
- package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
- package/lib/actions/videoActions/videoActions.js +532 -0
- package/lib/actions/websocketActions/websocketActions.d.ts +30 -0
- package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
- package/lib/actions/websocketActions/websocketActions.js +377 -0
- package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
- package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
- package/lib/adapters/appAdapter/appAdapter.js +90 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +21 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -0
- package/lib/adapters/contentAdapter/contentAdapter.d.ts +32 -0
- package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
- package/lib/adapters/contentAdapter/contentAdapter.js +107 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +24 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -0
- package/lib/adapters/eventAdapter/eventAdapter.d.ts +46 -0
- package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
- package/lib/adapters/eventAdapter/eventAdapter.js +162 -0
- package/lib/adapters/fileAdapter/fileAdapter.d.ts +30 -0
- package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
- package/lib/adapters/fileAdapter/fileAdapter.js +118 -0
- package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
- package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
- package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
- package/lib/adapters/imageAdapter/imageAdapter.d.ts +38 -0
- package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
- package/lib/adapters/imageAdapter/imageAdapter.js +134 -0
- package/lib/adapters/index.d.ts +34 -0
- package/lib/adapters/index.d.ts.map +1 -0
- package/lib/adapters/index.js +19 -0
- package/lib/adapters/locationAdapter/locationAdapter.d.ts +28 -0
- package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
- package/lib/adapters/locationAdapter/locationAdapter.js +95 -0
- package/lib/adapters/messageAdapter/messageAdapter.d.ts +31 -0
- package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
- package/lib/adapters/messageAdapter/messageAdapter.js +82 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
- package/lib/adapters/personaAdapter/personaAdapter.d.ts +44 -0
- package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
- package/lib/adapters/personaAdapter/personaAdapter.js +161 -0
- package/lib/adapters/postAdapter/postAdapter.d.ts +33 -0
- package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
- package/lib/adapters/postAdapter/postAdapter.js +115 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +23 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +17 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +24 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -0
- package/lib/adapters/tagAdapter/tagAdapter.d.ts +21 -0
- package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
- package/lib/adapters/tagAdapter/tagAdapter.js +98 -0
- package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
- package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
- package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
- package/lib/adapters/userAdapter/userAdapter.d.ts +67 -0
- package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
- package/lib/adapters/userAdapter/userAdapter.js +302 -0
- package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
- package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
- package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
- package/lib/config/index.d.ts +44 -0
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +97 -0
- package/lib/constants/Collections.d.ts +44 -0
- package/lib/constants/Collections.d.ts.map +1 -0
- package/lib/constants/Collections.js +40 -0
- package/lib/constants/MetropolisConstants.d.ts +15 -0
- package/lib/constants/MetropolisConstants.d.ts.map +1 -0
- package/lib/constants/MetropolisConstants.js +15 -0
- package/lib/graphql/message.d.ts +3 -0
- package/lib/graphql/message.d.ts.map +1 -0
- package/lib/graphql/message.js +20 -0
- package/lib/graphql/notification.d.ts +3 -0
- package/lib/graphql/notification.d.ts.map +1 -0
- package/lib/graphql/notification.js +20 -0
- package/lib/graphql/session.d.ts +2 -0
- package/lib/graphql/session.d.ts.map +1 -0
- package/lib/graphql/session.js +17 -0
- package/lib/index.d.ts +52 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +248 -0
- package/lib/stores/appStore.d.ts +23 -0
- package/lib/stores/appStore.d.ts.map +1 -0
- package/lib/stores/appStore.js +23 -0
- package/lib/stores/contentStore.d.ts +36 -0
- package/lib/stores/contentStore.d.ts.map +1 -0
- package/lib/stores/contentStore.js +139 -0
- package/lib/stores/conversationStore.d.ts +38 -0
- package/lib/stores/conversationStore.d.ts.map +1 -0
- package/lib/stores/conversationStore.js +117 -0
- package/lib/stores/eventStore.d.ts +37 -0
- package/lib/stores/eventStore.d.ts.map +1 -0
- package/lib/stores/eventStore.js +47 -0
- package/lib/stores/groupStore.d.ts +37 -0
- package/lib/stores/groupStore.d.ts.map +1 -0
- package/lib/stores/groupStore.js +68 -0
- package/lib/stores/imageStore.d.ts +40 -0
- package/lib/stores/imageStore.d.ts.map +1 -0
- package/lib/stores/imageStore.js +53 -0
- package/lib/stores/index.d.ts +24 -0
- package/lib/stores/index.d.ts.map +1 -0
- package/lib/stores/index.js +24 -0
- package/lib/stores/locationStore.d.ts +34 -0
- package/lib/stores/locationStore.d.ts.map +1 -0
- package/lib/stores/locationStore.js +42 -0
- package/lib/stores/messageStore.d.ts +51 -0
- package/lib/stores/messageStore.d.ts.map +1 -0
- package/lib/stores/messageStore.js +137 -0
- package/lib/stores/notificationStore.d.ts +33 -0
- package/lib/stores/notificationStore.d.ts.map +1 -0
- package/lib/stores/notificationStore.js +55 -0
- package/lib/stores/permissionStore.d.ts +37 -0
- package/lib/stores/permissionStore.d.ts.map +1 -0
- package/lib/stores/permissionStore.js +117 -0
- package/lib/stores/personaStore.d.ts +26 -0
- package/lib/stores/personaStore.d.ts.map +1 -0
- package/lib/stores/personaStore.js +118 -0
- package/lib/stores/postStore.d.ts +34 -0
- package/lib/stores/postStore.d.ts.map +1 -0
- package/lib/stores/postStore.js +53 -0
- package/lib/stores/reactionStore.d.ts +25 -0
- package/lib/stores/reactionStore.d.ts.map +1 -0
- package/lib/stores/reactionStore.js +28 -0
- package/lib/stores/subscriptionStore.d.ts +41 -0
- package/lib/stores/subscriptionStore.d.ts.map +1 -0
- package/lib/stores/subscriptionStore.js +85 -0
- package/lib/stores/tagStore.d.ts +34 -0
- package/lib/stores/tagStore.d.ts.map +1 -0
- package/lib/stores/tagStore.js +87 -0
- package/lib/stores/translationStore.d.ts +42 -0
- package/lib/stores/translationStore.d.ts.map +1 -0
- package/lib/stores/translationStore.js +122 -0
- package/lib/stores/userStore.d.ts +74 -0
- package/lib/stores/userStore.d.ts.map +1 -0
- package/lib/stores/userStore.js +319 -0
- package/lib/stores/videoStore.d.ts +39 -0
- package/lib/stores/videoStore.d.ts.map +1 -0
- package/lib/stores/videoStore.js +132 -0
- package/lib/stores/websocketStore.d.ts +24 -0
- package/lib/stores/websocketStore.d.ts.map +1 -0
- package/lib/stores/websocketStore.js +51 -0
- package/lib/types/apps.types.d.ts +17 -0
- package/lib/types/apps.types.d.ts.map +1 -0
- package/lib/types/apps.types.js +6 -0
- package/lib/types/common.types.d.ts +31 -0
- package/lib/types/common.types.d.ts.map +1 -0
- package/lib/types/common.types.js +6 -0
- package/lib/types/conversations.types.d.ts +17 -0
- package/lib/types/conversations.types.d.ts.map +1 -0
- package/lib/types/conversations.types.js +6 -0
- package/lib/types/edges.types.d.ts +38 -0
- package/lib/types/edges.types.d.ts.map +1 -0
- package/lib/types/edges.types.js +6 -0
- package/lib/types/groups.types.d.ts +19 -0
- package/lib/types/groups.types.d.ts.map +1 -0
- package/lib/types/groups.types.js +6 -0
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +12 -0
- package/lib/types/subscriptions.types.d.ts +32 -0
- package/lib/types/subscriptions.types.d.ts.map +1 -0
- package/lib/types/subscriptions.types.js +6 -0
- package/lib/types/videos.types.d.ts +61 -0
- package/lib/types/videos.types.d.ts.map +1 -0
- package/lib/types/videos.types.js +6 -0
- package/lib/utils/MetropolisProvider.d.ts +58 -0
- package/lib/utils/MetropolisProvider.d.ts.map +1 -0
- package/lib/utils/MetropolisProvider.js +31 -0
- package/lib/utils/actionFactory.d.ts +24 -0
- package/lib/utils/actionFactory.d.ts.map +1 -0
- package/lib/utils/actionFactory.js +95 -0
- package/lib/utils/api.d.ts +44 -0
- package/lib/utils/api.d.ts.map +1 -0
- package/lib/utils/api.js +253 -0
- package/lib/utils/app.d.ts +7 -0
- package/lib/utils/app.d.ts.map +1 -0
- package/lib/utils/app.js +15 -0
- package/lib/utils/baseActionFactory.d.ts +16 -0
- package/lib/utils/baseActionFactory.d.ts.map +1 -0
- package/lib/utils/baseActionFactory.js +72 -0
- package/lib/utils/configUtils.d.ts +11 -0
- package/lib/utils/configUtils.d.ts.map +1 -0
- package/lib/utils/configUtils.js +20 -0
- package/lib/utils/dateUtils.d.ts +3 -0
- package/lib/utils/dateUtils.d.ts.map +1 -0
- package/lib/utils/dateUtils.js +11 -0
- package/lib/utils/file.d.ts +3 -0
- package/lib/utils/file.d.ts.map +1 -0
- package/lib/utils/file.js +156 -0
- package/lib/utils/i18n.d.ts +7 -0
- package/lib/utils/i18n.d.ts.map +1 -0
- package/lib/utils/i18n.js +96 -0
- package/lib/utils/index.d.ts +20 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +26 -0
- package/lib/utils/location.d.ts +10 -0
- package/lib/utils/location.d.ts.map +1 -0
- package/lib/utils/location.js +82 -0
- package/lib/utils/permissionUtils.d.ts +22 -0
- package/lib/utils/permissionUtils.d.ts.map +1 -0
- package/lib/utils/permissionUtils.js +72 -0
- package/lib/utils/requestCache.d.ts +8 -0
- package/lib/utils/requestCache.d.ts.map +1 -0
- package/lib/utils/requestCache.js +53 -0
- package/lib/utils/session.d.ts +14 -0
- package/lib/utils/session.d.ts.map +1 -0
- package/lib/utils/session.js +107 -0
- package/lib/utils/useConversationTyping.d.ts +26 -0
- package/lib/utils/useConversationTyping.d.ts.map +1 -0
- package/lib/utils/useConversationTyping.js +117 -0
- package/lib/utils/useMetropolis.d.ts +67 -0
- package/lib/utils/useMetropolis.d.ts.map +1 -0
- package/lib/utils/useMetropolis.js +311 -0
- package/lib/utils/useTranslations.d.ts +16 -0
- package/lib/utils/useTranslations.d.ts.map +1 -0
- package/lib/utils/useTranslations.js +105 -0
- package/lib/utils/validatorFactory.d.ts +49 -0
- package/lib/utils/validatorFactory.d.ts.map +1 -0
- package/lib/utils/validatorFactory.js +95 -0
- package/package.json +75 -28
- package/temp_signin.ts +73 -0
- package/tsconfig.lint.json +25 -0
- package/tsconfig.test.json +14 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { parseArangoId, parseId, parseNum } from '@nlabs/utils';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export class ArangoValidationError extends Error {
|
|
4
|
+
field;
|
|
5
|
+
constructor(message, field){
|
|
6
|
+
super(message), this.field = field;
|
|
7
|
+
this.name = 'ArangoValidationError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
const DocumentInputSchema = z.object({
|
|
11
|
+
_from: z.string().optional(),
|
|
12
|
+
_id: z.string().optional(),
|
|
13
|
+
_key: z.string().optional(),
|
|
14
|
+
_oldRev: z.string().optional(),
|
|
15
|
+
_rev: z.string().optional(),
|
|
16
|
+
_to: z.string().optional(),
|
|
17
|
+
added: z.number().optional(),
|
|
18
|
+
id: z.string().optional(),
|
|
19
|
+
modified: z.number().optional()
|
|
20
|
+
}).loose();
|
|
21
|
+
export const validateDocumentInput = (doc)=>{
|
|
22
|
+
try {
|
|
23
|
+
const validated = DocumentInputSchema.parse(doc);
|
|
24
|
+
return validated;
|
|
25
|
+
} catch (error) {
|
|
26
|
+
if (error instanceof z.ZodError) {
|
|
27
|
+
const fieldErrors = error.issues.map((e)=>`${e.path.join('.')}: ${e.message}`).join(', ');
|
|
28
|
+
throw new ArangoValidationError(`Document validation failed: ${fieldErrors}`);
|
|
29
|
+
}
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
export const formatDocumentOutput = (doc)=>doc;
|
|
34
|
+
export const parseDocument = (doc)=>{
|
|
35
|
+
try {
|
|
36
|
+
const parsed = performDocumentTransformation(doc);
|
|
37
|
+
return parsed;
|
|
38
|
+
} catch (error) {
|
|
39
|
+
if (error instanceof ArangoValidationError) {
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
throw new ArangoValidationError(`Document parsing failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const performDocumentTransformation = (doc)=>{
|
|
46
|
+
const { _id, _key, added, id, modified } = doc;
|
|
47
|
+
const transformed = removeEmptyKeys({
|
|
48
|
+
...doc,
|
|
49
|
+
...(_id || id) && {
|
|
50
|
+
id: parseArangoId(_id || id || '')
|
|
51
|
+
},
|
|
52
|
+
..._key && {
|
|
53
|
+
_key: parseId(_key || '')
|
|
54
|
+
},
|
|
55
|
+
...added !== undefined && {
|
|
56
|
+
added: parseNum(added, 13)
|
|
57
|
+
},
|
|
58
|
+
...modified !== undefined && {
|
|
59
|
+
modified: parseNum(modified, 13)
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return transformed;
|
|
63
|
+
};
|
|
64
|
+
// Utility function to remove empty keys from objects
|
|
65
|
+
export const removeEmptyKeys = (obj)=>{
|
|
66
|
+
const result = {};
|
|
67
|
+
for (const [key, value] of Object.entries(obj)){
|
|
68
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
69
|
+
result[key] = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWRhcHRlcnMvYXJhbmdvQWRhcHRlci9hcmFuZ29BZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlQXJhbmdvSWQsIHBhcnNlSWQsIHBhcnNlTnVtIH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERvY3VtZW50VHlwZSB7XG4gIF9mcm9tPzogc3RyaW5nO1xuICBfaWQ/OiBzdHJpbmc7XG4gIF9rZXk/OiBzdHJpbmc7XG4gIF9vbGRSZXY/OiBzdHJpbmc7XG4gIF9yZXY/OiBzdHJpbmc7XG4gIF90bz86IHN0cmluZztcbiAgYWRkZWQ/OiBudW1iZXI7XG4gIGlkPzogc3RyaW5nO1xuICBtb2RpZmllZD86IG51bWJlcjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgQXJhbmdvVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBmaWVsZD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcmFuZ29WYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IERvY3VtZW50SW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIF9mcm9tOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfa2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9vbGRSZXY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX3Jldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfdG86IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYWRkZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kaWZpZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKVxufSkubG9vc2UoKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRG9jdW1lbnRJbnB1dCA9IChkb2M6IHVua25vd24pOiBEb2N1bWVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IERvY3VtZW50SW5wdXRTY2hlbWEucGFyc2UoZG9jKTtcbiAgICByZXR1cm4gdmFsaWRhdGVkIGFzIERvY3VtZW50VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSBlcnJvci5pc3N1ZXMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKTtcbiAgICAgIHRocm93IG5ldyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IoYERvY3VtZW50IHZhbGlkYXRpb24gZmFpbGVkOiAke2ZpZWxkRXJyb3JzfWApO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdERvY3VtZW50T3V0cHV0ID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IGRvYztcblxuZXhwb3J0IGNvbnN0IHBhcnNlRG9jdW1lbnQgPSAoZG9jOiBEb2N1bWVudFR5cGUpOiBEb2N1bWVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uKGRvYyk7XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgQXJhbmdvVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFyYW5nb1ZhbGlkYXRpb25FcnJvcihgRG9jdW1lbnQgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGFkZGVkLFxuICAgIGlkLFxuICAgIG1vZGlmaWVkXG4gIH0gPSBkb2M7XG5cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSByZW1vdmVFbXB0eUtleXMoe1xuICAgIC4uLmRvYyxcbiAgICAuLi4oKF9pZCB8fCBpZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCB8fCAnJyl9KSxcbiAgICAuLi4oX2tleSAmJiB7X2tleTogcGFyc2VJZChfa2V5IHx8ICcnKX0pLFxuICAgIC4uLihhZGRlZCAhPT0gdW5kZWZpbmVkICYmIHthZGRlZDogcGFyc2VOdW0oYWRkZWQsIDEzKX0pLFxuICAgIC4uLihtb2RpZmllZCAhPT0gdW5kZWZpbmVkICYmIHttb2RpZmllZDogcGFyc2VOdW0obW9kaWZpZWQsIDEzKX0pXG4gIH0pO1xuXG4gIHJldHVybiB0cmFuc2Zvcm1lZDtcbn07XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gcmVtb3ZlIGVtcHR5IGtleXMgZnJvbSBvYmplY3RzXG5leHBvcnQgY29uc3QgcmVtb3ZlRW1wdHlLZXlzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvYmo6IFQpOiBUID0+IHtcbiAgY29uc3QgcmVzdWx0ID0ge30gYXMgVDtcbiAgZm9yKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgaWYodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgIHJlc3VsdFtrZXkgYXMga2V5b2YgVF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07Il0sIm5hbWVzIjpbInBhcnNlQXJhbmdvSWQiLCJwYXJzZUlkIiwicGFyc2VOdW0iLCJ6IiwiQXJhbmdvVmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiRG9jdW1lbnRJbnB1dFNjaGVtYSIsIm9iamVjdCIsIl9mcm9tIiwic3RyaW5nIiwib3B0aW9uYWwiLCJfaWQiLCJfa2V5IiwiX29sZFJldiIsIl9yZXYiLCJfdG8iLCJhZGRlZCIsIm51bWJlciIsImlkIiwibW9kaWZpZWQiLCJsb29zZSIsInZhbGlkYXRlRG9jdW1lbnRJbnB1dCIsImRvYyIsInZhbGlkYXRlZCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImZpZWxkRXJyb3JzIiwiaXNzdWVzIiwibWFwIiwiZSIsInBhdGgiLCJqb2luIiwiZm9ybWF0RG9jdW1lbnRPdXRwdXQiLCJwYXJzZURvY3VtZW50IiwicGFyc2VkIiwicGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24iLCJ0cmFuc2Zvcm1lZCIsInJlbW92ZUVtcHR5S2V5cyIsInVuZGVmaW5lZCIsIm9iaiIsInJlc3VsdCIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsYUFBYSxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsUUFBUSxlQUFlO0FBQ2hFLFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBZXhCLE9BQU8sTUFBTUMsOEJBQThCQzs7SUFDekMsWUFBWUMsT0FBZSxFQUFFLEFBQU9DLEtBQWMsQ0FBRTtRQUNsRCxLQUFLLENBQUNELGVBRDRCQyxRQUFBQTtRQUVsQyxJQUFJLENBQUNDLElBQUksR0FBRztJQUNkO0FBQ0Y7QUFFQSxNQUFNQyxzQkFBc0JOLEVBQUVPLE1BQU0sQ0FBQztJQUNuQ0MsT0FBT1IsRUFBRVMsTUFBTSxHQUFHQyxRQUFRO0lBQzFCQyxLQUFLWCxFQUFFUyxNQUFNLEdB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
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface ContentType {
|
|
2
|
+
_id?: string;
|
|
3
|
+
_key?: string;
|
|
4
|
+
contentId?: string;
|
|
5
|
+
id?: string;
|
|
6
|
+
key: string;
|
|
7
|
+
locale: 'en' | 'es' | 'fr' | 'de' | 'pt' | 'it';
|
|
8
|
+
content: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
category?: string;
|
|
11
|
+
isActive?: boolean;
|
|
12
|
+
userId?: string;
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
}
|
|
15
|
+
export interface ContentInputType {
|
|
16
|
+
contentId?: string;
|
|
17
|
+
key: string;
|
|
18
|
+
locale?: 'en' | 'es' | 'fr' | 'de' | 'pt' | 'it';
|
|
19
|
+
content: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
category?: string;
|
|
22
|
+
isActive?: boolean;
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
}
|
|
25
|
+
export declare class ContentValidationError extends Error {
|
|
26
|
+
field?: string;
|
|
27
|
+
constructor(message: string, field?: string);
|
|
28
|
+
}
|
|
29
|
+
export declare const parseContent: (content: ContentType) => ContentType;
|
|
30
|
+
export declare const parseContentInput: (content: ContentInputType) => ContentInputType;
|
|
31
|
+
export declare const parseContentFromDb: (content: ContentType) => ContentType;
|
|
32
|
+
//# sourceMappingURL=contentAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contentAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/contentAdapter/contentAdapter.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACX,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AA2BD,eAAO,MAAM,YAAY,GAAI,SAAS,WAAW,KAAG,WAYnD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,SAAS,gBAAgB,KAAG,gBAY7D,CAAC;AAiCF,eAAO,MAAM,kBAAkB,GAAI,SAAS,WAAW,KAAG,WAAoD,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ import { parseArangoId, parseId, parseString } from '@nlabs/utils';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { parseDocument, removeEmptyKeys } from '../arangoAdapter/arangoAdapter.js';
|
|
7
|
+
export class ContentValidationError extends Error {
|
|
8
|
+
field;
|
|
9
|
+
constructor(message, field){
|
|
10
|
+
super(message), this.field = field;
|
|
11
|
+
this.name = 'ContentValidationError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const contentSchema = z.object({
|
|
15
|
+
contentId: z.string().optional(),
|
|
16
|
+
key: z.string().min(1, 'Key is required').max(200, 'Key must be less than 200 characters'),
|
|
17
|
+
locale: z.enum([
|
|
18
|
+
'en',
|
|
19
|
+
'es',
|
|
20
|
+
'fr',
|
|
21
|
+
'de',
|
|
22
|
+
'pt',
|
|
23
|
+
'it'
|
|
24
|
+
], {
|
|
25
|
+
message: 'Locale must be one of: en, es, fr, de, pt, it'
|
|
26
|
+
}),
|
|
27
|
+
content: z.string().min(1, 'Content is required').max(10000, 'Content must be less than 10000 characters'),
|
|
28
|
+
description: z.string().max(500, 'Description must be less than 500 characters').optional(),
|
|
29
|
+
category: z.string().max(100, 'Category must be less than 100 characters').optional(),
|
|
30
|
+
isActive: z.boolean().optional(),
|
|
31
|
+
userId: z.string().optional()
|
|
32
|
+
});
|
|
33
|
+
const contentInputSchema = z.object({
|
|
34
|
+
contentId: z.string().optional(),
|
|
35
|
+
key: z.string().min(1, 'Key is required').max(200, 'Key must be less than 200 characters'),
|
|
36
|
+
locale: z.enum([
|
|
37
|
+
'en',
|
|
38
|
+
'es',
|
|
39
|
+
'fr',
|
|
40
|
+
'de',
|
|
41
|
+
'pt',
|
|
42
|
+
'it'
|
|
43
|
+
], {
|
|
44
|
+
message: 'Locale must be one of: en, es, fr, de, pt, it'
|
|
45
|
+
}).optional(),
|
|
46
|
+
content: z.string().min(1, 'Content is required').max(10000, 'Content must be less than 10000 characters'),
|
|
47
|
+
description: z.string().max(500, 'Description must be less than 500 characters').optional(),
|
|
48
|
+
category: z.string().max(100, 'Category must be less than 100 characters').optional(),
|
|
49
|
+
isActive: z.boolean().optional()
|
|
50
|
+
});
|
|
51
|
+
export const parseContent = (content)=>{
|
|
52
|
+
try {
|
|
53
|
+
const validated = contentSchema.parse(content);
|
|
54
|
+
return validated;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
if (error instanceof z.ZodError) {
|
|
57
|
+
const field = error.issues[0]?.path.join('.');
|
|
58
|
+
const message = error.issues[0]?.message || 'Validation failed';
|
|
59
|
+
throw new ContentValidationError(message, field);
|
|
60
|
+
}
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
export const parseContentInput = (content)=>{
|
|
65
|
+
try {
|
|
66
|
+
const validated = contentInputSchema.parse(content);
|
|
67
|
+
return validated;
|
|
68
|
+
} catch (error) {
|
|
69
|
+
if (error instanceof z.ZodError) {
|
|
70
|
+
const field = error.issues[0]?.path.join('.');
|
|
71
|
+
const message = error.issues[0]?.message || 'Validation failed';
|
|
72
|
+
throw new ContentValidationError(message, field);
|
|
73
|
+
}
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const performContentTransformation = (content)=>{
|
|
78
|
+
const { _id, _key, contentId, id, key, locale, content: contentText, description, category, isActive, userId } = content;
|
|
79
|
+
const transformed = {
|
|
80
|
+
...parseDocument(content),
|
|
81
|
+
...(_key || contentId) && {
|
|
82
|
+
contentId: parseId(_key || contentId || '')
|
|
83
|
+
},
|
|
84
|
+
...(_id || id || _key || contentId) && {
|
|
85
|
+
id: parseArangoId(_id || id || `content/${_key || contentId}`)
|
|
86
|
+
},
|
|
87
|
+
key: parseString(key, 200),
|
|
88
|
+
locale,
|
|
89
|
+
content: parseString(contentText, 10000),
|
|
90
|
+
...description && {
|
|
91
|
+
description: parseString(description, 500)
|
|
92
|
+
},
|
|
93
|
+
...category && {
|
|
94
|
+
category: parseString(category, 100)
|
|
95
|
+
},
|
|
96
|
+
...isActive !== undefined && {
|
|
97
|
+
isActive
|
|
98
|
+
},
|
|
99
|
+
...userId && {
|
|
100
|
+
userId: parseId(userId)
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
return removeEmptyKeys(transformed);
|
|
104
|
+
};
|
|
105
|
+
export const parseContentFromDb = (content)=>performContentTransformation(content);
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWRhcHRlcnMvY29udGVudEFkYXB0ZXIvY29udGVudEFkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7IHBhcnNlQXJhbmdvSWQsIHBhcnNlSWQsIHBhcnNlU3RyaW5nIH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQgeyBwYXJzZURvY3VtZW50LCByZW1vdmVFbXB0eUtleXMgfSBmcm9tICcuLi9hcmFuZ29BZGFwdGVyL2FyYW5nb0FkYXB0ZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRUeXBlIHtcbiAgX2lkPzogc3RyaW5nO1xuICBfa2V5Pzogc3RyaW5nO1xuICBjb250ZW50SWQ/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBrZXk6IHN0cmluZztcbiAgbG9jYWxlOiAnZW4nIHwgJ2VzJyB8ICdmcicgfCAnZGUnIHwgJ3B0JyB8ICdpdCc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIHVzZXJJZD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRJbnB1dFR5cGUge1xuICBjb250ZW50SWQ/OiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xuICBsb2NhbGU/OiAnZW4nIHwgJ2VzJyB8ICdmcicgfCAnZGUnIHwgJ3B0JyB8ICdpdCc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbnRlbnRWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IGNvbnRlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKS5tYXgoMjAwLCAnS2V5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzJyksXG4gIGxvY2FsZTogei5lbnVtKFsnZW4nLCAnZXMnLCAnZnInLCAnZGUnLCAncHQnLCAnaXQnXSwge1xuICAgIG1lc3NhZ2U6ICdMb2NhbGUgbXVzdCBiZSBvbmUgb2Y6IGVuLCBlcywgZnIsIGRlLCBwdCwgaXQnXG4gIH0pLFxuICBjb250ZW50OiB6LnN0cmluZygpLm1pbigxLCAnQ29udGVudCBpcyByZXF1aXJlZCcpLm1heCgxMDAwMCwgJ0NvbnRlbnQgbXVzdCBiZSBsZXNzIHRoYW4gMTAwMDAgY2hhcmFjdGVycycpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5tYXgoNTAwLCAnRGVzY3JpcHRpb24gbXVzdCBiZSBsZXNzIHRoYW4gNTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5tYXgoMTAwLCAnQ2F0ZWdvcnkgbXVzdCBiZSBsZXNzIHRoYW4gMTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBpc0FjdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlcklkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBjb250ZW50SW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKS5tYXgoMjAwLCAnS2V5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzJyksXG4gIGxvY2FsZTogei5lbnVtKFsnZW4nLCAnZXMnLCAnZnInLCAnZGUnLCAncHQnLCAnaXQnXSwge1xuICAgIG1lc3NhZ2U6ICdMb2NhbGUgbXVzdCBiZSBvbmUgb2Y6IGVuLCBlcywgZnIsIGRlLCBwdCwgaXQnXG4gIH0pLm9wdGlvbmFsKCksXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkubWluKDEsICdDb250ZW50IGlzIHJlcXVpcmVkJykubWF4KDEwMDAwLCAnQ29udGVudCBtdXN0IGJlIGxlc3MgdGhhbiAxMDAwMCBjaGFyYWN0ZXJzJyksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm1heCg1MDAsICdEZXNjcmlwdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiA1MDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm1heCgxMDAsICdDYXRlZ29yeSBtdXN0IGJlIGxlc3MgdGhhbiAxMDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudCA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBjb250ZW50U2NoZW1hLnBhcnNlKGNvbnRlbnQpO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgQ29udGVudFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZXJyb3IuaXNzdWVzWzBdPy5wYXRoLmpvaW4oJy4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5pc3N1ZXNbMF0/Lm1lc3NhZ2UgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgIHRocm93IG5ldyBDb250ZW50VmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UsIGZpZWxkKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnRJbnB1dCA9IChjb250ZW50OiBDb250ZW50SW5wdXRUeXBlKTogQ29udGVudElucHV0VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gY29udGVudElucHV0U2NoZW1hLnBhcnNlKGNvbnRlbnQpO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgQ29udGVudElucHV0VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGQgPSBlcnJvci5pc3N1ZXNbMF0/LnBhdGguam9pbignLicpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmlzc3Vlc1swXT8ubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZmllbGQpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGNvbnRlbnRJZCxcbiAgICBpZCxcbiAgICBrZXksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IGNvbnRlbnRUZXh0LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGNhdGVnb3J5LFxuICAgIGlzQWN0aXZlLFxuICAgIHVzZXJJZFxuICB9ID0gY29udGVudDtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHtcbiAgICAuLi5wYXJzZURvY3VtZW50KGNvbnRlbnQpLFxuICAgIC4uLigoX2tleSB8fCBjb250ZW50SWQpICYmIHtjb250ZW50SWQ6IHBhcnNlSWQoX2tleSB8fCBjb250ZW50SWQgfHwgJycpfSksXG4gICAgLi4uKChfaWQgfHwgaWQgfHwgX2tleSB8fCBjb250ZW50SWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQgfHwgYGNvbnRlbnQvJHtfa2V5IHx8IGNvbnRlbnRJZH1gKX0pLFxuICAgIGtleTogcGFyc2VTdHJpbmcoa2V5LCAyMDApLFxuICAgIGxvY2FsZSxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50VGV4dCwgMTAwMDApLFxuICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7ZGVzY3JpcHRpb246IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApfSksXG4gICAgLi4uKGNhdGVnb3J5ICYmIHtjYXRlZ29yeTogcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCl9KSxcbiAgICAuLi4oaXNBY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7aXNBY3RpdmV9KSxcbiAgICAuLi4odXNlcklkICYmIHt1c2VySWQ6IHBhcnNlSWQodXNlcklkKX0pXG4gIH07XG5cbiAgcmV0dXJuIHJlbW92ZUVtcHR5S2V5cyh0cmFuc2Zvcm1lZCkgYXMgQ29udGVudFR5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50RnJvbURiID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4gcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb250ZW50KTsiXSwibmFtZXMiOlsicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInoiLCJwYXJzZURvY3VtZW50IiwicmVtb3ZlRW1wdHlLZXlzIiwiQ29udGVudFZhbGlkYXRpb25FcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImZpZWxkIiwibmFtZSIsImNvbnRlbnRTY2hlbWEiLCJvYmplY3QiLCJjb250ZW50SWQiLCJzdHJpbmciLCJvcHRpb25hbCIsImtleSIsIm1pbiIsIm1heCIsImxvY2FsZSIsImVudW0iLCJjb250ZW50IiwiZGVzY3JpcHRpb24iLCJjYXRlZ29yeSIsImlzQWN0aXZlIiwiYm9vbGVhbiIsInVzZXJJZCIsImNvbnRlbnRJbnB1dFNjaGVtYSIsInBhcnNlQ29udGVudCIsInZhbGlkYXRlZCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImlzc3VlcyIsInBhdGgiLCJqb2luIiwicGFyc2VDb250ZW50SW5wdXQiLCJwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uIiwiX2lkIiwiX2tleSIsImlkIiwiY29udGVudFRleHQiLCJ0cmFuc2Zvcm1lZCIsInVuZGVmaW5lZCIsInBhcnNlQ29udGVudEZyb21EYiJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBU0EsYUFBYSxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsUUFBUSxlQUFlO0FBQ25FLFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBRXhCLFNBQVNDLGFBQWEsRUFBRUMsZUFBZSxRQUFRLG9DQUFvQztBQTRCbkYsT0FBTyxNQUFNQywrQkFBK0JDOztJQUMxQyxZQUFZQyxPQUFlLEVBQUUsQUFBT0MsS0FBYyxDQUFFO1FBQ2xELEtBQUssQ0FBQ0QsZUFENEJDLFFBQUFBO1FBRWxDLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2Q7QUFDRjtBQUVBLE1BQU1DLGdCQUFnQlIsRUFBRVMsTUFBTSxDQUFDO0lBQzdCQyxXQUFXVixFQUFFVyxNQUFNLEdBQUdDLFFBQVE7SUFDOUJDLEtBQUtiLEVBQUVXLE1BQU0sR0FBR0csR0FBRyxDQUFDLEdBQUcsbUJBQW1CQyxHQUFHLENBQUMs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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface ConversationType {
|
|
2
|
+
_id?: string;
|
|
3
|
+
_key?: string;
|
|
4
|
+
_rev?: string;
|
|
5
|
+
_oldRev?: string;
|
|
6
|
+
_from?: string;
|
|
7
|
+
_to?: string;
|
|
8
|
+
added?: number;
|
|
9
|
+
conversationId?: string;
|
|
10
|
+
id?: string;
|
|
11
|
+
isDirect?: boolean;
|
|
12
|
+
modified?: number;
|
|
13
|
+
name?: string;
|
|
14
|
+
users?: any[];
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}
|
|
17
|
+
export declare class ConversationValidationError extends Error {
|
|
18
|
+
field?: string;
|
|
19
|
+
constructor(message: string, field?: string);
|
|
20
|
+
}
|
|
21
|
+
export declare const validateConversationInput: (conversation: unknown) => ConversationType;
|
|
22
|
+
export declare const formatConversationOutput: (conversation: ConversationType) => ConversationType;
|
|
23
|
+
export declare const parseConversation: (conversation: ConversationType) => ConversationType;
|
|
24
|
+
//# sourceMappingURL=conversationAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversationAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/conversationAdapter/conversationAdapter.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IAChB,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AAmBD,eAAO,MAAM,yBAAyB,GAAI,cAAc,OAAO,KAAG,gBAWjE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,cAAc,gBAAgB,KAAG,gBAAgC,CAAC;AAE3G,eAAO,MAAM,iBAAiB,GAAI,cAAc,gBAAgB,KAAG,gBAUlE,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { parseArangoId, parseId, parseString } from '@nlabs/utils';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { parseDocument, removeEmptyKeys } from '../arangoAdapter/arangoAdapter.js';
|
|
4
|
+
import { parseUser } from '../userAdapter/userAdapter.js';
|
|
5
|
+
export class ConversationValidationError extends Error {
|
|
6
|
+
field;
|
|
7
|
+
constructor(message, field){
|
|
8
|
+
super(message), this.field = field;
|
|
9
|
+
this.name = 'ConversationValidationError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const ConversationInputSchema = z.object({
|
|
13
|
+
_id: z.string().optional(),
|
|
14
|
+
_key: z.string().optional(),
|
|
15
|
+
_rev: z.string().optional(),
|
|
16
|
+
_oldRev: z.string().optional(),
|
|
17
|
+
_from: z.string().optional(),
|
|
18
|
+
_to: z.string().optional(),
|
|
19
|
+
added: z.number().optional(),
|
|
20
|
+
conversationId: z.string().optional(),
|
|
21
|
+
id: z.string().optional(),
|
|
22
|
+
isDirect: z.boolean().optional(),
|
|
23
|
+
modified: z.number().optional(),
|
|
24
|
+
name: z.string().max(160).optional(),
|
|
25
|
+
type: z.string(),
|
|
26
|
+
users: z.array(z.any()).optional()
|
|
27
|
+
}).loose();
|
|
28
|
+
export const validateConversationInput = (conversation)=>{
|
|
29
|
+
try {
|
|
30
|
+
const validated = ConversationInputSchema.parse(conversation);
|
|
31
|
+
return validated;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
if (error instanceof z.ZodError) {
|
|
34
|
+
const fieldErrors = error.issues.map((e)=>`${e.path.join('.')}: ${e.message}`).join(', ');
|
|
35
|
+
throw new ConversationValidationError(`Conversation validation failed: ${fieldErrors}`);
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export const formatConversationOutput = (conversation)=>conversation;
|
|
41
|
+
export const parseConversation = (conversation)=>{
|
|
42
|
+
try {
|
|
43
|
+
const parsed = performConversationTransformation(conversation);
|
|
44
|
+
return parsed;
|
|
45
|
+
} catch (error) {
|
|
46
|
+
if (error instanceof ConversationValidationError) {
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
throw new ConversationValidationError(`Conversation parsing failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const performConversationTransformation = (conversation)=>{
|
|
53
|
+
const { _id, _key, conversationId, id, isDirect, name, users } = conversation;
|
|
54
|
+
const transformed = removeEmptyKeys({
|
|
55
|
+
...parseDocument(conversation),
|
|
56
|
+
...(_id || id || _key || conversationId) && {
|
|
57
|
+
id: parseArangoId(_id || id || `conversations/${_key || conversationId}`)
|
|
58
|
+
},
|
|
59
|
+
...(_key || conversationId) && {
|
|
60
|
+
conversationId: parseId(_key || conversationId || '')
|
|
61
|
+
},
|
|
62
|
+
...isDirect !== undefined && {
|
|
63
|
+
isDirect: !!isDirect
|
|
64
|
+
},
|
|
65
|
+
...name && {
|
|
66
|
+
name: parseString(name, 160)
|
|
67
|
+
},
|
|
68
|
+
...users?.length && {
|
|
69
|
+
users: users.map((user)=>parseUser(user))
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return transformed;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWRhcHRlcnMvY29udmVyc2F0aW9uQWRhcHRlci9jb252ZXJzYXRpb25BZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlQXJhbmdvSWQsIHBhcnNlSWQsIHBhcnNlU3RyaW5nIH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQgeyBwYXJzZURvY3VtZW50LCByZW1vdmVFbXB0eUtleXMgfSBmcm9tICcuLi9hcmFuZ29BZGFwdGVyL2FyYW5nb0FkYXB0ZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VVc2VyIH0gZnJvbSAnLi4vdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvblR5cGUge1xuICBfaWQ/OiBzdHJpbmc7XG4gIF9rZXk/OiBzdHJpbmc7XG4gIF9yZXY/OiBzdHJpbmc7XG4gIF9vbGRSZXY/OiBzdHJpbmc7XG4gIF9mcm9tPzogc3RyaW5nO1xuICBfdG8/OiBzdHJpbmc7XG4gIGFkZGVkPzogbnVtYmVyO1xuICBjb252ZXJzYXRpb25JZD86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGlzRGlyZWN0PzogYm9vbGVhbjtcbiAgbW9kaWZpZWQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHVzZXJzPzogYW55W107XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvblZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZmllbGQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29udmVyc2F0aW9uVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG5jb25zdCBDb252ZXJzYXRpb25JbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9rZXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX3Jldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfb2xkUmV2OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9mcm9tOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF90bzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBhZGRlZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBpc0RpcmVjdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgbW9kaWZpZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgbmFtZTogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICB0eXBlOiB6LnN0cmluZygpLFxuICB1c2Vyczogei5hcnJheSh6LmFueSgpKS5vcHRpb25hbCgpXG59KS5sb29zZSgpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDb252ZXJzYXRpb25JbnB1dCA9IChjb252ZXJzYXRpb246IHVua25vd24pOiBDb252ZXJzYXRpb25UeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBDb252ZXJzYXRpb25JbnB1dFNjaGVtYS5wYXJzZShjb252ZXJzYXRpb24pO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgQ29udmVyc2F0aW9uVHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSBlcnJvci5pc3N1ZXMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKTtcbiAgICAgIHRocm93IG5ldyBDb252ZXJzYXRpb25WYWxpZGF0aW9uRXJyb3IoYENvbnZlcnNhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHtmaWVsZEVycm9yc31gKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25PdXRwdXQgPSAoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKTogQ29udmVyc2F0aW9uVHlwZSA9PiBjb252ZXJzYXRpb247XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZlcnNhdGlvbiA9IChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpOiBDb252ZXJzYXRpb25UeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBwZXJmb3JtQ29udmVyc2F0aW9uVHJhbnNmb3JtYXRpb24oY29udmVyc2F0aW9uKTtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBDb252ZXJzYXRpb25WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQ29udmVyc2F0aW9uVmFsaWRhdGlvbkVycm9yKGBDb252ZXJzYXRpb24gcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1Db252ZXJzYXRpb25UcmFuc2Zvcm1hdGlvbiA9IChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpOiBDb252ZXJzYXRpb25UeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGlkLFxuICAgIGlzRGlyZWN0LFxuICAgIG5hbWUsXG4gICAgdXNlcnNcbiAgfSA9IGNvbnZlcnNhdGlvbjtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHJlbW92ZUVtcHR5S2V5cyh7XG4gICAgLi4ucGFyc2VEb2N1bWVudChjb252ZXJzYXRpb24pLFxuICAgIC4uLigoX2lkIHx8IGlkIHx8IF9rZXkgfHwgY29udmVyc2F0aW9uSWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQgfHwgYGNvbnZlcnNhdGlvbnMvJHtfa2V5IHx8IGNvbnZlcnNhdGlvbklkfWApfSksXG4gICAgLi4uKChfa2V5IHx8IGNvbnZlcnNhdGlvbklkKSAmJiB7Y29udmVyc2F0aW9uSWQ6IHBhcnNlSWQoX2tleSB8fCBjb252ZXJzYXRpb25JZCB8fCAnJyl9KSxcbiAgICAuLi4oaXNEaXJlY3QgIT09IHVuZGVmaW5lZCAmJiB7aXNEaXJlY3Q6ICEhaXNEaXJlY3R9KSxcbiAgICAuLi4obmFtZSAmJiB7bmFtZTogcGFyc2VTdHJpbmcobmFtZSwgMTYwKX0pLFxuICAgIC4uLih1c2Vycz8ubGVuZ3RoICYmIHt1c2VyczogdXNlcnMubWFwKCh1c2VyKSA9PiBwYXJzZVVzZXIodXNlcikpfSlcbiAgfSk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufTsiXSwibmFtZXMiOlsicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInoiLCJwYXJzZURvY3VtZW50IiwicmVtb3ZlRW1wdHlLZXlzIiwicGFyc2VVc2VyIiwiQ29udmVyc2F0aW9uVmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiQ29udmVyc2F0aW9uSW5wdXRTY2hlbWEiLCJvYmplY3QiLCJfaWQiLCJzdHJpbmciLCJvcHRpb25hbCIsIl9rZXkiLCJfcmV2IiwiX29sZFJldiIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJudW1iZXIiLCJjb252ZXJzYXRpb25JZCIsImlkIiwiaXNEaXJlY3QiLCJib29sZWFuIiwibW9kaWZpZWQiLCJtYXgiLCJ0eXBlIiwidXNlcnMiLCJhcnJheSIsImFueSIsImxvb3NlIiwidmFsaWRhdGVDb252ZXJzYXRpb25JbnB1dCIsImNvbnZlcnNhdGlvbiIsInZhbGlkYXRlZCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImZpZWxkRXJyb3JzIiwiaXNzdWVzIiwibWFwIiwiZSIsInBhdGgiLCJqb2luIiwiZm9ybWF0Q29udmVyc2F0aW9uT3V0cHV0IiwicGFyc2VDb252ZXJzYXRpb24iLCJwYXJzZWQiLCJwZXJmb3JtQ29udmVyc2F0aW9uVHJhbnNmb3JtYXRpb24iLCJ0cmFuc2Zvcm1lZCIsInVuZGVmaW5lZCIsImxlbmd0aCIsInVzZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLFFBQVEsZUFBZTtBQUNuRSxTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUV4QixTQUFTQyxhQUFhLEVBQUVDLGVBQWUsUUFBUSxvQ0FBb0M7QUFDbkYsU0FBU0MsU0FBUyxRQUFRLGdDQUFnQztBQW1CMUQsT0FBTyxNQUFNQyxvQ0FBb0NDOztJQUMvQyxZQUFZQyxPQUFlLEVBQUUsQUFBT0MsS0FBYyxDQUFFO1FBQ2xELEtBQUssQ0FBQ0QsZUFENEJDLFFBQUFBO1FBRWxDLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2Q7QUFDRjtBQUVBLE1BQU1DLDBCQUEwQlQsRUFBRVUsTUFBTSxDQUFDO0lBQ3ZDQyxLQUFLWCxFQUFFWSxNQUFNLEdBQUdDLFFBQVE7SUFDeEJDLE1BQU1kLEVBQUVZLE1BQU0sR0FBR0MsUUFBUTtJQUN6QkUsTUFBTWYsRUFBRVksTUFBTSxHQUFHQyxRQUFRO0lBQ3pCRyxTQUFTaEIsRUFBRVksTUFBTSxHQUFHQyxRQUFRO0lBQzVCSSxPQUFPakIsRUFBRVksTUFBTSxHQUFHQyxRQUFRO0lBQzFCSyxLQUFLbEIsRUFBRVksTUFBTSxHQUFHQyxRQUFRO0lBQ3hCTSxPQUFPbkIsRUFBRW9CLE1BQU0sR0FBR1AsUUFBUTtJQUMxQlEsZ0JBQWdCckIsRUFBRVksTUFBTSxHQUFHQyxRQUFRO0lBQ25DUyxJQUFJdEIsRUFBRVksTUFBTSxHQUFHQyxRQUFRO0lBQ3ZCVSxVQUFVdkIsRUFBRXdCLE9BQU8sR0FBR1gsUUFBUTtJQUM5QlksVUFBVXpCLEVBQUVvQixNQUFNLEdBQUdQLFFBQVE7SUFDN0JMLE1BQU1SLEVBQUVZLE1BQU0sR0FBR2MsR0FBRyxDQUFDLEtBQUtiLFFBQVE7SUFDbENjLE1BQU0zQixFQUFFWSxNQUFNO0lBQ2RnQixPQUFPNUIsRUFBRTZCLEtBQUssQ0FBQzdCLEVBQUU4QixHQUFHLElBQUlqQixRQUFRO0FBQ2xDLEdBQUdrQixLQUFLO0FBRVIsT0FBTyxNQUFNQyw0QkFBNEIsQ0FBQ0M7SUFDeEMsSUFBSTtRQUNGLE1BQU1DLFlBQVl6Qix3QkFBd0IwQixLQUFLLENBQUNGO1FBQ2hELE9BQU9DO0lBQ1QsRUFBRSxPQUFNRSxPQUFPO1FBQ2IsSUFBR0EsaUJBQWlCcEMsRUFBRXFDLFFBQVEsRUFBRTtZQUM5QixNQUFNQyxjQUFjRixNQUFNRyxNQUFNLENBQUNDLEdBQUcsQ0FBQyxDQUFDQyxJQUFNLEdBQUdBLEVBQUVDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFRixFQUFFbkMsT0FBTyxFQUFFLEVBQUVxQyxJQUFJLENBQUM7WUFDdEYsTUFBTSxJQUFJdkMsNEJBQTRCLENBQUMsZ0NBQWdDLEVBQUVrQyxhQUFhO1FBQ3hGO1FBQ0EsTUFBTUY7SUFDUjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1RLDJCQUEyQixDQUFDWCxlQUFxREEsYUFBYTtBQUUzRyxPQUFPLE1BQU1ZLG9CQUFvQixDQUFDWjtJQUNoQyxJQUFJO1FBQ0YsTUFBTWEsU0FBU0Msa0NBQWtDZDtRQUNqRCxPQUFPYTtJQUNULEVBQUUsT0FBTVYsT0FBTztRQUNiLElBQUdBLGlCQUFpQmhDLDZCQUE2QjtZQUMvQyxNQUFNZ0M7UUFDUjtRQUNBLE1BQU0sSUFBSWhDLDRCQUE0QixDQUFDLDZCQUE2QixFQUFFZ0MsaUJBQWlCL0IsUUFBUStCLE1BQU05QixPQUFPLEdBQUcsaUJBQWlCO0lBQ2xJO0FBQ0YsRUFBRTtBQUVGLE1BQU15QyxvQ0FBb0MsQ0FBQ2Q7SUFDekMsTUFBTSxFQUNKdEIsR0FBRyxFQUNIRyxJQUFJLEVBQ0pPLGNBQWMsRUFDZEMsRUFBRSxFQUNGQyxRQUFRLEVBQ1JmLElBQUksRUFDSm9CLEtBQUssRUFDTixHQUFHSztJQUVKLE1BQU1lLGNBQWM5QyxnQkFBZ0I7UUFDbEMsR0FBR0QsY0FBY2dDLGFBQWE7UUFDOUIsR0FBSSxBQUFDdEIsQ0FBQUEsT0FBT1csTUFBTVIsUUFBUU8sY0FBYSxLQUFNO1lBQUNDLElBQUl6QixjQUFjYyxPQUFPVyxNQUFNLENBQUMsY0FBYyxFQUFFUixRQUFRTyxnQkFBZ0I7UUFBQyxDQUFDO1FBQ3hILEdBQUksQUFBQ1AsQ0FBQUEsUUFBUU8sY0FBYSxLQUFNO1lBQUNBLGdCQUFnQnZCLFFBQVFnQixRQUFRTyxrQkFBa0I7UUFBRyxDQUFDO1FBQ3ZGLEdBQUlFLGFBQWEwQixhQUFhO1lBQUMxQixVQUFVLENBQUMsQ0FBQ0E7UUFBUSxDQUFDO1FBQ3BELEdBQUlmLFFBQVE7WUFBQ0EsTUFBTVQsWUFBWVMsTUFBTTtRQUFJLENBQUM7UUFDMUMsR0FBSW9CLE9BQU9zQixVQUFVO1lBQUN0QixPQUFPQSxNQUFNWSxHQUFHLENBQUMsQ0FBQ1csT0FBU2hELFVBQVVnRDtRQUFNLENBQUM7SUFDcEU7SUFFQSxPQUFPSDtBQUNUIn0=
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface EventType {
|
|
2
|
+
_id?: string;
|
|
3
|
+
_key?: string;
|
|
4
|
+
_rev?: string;
|
|
5
|
+
_oldRev?: string;
|
|
6
|
+
_from?: string;
|
|
7
|
+
_to?: string;
|
|
8
|
+
address?: string;
|
|
9
|
+
cached?: number;
|
|
10
|
+
content?: string;
|
|
11
|
+
endDate?: number;
|
|
12
|
+
eventId?: string;
|
|
13
|
+
groupId?: string;
|
|
14
|
+
id?: string;
|
|
15
|
+
images?: any[];
|
|
16
|
+
isGoing?: boolean;
|
|
17
|
+
latitude?: number;
|
|
18
|
+
location?: string | {
|
|
19
|
+
address: string;
|
|
20
|
+
latitude: number;
|
|
21
|
+
longitude: number;
|
|
22
|
+
};
|
|
23
|
+
longitude?: number;
|
|
24
|
+
mentions?: any[];
|
|
25
|
+
modified?: number;
|
|
26
|
+
name?: string;
|
|
27
|
+
maxGuestsPerPersona?: number;
|
|
28
|
+
postId?: string;
|
|
29
|
+
reactions?: string[];
|
|
30
|
+
rsvpCount?: number;
|
|
31
|
+
startDate?: number;
|
|
32
|
+
tags?: any[];
|
|
33
|
+
ticketCostCents?: number;
|
|
34
|
+
type?: string;
|
|
35
|
+
user?: any;
|
|
36
|
+
viewCount?: number;
|
|
37
|
+
[key: string]: any;
|
|
38
|
+
}
|
|
39
|
+
export declare class EventValidationError extends Error {
|
|
40
|
+
field?: string;
|
|
41
|
+
constructor(message: string, field?: string);
|
|
42
|
+
}
|
|
43
|
+
export declare const validateEventInput: (event: unknown) => EventType;
|
|
44
|
+
export declare const formatEventOutput: (event: EventType) => EventType;
|
|
45
|
+
export declare const parseEvent: (event: EventType) => EventType;
|
|
46
|
+
//# sourceMappingURL=eventAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/eventAdapter/eventAdapter.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IACT,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AAwCD,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,SAWnD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,KAAG,SAAkB,CAAC;AAExE,eAAO,MAAM,UAAU,GAAI,OAAO,SAAS,KAAG,SAU7C,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { parseArangoId, parseId, parseNum, parseString } from '@nlabs/utils';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { parseDocument, removeEmptyKeys } from '../arangoAdapter/arangoAdapter.js';
|
|
4
|
+
import { parseImage } from '../imageAdapter/imageAdapter.js';
|
|
5
|
+
import { parseReaktorContent, parseReaktorDate, parseReaktorType } from '../reaktorAdapter/reaktorAdapter.js';
|
|
6
|
+
import { parseTag } from '../tagAdapter/tagAdapter.js';
|
|
7
|
+
import { parseUser } from '../userAdapter/userAdapter.js';
|
|
8
|
+
export class EventValidationError extends Error {
|
|
9
|
+
field;
|
|
10
|
+
constructor(message, field){
|
|
11
|
+
super(message), this.field = field;
|
|
12
|
+
this.name = 'EventValidationError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const EventInputSchema = z.object({
|
|
16
|
+
_id: z.string().optional(),
|
|
17
|
+
_key: z.string().optional(),
|
|
18
|
+
_rev: z.string().optional(),
|
|
19
|
+
_oldRev: z.string().optional(),
|
|
20
|
+
_from: z.string().optional(),
|
|
21
|
+
_to: z.string().optional(),
|
|
22
|
+
address: z.string().optional(),
|
|
23
|
+
cached: z.number().optional(),
|
|
24
|
+
content: z.string().optional(),
|
|
25
|
+
endDate: z.number().optional(),
|
|
26
|
+
eventId: z.string().optional(),
|
|
27
|
+
groupId: z.string().optional(),
|
|
28
|
+
id: z.string().optional(),
|
|
29
|
+
images: z.array(z.any()).optional(),
|
|
30
|
+
isGoing: z.boolean().optional(),
|
|
31
|
+
latitude: z.number().optional(),
|
|
32
|
+
location: z.union([
|
|
33
|
+
z.string(),
|
|
34
|
+
z.object({
|
|
35
|
+
address: z.string(),
|
|
36
|
+
latitude: z.number(),
|
|
37
|
+
longitude: z.number()
|
|
38
|
+
})
|
|
39
|
+
]).optional(),
|
|
40
|
+
longitude: z.number().optional(),
|
|
41
|
+
mentions: z.array(z.any()).optional(),
|
|
42
|
+
modified: z.number().optional(),
|
|
43
|
+
name: z.string().optional(),
|
|
44
|
+
maxGuestsPerPersona: z.number().optional(),
|
|
45
|
+
postId: z.string().optional(),
|
|
46
|
+
reactions: z.array(z.string()).optional(),
|
|
47
|
+
rsvpCount: z.number().optional(),
|
|
48
|
+
startDate: z.number().optional(),
|
|
49
|
+
tags: z.array(z.any()).optional(),
|
|
50
|
+
ticketCostCents: z.number().optional(),
|
|
51
|
+
type: z.string().optional(),
|
|
52
|
+
user: z.any().optional(),
|
|
53
|
+
viewCount: z.number().optional()
|
|
54
|
+
}).loose();
|
|
55
|
+
export const validateEventInput = (event)=>{
|
|
56
|
+
try {
|
|
57
|
+
const validated = EventInputSchema.parse(event);
|
|
58
|
+
return validated;
|
|
59
|
+
} catch (error) {
|
|
60
|
+
if (error instanceof z.ZodError) {
|
|
61
|
+
const fieldErrors = error.issues.map((e)=>`${e.path.join('.')}: ${e.message}`).join(', ');
|
|
62
|
+
throw new EventValidationError(`Event validation failed: ${fieldErrors}`);
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
export const formatEventOutput = (event)=>event;
|
|
68
|
+
export const parseEvent = (event)=>{
|
|
69
|
+
try {
|
|
70
|
+
const parsed = performEventTransformation(event);
|
|
71
|
+
return parsed;
|
|
72
|
+
} catch (error) {
|
|
73
|
+
if (error instanceof EventValidationError) {
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
throw new EventValidationError(`Event parsing failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const performEventTransformation = (event)=>{
|
|
80
|
+
const { _id, _key, address, cached, content, endDate, eventId, groupId, id, images, isGoing, latitude, location, longitude, mentions, name, maxGuestsPerPersona, postId, reactions, rsvpCount, startDate, tags, ticketCostCents, type, user, viewCount } = event;
|
|
81
|
+
const transformed = removeEmptyKeys({
|
|
82
|
+
...parseDocument(event),
|
|
83
|
+
...address && {
|
|
84
|
+
address: parseString(address, 160)
|
|
85
|
+
},
|
|
86
|
+
...cached !== undefined && {
|
|
87
|
+
cached: parseNum(cached)
|
|
88
|
+
},
|
|
89
|
+
...content && {
|
|
90
|
+
content: parseReaktorContent(content)
|
|
91
|
+
},
|
|
92
|
+
...endDate !== undefined && {
|
|
93
|
+
endDate: parseReaktorDate(endDate)
|
|
94
|
+
},
|
|
95
|
+
...(_id || id || _key || eventId) && {
|
|
96
|
+
id: parseArangoId(_id || id || `events/${_key || eventId}`)
|
|
97
|
+
},
|
|
98
|
+
...(_key || eventId) && {
|
|
99
|
+
eventId: parseId(_key || eventId || '')
|
|
100
|
+
},
|
|
101
|
+
...groupId && {
|
|
102
|
+
groupId: parseId(groupId)
|
|
103
|
+
},
|
|
104
|
+
...images?.length && {
|
|
105
|
+
images: images.map((image)=>parseImage(image))
|
|
106
|
+
},
|
|
107
|
+
...isGoing !== undefined && {
|
|
108
|
+
isGoing: !!isGoing
|
|
109
|
+
},
|
|
110
|
+
...latitude !== undefined && {
|
|
111
|
+
latitude: parseNum(latitude, 15)
|
|
112
|
+
},
|
|
113
|
+
...longitude !== undefined && {
|
|
114
|
+
longitude: parseNum(longitude, 15)
|
|
115
|
+
},
|
|
116
|
+
...mentions?.length && {
|
|
117
|
+
mentions: mentions.map((mention)=>parseUser(mention))
|
|
118
|
+
},
|
|
119
|
+
...name && {
|
|
120
|
+
name: parseString(name, 160)
|
|
121
|
+
},
|
|
122
|
+
...maxGuestsPerPersona !== undefined && {
|
|
123
|
+
maxGuestsPerPersona: parseNum(maxGuestsPerPersona)
|
|
124
|
+
},
|
|
125
|
+
...postId && {
|
|
126
|
+
postId: parseId(postId)
|
|
127
|
+
},
|
|
128
|
+
...reactions?.length && {
|
|
129
|
+
reactions
|
|
130
|
+
},
|
|
131
|
+
...rsvpCount !== undefined && {
|
|
132
|
+
rsvpCount: parseNum(rsvpCount)
|
|
133
|
+
},
|
|
134
|
+
...startDate !== undefined && {
|
|
135
|
+
startDate: parseReaktorDate(startDate)
|
|
136
|
+
},
|
|
137
|
+
...tags?.length && {
|
|
138
|
+
tags: tags.map((tag)=>parseTag(tag))
|
|
139
|
+
},
|
|
140
|
+
...ticketCostCents !== undefined && {
|
|
141
|
+
ticketCostCents: parseNum(ticketCostCents)
|
|
142
|
+
},
|
|
143
|
+
...type && {
|
|
144
|
+
type: parseReaktorType(type)
|
|
145
|
+
},
|
|
146
|
+
...user && {
|
|
147
|
+
user: parseUser(user)
|
|
148
|
+
},
|
|
149
|
+
...viewCount !== undefined && {
|
|
150
|
+
viewCount: parseNum(viewCount)
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
// Handle location object
|
|
154
|
+
if (location && typeof location === 'object') {
|
|
155
|
+
transformed.address = parseString(location.address, 160);
|
|
156
|
+
transformed.latitude = parseNum(location.latitude, 15);
|
|
157
|
+
transformed.longitude = parseNum(location.longitude, 15);
|
|
158
|
+
}
|
|
159
|
+
return transformed;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWRhcHRlcnMvZXZlbnRBZGFwdGVyL2V2ZW50QWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZUFyYW5nb0lkLCBwYXJzZUlkLCBwYXJzZU51bSwgcGFyc2VTdHJpbmcgfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7IHBhcnNlRG9jdW1lbnQsIHJlbW92ZUVtcHR5S2V5cyB9IGZyb20gJy4uL2FyYW5nb0FkYXB0ZXIvYXJhbmdvQWRhcHRlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUltYWdlIH0gZnJvbSAnLi4vaW1hZ2VBZGFwdGVyL2ltYWdlQWRhcHRlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVJlYWt0b3JDb250ZW50LCBwYXJzZVJlYWt0b3JEYXRlLCBwYXJzZVJlYWt0b3JUeXBlIH0gZnJvbSAnLi4vcmVha3RvckFkYXB0ZXIvcmVha3RvckFkYXB0ZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWcgfSBmcm9tICcuLi90YWdBZGFwdGVyL3RhZ0FkYXB0ZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VVc2VyIH0gZnJvbSAnLi4vdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50VHlwZSB7XG4gIF9pZD86IHN0cmluZztcbiAgX2tleT86IHN0cmluZztcbiAgX3Jldj86IHN0cmluZztcbiAgX29sZFJldj86IHN0cmluZztcbiAgX2Zyb20/OiBzdHJpbmc7XG4gIF90bz86IHN0cmluZztcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgY2FjaGVkPzogbnVtYmVyO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBlbmREYXRlPzogbnVtYmVyO1xuICBldmVudElkPzogc3RyaW5nO1xuICBncm91cElkPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgaW1hZ2VzPzogYW55W107XG4gIGlzR29pbmc/OiBib29sZWFuO1xuICBsYXRpdHVkZT86IG51bWJlcjtcbiAgbG9jYXRpb24/OiBzdHJpbmcgfCB7YWRkcmVzczogc3RyaW5nOyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlcn07XG4gIGxvbmdpdHVkZT86IG51bWJlcjtcbiAgbWVudGlvbnM/OiBhbnlbXTtcbiAgbW9kaWZpZWQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG1heEd1ZXN0c1BlclBlcnNvbmE/OiBudW1iZXI7XG4gIHBvc3RJZD86IHN0cmluZztcbiAgcmVhY3Rpb25zPzogc3RyaW5nW107XG4gIHJzdnBDb3VudD86IG51bWJlcjtcbiAgc3RhcnREYXRlPzogbnVtYmVyO1xuICB0YWdzPzogYW55W107XG4gIHRpY2tldENvc3RDZW50cz86IG51bWJlcjtcbiAgdHlwZT86IHN0cmluZztcbiAgdXNlcj86IGFueTtcbiAgdmlld0NvdW50PzogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZmllbGQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXZlbnRWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IEV2ZW50SW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfa2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9yZXY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX29sZFJldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfZnJvbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfdG86IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYWRkcmVzczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjYWNoZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29udGVudDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlbmREYXRlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGV2ZW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZ3JvdXBJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBpbWFnZXM6IHouYXJyYXkoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgaXNHb2luZzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgbGF0aXR1ZGU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgbG9jYXRpb246IHoudW5pb24oW3ouc3RyaW5nKCksIHoub2JqZWN0KHtcbiAgICBhZGRyZXNzOiB6LnN0cmluZygpLFxuICAgIGxhdGl0dWRlOiB6Lm51bWJlcigpLFxuICAgIGxvbmdpdHVkZTogei5udW1iZXIoKVxuICB9KV0pLm9wdGlvbmFsKCksXG4gIGxvbmdpdHVkZTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBtZW50aW9uczogei5hcnJheSh6LmFueSgpKS5vcHRpb25hbCgpLFxuICBtb2RpZmllZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1heEd1ZXN0c1BlclBlcnNvbmE6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgcG9zdElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYWN0aW9uczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICByc3ZwQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgc3RhcnREYXRlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRhZ3M6IHouYXJyYXkoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgdGlja2V0Q29zdENlbnRzOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlcjogei5hbnkoKS5vcHRpb25hbCgpLFxuICB2aWV3Q291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKVxufSkubG9vc2UoKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRXZlbnRJbnB1dCA9IChldmVudDogdW5rbm93bik6IEV2ZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gRXZlbnRJbnB1dFNjaGVtYS5wYXJzZShldmVudCk7XG4gICAgcmV0dXJuIHZhbGlkYXRlZCBhcyBFdmVudFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0gZXJyb3IuaXNzdWVzLm1hcCgoZSkgPT4gYCR7ZS5wYXRoLmpvaW4oJy4nKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oJywgJyk7XG4gICAgICB0aHJvdyBuZXcgRXZlbnRWYWxpZGF0aW9uRXJyb3IoYEV2ZW50IHZhbGlkYXRpb24gZmFpbGVkOiAke2ZpZWxkRXJyb3JzfWApO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEV2ZW50T3V0cHV0ID0gKGV2ZW50OiBFdmVudFR5cGUpOiBFdmVudFR5cGUgPT4gZXZlbnQ7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUV2ZW50ID0gKGV2ZW50OiBFdmVudFR5cGUpOiBFdmVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBlcmZvcm1FdmVudFRyYW5zZm9ybWF0aW9uKGV2ZW50KTtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFdmVudFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBFdmVudFZhbGlkYXRpb25FcnJvcihgRXZlbnQgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1FdmVudFRyYW5zZm9ybWF0aW9uID0gKGV2ZW50OiBFdmVudFR5cGUpOiBFdmVudFR5cGUgPT4ge1xuICBjb25zdCB7XG4gICAgX2lkLFxuICAgIF9rZXksXG4gICAgYWRkcmVzcyxcbiAgICBjYWNoZWQsXG4gICAgY29udGVudCxcbiAgICBlbmREYXRlLFxuICAgIGV2ZW50SWQsXG4gICAgZ3JvdXBJZCxcbiAgICBpZCxcbiAgICBpbWFnZXMsXG4gICAgaXNHb2luZyxcbiAgICBsYXRpdHVkZSxcbiAgICBsb2NhdGlvbixcbiAgICBsb25naXR1ZGUsXG4gICAgbWVudGlvbnMsXG4gICAgbmFtZSxcbiAgICBtYXhHdWVzdHNQZXJQZXJzb25hLFxuICAgIHBvc3RJZCxcbiAgICByZWFjdGlvbnMsXG4gICAgcnN2cENvdW50LFxuICAgIHN0YXJ0RGF0ZSxcbiAgICB0YWdzLFxuICAgIHRpY2tldENvc3RDZW50cyxcbiAgICB0eXBlLFxuICAgIHVzZXIsXG4gICAgdmlld0NvdW50XG4gIH0gPSBldmVudDtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHJlbW92ZUVtcHR5S2V5cyh7XG4gICAgLi4ucGFyc2VEb2N1bWVudChldmVudCksXG4gICAgLi4uKGFkZHJlc3MgJiYge2FkZHJlc3M6IHBhcnNlU3RyaW5nKGFkZHJlc3MsIDE2MCl9KSxcbiAgICAuLi4oY2FjaGVkICE9PSB1bmRlZmluZWQgJiYge2NhY2hlZDogcGFyc2VOdW0oY2FjaGVkKX0pLFxuICAgIC4uLihjb250ZW50ICYmIHtjb250ZW50OiBwYXJzZVJlYWt0b3JDb250ZW50KGNvbnRlbnQpfSksXG4gICAgLi4uKGVuZERhdGUgIT09IHVuZGVmaW5lZCAmJiB7ZW5kRGF0ZTogcGFyc2VSZWFrdG9yRGF0ZShlbmREYXRlKX0pLFxuICAgIC4uLigoX2lkIHx8IGlkIHx8IF9rZXkgfHwgZXZlbnRJZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCB8fCBgZXZlbnRzLyR7X2tleSB8fCBldmVudElkfWApfSksXG4gICAgLi4uKChfa2V5IHx8IGV2ZW50SWQpICYmIHtldmVudElkOiBwYXJzZUlkKF9rZXkgfHwgZXZlbnRJZCB8fCAnJyl9KSxcbiAgICAuLi4oZ3JvdXBJZCAmJiB7Z3JvdXBJZDogcGFyc2VJZChncm91cElkKX0pLFxuICAgIC4uLihpbWFnZXM/Lmxlbmd0aCAmJiB7aW1hZ2VzOiBpbWFnZXMubWFwKChpbWFnZSkgPT4gcGFyc2VJbWFnZShpbWFnZSkpfSksXG4gICAgLi4uKGlzR29pbmcgIT09IHVuZGVmaW5lZCAmJiB7aXNHb2luZzogISFpc0dvaW5nfSksXG4gICAgLi4uKGxhdGl0dWRlICE9PSB1bmRlZmluZWQgJiYge2xhdGl0dWRlOiBwYXJzZU51bShsYXRpdHVkZSwgMTUpfSksXG4gICAgLi4uKGxvbmdpdHVkZSAhPT0gdW5kZWZpbmVkICYmIHtsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMTUpfSksXG4gICAgLi4uKG1lbnRpb25zPy5sZW5ndGggJiYge21lbnRpb25zOiBtZW50aW9ucy5tYXAoKG1lbnRpb24pID0+IHBhcnNlVXNlcihtZW50aW9uKSl9KSxcbiAgICAuLi4obmFtZSAmJiB7bmFtZTogcGFyc2VTdHJpbmcobmFtZSwgMTYwKX0pLFxuICAgIC4uLihtYXhHdWVzdHNQZXJQZXJzb25hICE9PSB1bmRlZmluZWQgJiYge21heEd1ZXN0c1BlclBlcnNvbmE6IHBhcnNlTnVtKG1heEd1ZXN0c1BlclBlcnNvbmEpfSksXG4gICAgLi4uKHBvc3RJZCAmJiB7cG9zdElkOiBwYXJzZUlkKHBvc3RJZCl9KSxcbiAgICAuLi4ocmVhY3Rpb25zPy5sZW5ndGggJiYge3JlYWN0aW9uc30pLFxuICAgIC4uLihyc3ZwQ291bnQgIT09IHVuZGVmaW5lZCAmJiB7cnN2cENvdW50OiBwYXJzZU51bShyc3ZwQ291bnQpfSksXG4gICAgLi4uKHN0YXJ0RGF0ZSAhPT0gdW5kZWZpbmVkICYmIHtzdGFydERhdGU6IHBhcnNlUmVha3RvckRhdGUoc3RhcnREYXRlKX0pLFxuICAgIC4uLih0YWdzPy5sZW5ndGggJiYge3RhZ3M6IHRhZ3MubWFwKCh0YWcpID0+IHBhcnNlVGFnKHRhZykpfSksXG4gICAgLi4uKHRpY2tldENvc3RDZW50cyAhPT0gdW5kZWZpbmVkICYmIHt0aWNrZXRDb3N0Q2VudHM6IHBhcnNlTnVtKHRpY2tldENvc3RDZW50cyl9KSxcbiAgICAuLi4odHlwZSAmJiB7dHlwZTogcGFyc2VSZWFrdG9yVHlwZSh0eXBlKX0pLFxuICAgIC4uLih1c2VyICYmIHt1c2VyOiBwYXJzZVVzZXIodXNlcil9KSxcbiAgICAuLi4odmlld0NvdW50ICE9PSB1bmRlZmluZWQgJiYge3ZpZXdDb3VudDogcGFyc2VOdW0odmlld0NvdW50KX0pXG4gIH0pO1xuXG4gIC8vIEhhbmRsZSBsb2NhdGlvbiBvYmplY3RcbiAgaWYobG9jYXRpb24gJiYgdHlwZW9mIGxvY2F0aW9uID09PSAnb2JqZWN0Jykge1xuICAgIHRyYW5zZm9ybWVkLmFkZHJlc3MgPSBwYXJzZVN0cmluZyhsb2NhdGlvbi5hZGRyZXNzLCAxNjApO1xuICAgIHRyYW5zZm9ybWVkLmxhdGl0dWRlID0gcGFyc2VOdW0obG9jYXRpb24ubGF0aXR1ZGUsIDE1KTtcbiAgICB0cmFuc2Zvcm1lZC5sb25naXR1ZGUgPSBwYXJzZU51bShsb2NhdGlvbi5sb25naXR1ZGUsIDE1KTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2Zvcm1lZDtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJwYXJzZU51bSIsInBhcnNlU3RyaW5nIiwieiIsInBhcnNlRG9jdW1lbnQiLCJyZW1vdmVFbXB0eUtleXMiLCJwYXJzZUltYWdlIiwicGFyc2VSZWFrdG9yQ29udGVudCIsInBhcnNlUmVha3RvckRhdGUiLCJwYXJzZVJlYWt0b3JUeXBlIiwicGFyc2VUYWciLCJwYXJzZVVzZXIiLCJFdmVudFZhbGlkYXRpb25FcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImZpZWxkIiwibmFtZSIsIkV2ZW50SW5wdXRTY2hlbWEiLCJvYmplY3QiLCJfaWQiLCJzdHJpbmciLCJvcHRpb25hbCIsIl9rZXkiLCJfcmV2IiwiX29sZFJldiIsIl9mcm9tIiwiX3RvIiwiYWRkcmVzcyIsImNhY2hlZCIsIm51bWJlciIsImNvbnRlbnQiLCJlbmREYXRlIiwiZXZlbnRJZCIsImdyb3VwSWQiLCJpZCIsImltYWdlcyIsImFycmF5IiwiYW55IiwiaXNHb2luZyIsImJvb2xlYW4iLCJsYXRpdHVkZSIsImxvY2F0aW9uIiwidW5pb24iLCJsb25naXR1ZGUiLCJtZW50aW9ucyIsIm1vZGlmaWVkIiwibWF4R3Vlc3RzUGVyUGVyc29uYSIsInBvc3RJZCIsInJlYWN0aW9ucyIsInJzdnBDb3VudCIsInN0YXJ0RGF0ZSIsInRhZ3MiLCJ0aWNrZXRDb3N0Q2VudHMiLCJ0eXBlIiwidXNlciIsInZpZXdDb3VudCIsImxvb3NlIiwidmFsaWRhdGVFdmVudElucHV0IiwiZXZlbnQiLCJ2YWxpZGF0ZWQiLCJwYXJzZSIsImVycm9yIiwiWm9kRXJyb3IiLCJmaWVsZEVycm9ycyIsImlzc3VlcyIsIm1hcCIsImUiLCJwYXRoIiwiam9pbiIsImZvcm1hdEV2ZW50T3V0cHV0IiwicGFyc2VFdmVudCIsInBhcnNlZCIsInBlcmZvcm1FdmVudFRyYW5zZm9ybWF0aW9uIiwidHJhbnNmb3JtZWQiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJpbWFnZSIsIm1lbnRpb24iLCJ0YWciXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsUUFBUSxlQUFlO0FBQzdFLFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBRXhCLFNBQVNDLGFBQWEsRUFBRUMsZUFBZSxRQUFRLG9DQUFvQztBQUNuRixTQUFTQyxVQUFVLFFBQVEsa0NBQWtD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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface FileType {
|
|
2
|
+
_from?: string;
|
|
3
|
+
_id?: string;
|
|
4
|
+
_key?: string;
|
|
5
|
+
_oldRev?: string;
|
|
6
|
+
_rev?: string;
|
|
7
|
+
_to?: string;
|
|
8
|
+
base64?: string;
|
|
9
|
+
buffer?: any;
|
|
10
|
+
description?: string;
|
|
11
|
+
fileId?: string;
|
|
12
|
+
fileSize?: number;
|
|
13
|
+
fileType?: string;
|
|
14
|
+
id?: string;
|
|
15
|
+
itemId?: string;
|
|
16
|
+
itemType?: string;
|
|
17
|
+
name?: string;
|
|
18
|
+
url?: string;
|
|
19
|
+
userId?: string;
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}
|
|
22
|
+
export declare class FileValidationError extends Error {
|
|
23
|
+
field?: string;
|
|
24
|
+
constructor(message: string, field?: string);
|
|
25
|
+
}
|
|
26
|
+
export declare const validateFileInput: (file: unknown) => FileType;
|
|
27
|
+
export declare const formatFileOutput: (file: FileType) => FileType;
|
|
28
|
+
export declare const getFileType: (file: FileType) => string;
|
|
29
|
+
export declare const parseFile: (file: FileType) => FileType;
|
|
30
|
+
//# sourceMappingURL=fileAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/fileAdapter/fileAdapter.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACR,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AAsBD,eAAO,MAAM,iBAAiB,GAAI,MAAM,OAAO,KAAG,QAWjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,QAAQ,KAAG,QAAgB,CAAC;AAEnE,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAqB5C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,QAAQ,KAAG,QAU1C,CAAC"}
|