@nlabs/metropolisjs 0.1.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +167 -0
- package/AGENTS.md +13 -0
- package/CHANGELOG.md +112 -0
- package/GRAPHQL_VALIDATION_RESULTS.md +158 -0
- package/PERMISSION_GRAPHQL_INTEGRATION.md +293 -0
- package/PERMISSION_IMPLEMENTATION_SUMMARY.md +243 -0
- package/README.md +1123 -112
- package/SIGNIN_GRAPHQL_VALIDATION.md +125 -0
- package/VAULT_GRAPHQL_API_FINDINGS.md +312 -0
- package/docs/ACTIONS.md +63 -0
- package/docs/COLLECTIONS.md +1038 -0
- package/docs/CONNECTIONS.md +1367 -0
- package/docs/CRUD_INTEGRATION.md +702 -0
- package/examples/connections-usage.tsx +909 -0
- package/examples/content-actions-usage.ts +144 -0
- package/examples/crud-usage.tsx +847 -0
- package/examples/extensibility-usage.tsx +889 -0
- package/examples/i18n-import-examples.ts +86 -0
- package/examples/i18n-namespace-usage.ts +118 -0
- package/examples/i18next-singleton-demo.ts +187 -0
- package/examples/permission-system-usage.tsx +415 -0
- package/examples/project-details.tsx +397 -0
- package/examples/shared-i18n-usage.tsx +203 -0
- package/examples/signup-error-handling.ts +100 -0
- package/examples/translation-types.ts +86 -0
- package/examples/translation-usage.tsx +336 -0
- package/index.js +1 -0
- package/jest.config.mjs +28 -0
- package/lex.config.mjs +11 -2
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
- package/lib/actions/appActions/appActions.d.ts +29 -0
- package/lib/actions/appActions/appActions.d.ts.map +1 -0
- package/lib/actions/appActions/appActions.js +159 -0
- package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
- package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
- package/lib/actions/connectionActions/connectionActions.js +131 -0
- package/lib/actions/contentActions/contentActions.d.ts +34 -0
- package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
- package/lib/actions/contentActions/contentActions.js +314 -0
- package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
- package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
- package/lib/actions/conversationActions/conversationActions.js +225 -0
- package/lib/actions/eventActions/eventActions.d.ts +27 -7
- package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
- package/lib/actions/eventActions/eventActions.js +436 -2
- package/lib/actions/groupActions/groupActions.d.ts +30 -0
- package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
- package/lib/actions/groupActions/groupActions.js +229 -0
- package/lib/actions/imageActions/imageActions.d.ts +16 -10
- package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
- package/lib/actions/imageActions/imageActions.js +593 -2
- package/lib/actions/index.d.ts +21 -9
- package/lib/actions/index.d.ts.map +1 -0
- package/lib/actions/index.js +22 -2
- package/lib/actions/locationActions/locationActions.d.ts +11 -9
- package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
- package/lib/actions/locationActions/locationActions.js +388 -2
- package/lib/actions/messageActions/messageActions.d.ts +16 -32
- package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
- package/lib/actions/messageActions/messageActions.js +235 -2
- package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
- package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
- package/lib/actions/permissionActions/permissionActions.js +330 -0
- package/lib/actions/personaActions/personaActions.d.ts +65 -0
- package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
- package/lib/actions/personaActions/personaActions.js +572 -0
- package/lib/actions/postActions/postActions.d.ts +12 -32
- package/lib/actions/postActions/postActions.d.ts.map +1 -0
- package/lib/actions/postActions/postActions.js +447 -2
- package/lib/actions/reactionActions/reactionActions.d.ts +13 -27
- package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
- package/lib/actions/reactionActions/reactionActions.js +413 -2
- package/lib/actions/sseActions/sseActions.d.ts +1 -0
- package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
- package/lib/actions/sseActions/sseActions.js +148 -2
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
- package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
- package/lib/actions/tagActions/tagActions.d.ts +13 -31
- package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
- package/lib/actions/tagActions/tagActions.js +347 -2
- package/lib/actions/translationActions/translationActions.d.ts +38 -0
- package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
- package/lib/actions/translationActions/translationActions.js +189 -0
- package/lib/actions/userActions/userActions.d.ts +44 -95
- package/lib/actions/userActions/userActions.d.ts.map +1 -0
- package/lib/actions/userActions/userActions.js +870 -2
- package/lib/actions/videoActions/videoActions.d.ts +41 -0
- package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
- package/lib/actions/videoActions/videoActions.js +532 -0
- package/lib/actions/websocketActions/websocketActions.d.ts +20 -21
- package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
- package/lib/actions/websocketActions/websocketActions.js +377 -2
- package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
- package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
- package/lib/adapters/appAdapter/appAdapter.js +90 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +3 -2
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -2
- package/lib/adapters/contentAdapter/contentAdapter.d.ts +3 -2
- package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
- package/lib/adapters/contentAdapter/contentAdapter.js +107 -2
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +3 -2
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -2
- package/lib/adapters/eventAdapter/eventAdapter.d.ts +5 -2
- package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
- package/lib/adapters/eventAdapter/eventAdapter.js +162 -2
- package/lib/adapters/fileAdapter/fileAdapter.d.ts +3 -2
- package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
- package/lib/adapters/fileAdapter/fileAdapter.js +118 -2
- package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
- package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
- package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
- package/lib/adapters/imageAdapter/imageAdapter.d.ts +9 -2
- package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
- package/lib/adapters/imageAdapter/imageAdapter.js +134 -2
- package/lib/adapters/index.d.ts +34 -16
- package/lib/adapters/index.d.ts.map +1 -0
- package/lib/adapters/index.js +19 -2
- package/lib/adapters/locationAdapter/locationAdapter.d.ts +3 -2
- package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
- package/lib/adapters/locationAdapter/locationAdapter.js +95 -2
- package/lib/adapters/messageAdapter/messageAdapter.d.ts +23 -19
- package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
- package/lib/adapters/messageAdapter/messageAdapter.js +82 -2
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
- package/lib/adapters/personaAdapter/personaAdapter.d.ts +28 -2
- package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
- package/lib/adapters/personaAdapter/personaAdapter.js +161 -2
- package/lib/adapters/postAdapter/postAdapter.d.ts +3 -2
- package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
- package/lib/adapters/postAdapter/postAdapter.js +115 -2
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +5 -2
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -2
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +3 -2
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -2
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +3 -2
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -2
- package/lib/adapters/tagAdapter/tagAdapter.d.ts +3 -2
- package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
- package/lib/adapters/tagAdapter/tagAdapter.js +98 -2
- package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
- package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
- package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
- package/lib/adapters/userAdapter/userAdapter.d.ts +18 -6
- package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
- package/lib/adapters/userAdapter/userAdapter.js +302 -2
- package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
- package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
- package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
- package/lib/config/index.d.ts +19 -6
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +97 -2
- package/lib/constants/Collections.d.ts +44 -0
- package/lib/constants/Collections.d.ts.map +1 -0
- package/lib/constants/Collections.js +40 -0
- package/lib/constants/MetropolisConstants.d.ts +1 -0
- package/lib/constants/MetropolisConstants.d.ts.map +1 -0
- package/lib/constants/MetropolisConstants.js +15 -2
- package/lib/graphql/message.d.ts +1 -0
- package/lib/graphql/message.d.ts.map +1 -0
- package/lib/graphql/message.js +6 -4
- package/lib/graphql/notification.d.ts +1 -0
- package/lib/graphql/notification.d.ts.map +1 -0
- package/lib/graphql/notification.js +6 -4
- package/lib/graphql/session.d.ts +1 -0
- package/lib/graphql/session.d.ts.map +1 -0
- package/lib/graphql/session.js +4 -3
- package/lib/index.d.ts +45 -22
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +248 -2
- package/lib/stores/appStore.d.ts +1 -0
- package/lib/stores/appStore.d.ts.map +1 -0
- package/lib/stores/appStore.js +23 -2
- package/lib/stores/contentStore.d.ts +36 -0
- package/lib/stores/contentStore.d.ts.map +1 -0
- package/lib/stores/contentStore.js +139 -0
- package/lib/stores/conversationStore.d.ts +38 -0
- package/lib/stores/conversationStore.d.ts.map +1 -0
- package/lib/stores/conversationStore.js +117 -0
- package/lib/stores/eventStore.d.ts +4 -1
- package/lib/stores/eventStore.d.ts.map +1 -0
- package/lib/stores/eventStore.js +47 -2
- package/lib/stores/groupStore.d.ts +37 -0
- package/lib/stores/groupStore.d.ts.map +1 -0
- package/lib/stores/groupStore.js +68 -0
- package/lib/stores/imageStore.d.ts +6 -1
- package/lib/stores/imageStore.d.ts.map +1 -0
- package/lib/stores/imageStore.js +53 -2
- package/lib/stores/index.d.ts +20 -11
- package/lib/stores/index.d.ts.map +1 -0
- package/lib/stores/index.js +24 -2
- package/lib/stores/locationStore.d.ts +2 -1
- package/lib/stores/locationStore.d.ts.map +1 -0
- package/lib/stores/locationStore.js +42 -2
- package/lib/stores/messageStore.d.ts +19 -4
- package/lib/stores/messageStore.d.ts.map +1 -0
- package/lib/stores/messageStore.js +137 -2
- package/lib/stores/notificationStore.d.ts +33 -0
- package/lib/stores/notificationStore.d.ts.map +1 -0
- package/lib/stores/notificationStore.js +55 -0
- package/lib/stores/permissionStore.d.ts +37 -0
- package/lib/stores/permissionStore.d.ts.map +1 -0
- package/lib/stores/permissionStore.js +117 -0
- package/lib/stores/personaStore.d.ts +26 -0
- package/lib/stores/personaStore.d.ts.map +1 -0
- package/lib/stores/personaStore.js +118 -0
- package/lib/stores/postStore.d.ts +2 -1
- package/lib/stores/postStore.d.ts.map +1 -0
- package/lib/stores/postStore.js +53 -2
- package/lib/stores/reactionStore.d.ts +1 -0
- package/lib/stores/reactionStore.d.ts.map +1 -0
- package/lib/stores/reactionStore.js +28 -2
- package/lib/stores/subscriptionStore.d.ts +41 -0
- package/lib/stores/subscriptionStore.d.ts.map +1 -0
- package/lib/stores/subscriptionStore.js +85 -0
- package/lib/stores/tagStore.d.ts +8 -5
- package/lib/stores/tagStore.d.ts.map +1 -0
- package/lib/stores/tagStore.js +87 -2
- package/lib/stores/translationStore.d.ts +42 -0
- package/lib/stores/translationStore.d.ts.map +1 -0
- package/lib/stores/translationStore.js +122 -0
- package/lib/stores/userStore.d.ts +5 -4
- package/lib/stores/userStore.d.ts.map +1 -0
- package/lib/stores/userStore.js +319 -2
- package/lib/stores/videoStore.d.ts +39 -0
- package/lib/stores/videoStore.d.ts.map +1 -0
- package/lib/stores/videoStore.js +132 -0
- package/lib/stores/websocketStore.d.ts +1 -0
- package/lib/stores/websocketStore.d.ts.map +1 -0
- package/lib/stores/websocketStore.js +51 -2
- package/lib/types/apps.types.d.ts +17 -0
- package/lib/types/apps.types.d.ts.map +1 -0
- package/lib/types/apps.types.js +6 -0
- package/lib/types/common.types.d.ts +31 -0
- package/lib/types/common.types.d.ts.map +1 -0
- package/lib/types/common.types.js +6 -0
- package/lib/types/conversations.types.d.ts +17 -0
- package/lib/types/conversations.types.d.ts.map +1 -0
- package/lib/types/conversations.types.js +6 -0
- package/lib/types/edges.types.d.ts +38 -0
- package/lib/types/edges.types.d.ts.map +1 -0
- package/lib/types/edges.types.js +6 -0
- package/lib/types/groups.types.d.ts +19 -0
- package/lib/types/groups.types.d.ts.map +1 -0
- package/lib/types/groups.types.js +6 -0
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +12 -0
- package/lib/types/subscriptions.types.d.ts +32 -0
- package/lib/types/subscriptions.types.d.ts.map +1 -0
- package/lib/types/subscriptions.types.js +6 -0
- package/lib/types/videos.types.d.ts +61 -0
- package/lib/types/videos.types.d.ts.map +1 -0
- package/lib/types/videos.types.js +6 -0
- package/lib/utils/MetropolisProvider.d.ts +39 -15
- package/lib/utils/MetropolisProvider.d.ts.map +1 -0
- package/lib/utils/MetropolisProvider.js +31 -2
- package/lib/utils/actionFactory.d.ts +21 -19
- package/lib/utils/actionFactory.d.ts.map +1 -0
- package/lib/utils/actionFactory.js +95 -2
- package/lib/utils/api.d.ts +5 -4
- package/lib/utils/api.d.ts.map +1 -0
- package/lib/utils/api.js +252 -6
- package/lib/utils/app.d.ts +1 -0
- package/lib/utils/app.d.ts.map +1 -0
- package/lib/utils/app.js +15 -2
- package/lib/utils/baseActionFactory.d.ts +5 -23
- package/lib/utils/baseActionFactory.d.ts.map +1 -0
- package/lib/utils/baseActionFactory.js +72 -2
- package/lib/utils/configUtils.d.ts +11 -0
- package/lib/utils/configUtils.d.ts.map +1 -0
- package/lib/utils/configUtils.js +20 -0
- package/lib/utils/dateUtils.d.ts +1 -0
- package/lib/utils/dateUtils.d.ts.map +1 -0
- package/lib/utils/dateUtils.js +11 -2
- package/lib/utils/file.d.ts +3 -1
- package/lib/utils/file.d.ts.map +1 -0
- package/lib/utils/file.js +156 -2
- package/lib/utils/i18n.d.ts +7 -0
- package/lib/utils/i18n.d.ts.map +1 -0
- package/lib/utils/i18n.js +96 -0
- package/lib/utils/index.d.ts +20 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +26 -0
- package/lib/utils/location.d.ts +4 -3
- package/lib/utils/location.d.ts.map +1 -0
- package/lib/utils/location.js +82 -2
- package/lib/utils/permissionUtils.d.ts +22 -0
- package/lib/utils/permissionUtils.d.ts.map +1 -0
- package/lib/utils/permissionUtils.js +72 -0
- package/lib/utils/requestCache.d.ts +8 -0
- package/lib/utils/requestCache.d.ts.map +1 -0
- package/lib/utils/requestCache.js +53 -0
- package/lib/utils/session.d.ts +14 -0
- package/lib/utils/session.d.ts.map +1 -0
- package/lib/utils/session.js +107 -0
- package/lib/utils/useConversationTyping.d.ts +26 -0
- package/lib/utils/useConversationTyping.d.ts.map +1 -0
- package/lib/utils/useConversationTyping.js +117 -0
- package/lib/utils/useMetropolis.d.ts +67 -12
- package/lib/utils/useMetropolis.d.ts.map +1 -0
- package/lib/utils/useMetropolis.js +311 -2
- package/lib/utils/useTranslations.d.ts +16 -0
- package/lib/utils/useTranslations.d.ts.map +1 -0
- package/lib/utils/useTranslations.js +105 -0
- package/lib/utils/validatorFactory.d.ts +3 -2
- package/lib/utils/validatorFactory.d.ts.map +1 -0
- package/lib/utils/validatorFactory.js +95 -2
- package/package.json +58 -17
- package/temp_signin.ts +73 -0
- package/lib/actions/profileActions/profileActions.d.ts +0 -50
- package/lib/actions/profileActions/profileActions.js +0 -2
- package/lib/adapters/profileAdapter/profileAdapter.d.ts +0 -32
- package/lib/adapters/profileAdapter/profileAdapter.js +0 -2
- package/lib/stores/profileStore.d.ts +0 -24
- package/lib/stores/profileStore.js +0 -2
- /package/{FACTORY_PATTERN_GUIDE.md → factoryPatternGuide.md} +0 -0
package/lib/utils/app.js
CHANGED
|
@@ -1,2 +1,15 @@
|
|
|
1
|
-
import{DateTime
|
|
2
|
-
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
export const getColumnSize = (width, maxItemWidth, containerPadding = 0)=>{
|
|
3
|
+
const containerWidth = width - 8 * containerPadding;
|
|
4
|
+
const columns = Math.ceil(containerWidth / maxItemWidth);
|
|
5
|
+
const size = (containerWidth - 8 * (columns - 1) * 2) / columns;
|
|
6
|
+
return {
|
|
7
|
+
columns,
|
|
8
|
+
size
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export const isExpired = (expires, limitInMin)=>DateTime.local().diff(DateTime.fromMillis(expires), [
|
|
12
|
+
'minutes'
|
|
13
|
+
]).minutes > limitInMin;
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYXBwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5TaXplIHtcbiAgcmVhZG9ubHkgY29sdW1uczogbnVtYmVyO1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRDb2x1bW5TaXplID0gKFxuICB3aWR0aDogbnVtYmVyLFxuICBtYXhJdGVtV2lkdGg6IG51bWJlcixcbiAgY29udGFpbmVyUGFkZGluZzogbnVtYmVyID0gMFxuKTogQ29sdW1uU2l6ZSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lcldpZHRoOiBudW1iZXIgPSB3aWR0aCAtICg4ICogY29udGFpbmVyUGFkZGluZyk7XG4gIGNvbnN0IGNvbHVtbnM6IG51bWJlciA9IE1hdGguY2VpbChjb250YWluZXJXaWR0aCAvIG1heEl0ZW1XaWR0aCk7XG4gIGNvbnN0IHNpemU6IG51bWJlciA9IChjb250YWluZXJXaWR0aCAtICg4ICogKGNvbHVtbnMgLSAxKSAqIDIpKSAvIGNvbHVtbnM7XG5cbiAgcmV0dXJuIHtjb2x1bW5zLCBzaXplfTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0V4cGlyZWQgPSAoZXhwaXJlczogbnVtYmVyLCBsaW1pdEluTWluOiBudW1iZXIpOiBib29sZWFuID0+XG4gIERhdGVUaW1lLmxvY2FsKCkuZGlmZihEYXRlVGltZS5mcm9tTWlsbGlzKGV4cGlyZXMpLCBbJ21pbnV0ZXMnXSkubWludXRlcyA+IGxpbWl0SW5NaW47XG4iXSwibmFtZXMiOlsiRGF0ZVRpbWUiLCJnZXRDb2x1bW5TaXplIiwid2lkdGgiLCJtYXhJdGVtV2lkdGgiLCJjb250YWluZXJQYWRkaW5nIiwiY29udGFpbmVyV2lkdGgiLCJjb2x1bW5zIiwiTWF0aCIsImNlaWwiLCJzaXplIiwiaXNFeHBpcmVkIiwiZXhwaXJlcyIsImxpbWl0SW5NaW4iLCJsb2NhbCIsImRpZmYiLCJmcm9tTWlsbGlzIiwibWludXRlcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxRQUFPLFFBQVE7QUFPL0IsT0FBTyxNQUFNQyxnQkFBZ0IsQ0FDM0JDLE9BQ0FDLGNBQ0FDLG1CQUEyQixDQUFDO0lBRTVCLE1BQU1DLGlCQUF5QkgsUUFBUyxJQUFJRTtJQUM1QyxNQUFNRSxVQUFrQkMsS0FBS0MsSUFBSSxDQUFDSCxpQkFBaUJGO0lBQ25ELE1BQU1NLE9BQWUsQUFBQ0osQ0FBQUEsaUJBQWtCLElBQUtDLENBQUFBLFVBQVUsQ0FBQSxJQUFLLENBQUMsSUFBS0E7SUFFbEUsT0FBTztRQUFDQTtRQUFTRztJQUFJO0FBQ3ZCLEVBQUU7QUFFRixPQUFPLE1BQU1DLFlBQVksQ0FBQ0MsU0FBaUJDLGFBQ3pDWixTQUFTYSxLQUFLLEdBQUdDLElBQUksQ0FBQ2QsU0FBU2UsVUFBVSxDQUFDSixVQUFVO1FBQUM7S0FBVSxFQUFFSyxPQUFPLEdBQUdKLFdBQVcifQ==
|
|
@@ -1,34 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
-
*/
|
|
5
|
-
import type { BaseAdapterOptions } from './validatorFactory';
|
|
1
|
+
import type { BaseAdapterOptions } from './validatorFactory.js';
|
|
6
2
|
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
7
3
|
export interface BaseActionOptions<T extends BaseAdapterOptions = BaseAdapterOptions> {
|
|
8
4
|
adapter?: (input: unknown, options?: T) => any;
|
|
9
5
|
adapterOptions?: T;
|
|
10
6
|
}
|
|
11
|
-
/**
|
|
12
|
-
* Base action factory that provides common functionality for all action creators.
|
|
13
|
-
* This consolidates the initialization and update patterns used across action files.
|
|
14
|
-
*
|
|
15
|
-
* @param flux - The flux framework instance
|
|
16
|
-
* @param defaultValidator - The default validation function
|
|
17
|
-
* @param options - Action options including adapter and adapter options
|
|
18
|
-
* @returns An object with validator, update functions, and common utilities
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* const { validator, updateAdapter, updateOptions, createMutationAction } = createBaseActions(
|
|
22
|
-
* flux,
|
|
23
|
-
* defaultUserValidator,
|
|
24
|
-
* options
|
|
25
|
-
* );
|
|
26
|
-
*/
|
|
27
7
|
export declare const createBaseActions: <T extends BaseAdapterOptions>(flux: FluxFramework, defaultValidator: (input: unknown, options?: T) => any, options?: BaseActionOptions<T>) => {
|
|
28
8
|
createMutationAction: <R = any>(mutationName: string, dataType: string, queryVariables: Record<string, any>, props: string[], successType: string, errorType: string, mutationFn: any) => (input?: unknown) => Promise<R>;
|
|
29
9
|
createQueryAction: <R = any>(queryName: string, dataType: string, queryVariables: Record<string, any>, props: string[], successType: string, errorType: string, queryFn: any) => () => Promise<R>;
|
|
30
10
|
flux: FluxFramework;
|
|
31
|
-
updateAdapter: (adapter: (input: unknown, options?: T
|
|
11
|
+
updateAdapter: (adapter: (input: unknown, options?: T) => any) => void;
|
|
32
12
|
updateOptions: (options: T) => void;
|
|
33
|
-
|
|
13
|
+
updateAdapterOptions: (options: T) => void;
|
|
14
|
+
validator: (input: unknown, validatorOptions?: T) => any;
|
|
34
15
|
};
|
|
16
|
+
//# sourceMappingURL=baseActionFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseActionFactory.d.ts","sourceRoot":"","sources":["../../src/utils/baseActionFactory.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB;IAClF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC;IAC/C,cAAc,CAAC,EAAE,CAAC,CAAC;CACpB;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,kBAAkB,EAC5D,MAAM,aAAa,EACnB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,EACtD,UAAU,iBAAiB,CAAC,CAAC,CAAC;2BAWA,CAAC,sBACf,MAAM,YACV,MAAM,kBACA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAC5B,MAAM,EAAE,eACF,MAAM,aACR,MAAM,cACL,GAAG,MACL,QAAQ,OAAO,KAAG,OAAO,CAAC,CAAC,CAAC;wBAgCb,CAAC,mBACf,MAAM,YACP,MAAM,kBACA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAC5B,MAAM,EAAE,eACF,MAAM,aACR,MAAM,WACR,GAAG,WACC,OAAO,CAAC,CAAC,CAAC;;;;;;CAiC1B,CAAC"}
|
|
@@ -1,2 +1,72 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ import { createValidatorManager } from './validatorFactory.js';
|
|
5
|
+
export const createBaseActions = (flux, defaultValidator, options)=>{
|
|
6
|
+
const { validator, updateAdapter, updateOptions } = createValidatorManager(defaultValidator, options?.adapterOptions);
|
|
7
|
+
if (options?.adapter) {
|
|
8
|
+
updateAdapter(options.adapter);
|
|
9
|
+
}
|
|
10
|
+
const createMutationAction = (mutationName, dataType, queryVariables, props, successType, errorType, mutationFn)=>async (input)=>{
|
|
11
|
+
try {
|
|
12
|
+
const variables = input ? {
|
|
13
|
+
...queryVariables,
|
|
14
|
+
[Object.keys(queryVariables)[0]]: {
|
|
15
|
+
...queryVariables[Object.keys(queryVariables)[0]],
|
|
16
|
+
value: validator(input)
|
|
17
|
+
}
|
|
18
|
+
} : queryVariables;
|
|
19
|
+
const onSuccess = (data)=>{
|
|
20
|
+
const result = data[dataType]?.[mutationName] || {};
|
|
21
|
+
return flux.dispatch({
|
|
22
|
+
[dataType.slice(0, -1)]: result,
|
|
23
|
+
type: successType
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
const result = await mutationFn(flux, mutationName, dataType, variables, props, {
|
|
27
|
+
onSuccess
|
|
28
|
+
});
|
|
29
|
+
const key = Object.keys(result)[0];
|
|
30
|
+
return result[key];
|
|
31
|
+
} catch (error) {
|
|
32
|
+
flux.dispatch({
|
|
33
|
+
error,
|
|
34
|
+
type: errorType
|
|
35
|
+
});
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const createQueryAction = (queryName, dataType, queryVariables, props, successType, errorType, queryFn)=>async ()=>{
|
|
40
|
+
try {
|
|
41
|
+
const onSuccess = (data)=>{
|
|
42
|
+
const result = data[dataType]?.[queryName] || {};
|
|
43
|
+
return flux.dispatch({
|
|
44
|
+
[dataType.slice(0, -1)]: result,
|
|
45
|
+
type: successType
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
const result = await queryFn(flux, queryName, dataType, queryVariables, props, {
|
|
49
|
+
onSuccess
|
|
50
|
+
});
|
|
51
|
+
const key = Object.keys(result)[0];
|
|
52
|
+
return result[key];
|
|
53
|
+
} catch (error) {
|
|
54
|
+
flux.dispatch({
|
|
55
|
+
error,
|
|
56
|
+
type: errorType
|
|
57
|
+
});
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
createMutationAction,
|
|
63
|
+
createQueryAction,
|
|
64
|
+
flux,
|
|
65
|
+
updateAdapter,
|
|
66
|
+
updateOptions,
|
|
67
|
+
updateAdapterOptions: updateOptions,
|
|
68
|
+
validator
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYmFzZUFjdGlvbkZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlVmFsaWRhdG9yTWFuYWdlcn0gZnJvbSAnLi92YWxpZGF0b3JGYWN0b3J5LmpzJztcblxuaW1wb3J0IHR5cGUge0Jhc2VBZGFwdGVyT3B0aW9uc30gZnJvbSAnLi92YWxpZGF0b3JGYWN0b3J5LmpzJztcbmltcG9ydCB0eXBlIHtGbHV4RnJhbWV3b3JrfSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VBY3Rpb25PcHRpb25zPFQgZXh0ZW5kcyBCYXNlQWRhcHRlck9wdGlvbnMgPSBCYXNlQWRhcHRlck9wdGlvbnM+IHtcbiAgYWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFQpID0+IGFueTtcbiAgYWRhcHRlck9wdGlvbnM/OiBUO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlQmFzZUFjdGlvbnMgPSA8VCBleHRlbmRzIEJhc2VBZGFwdGVyT3B0aW9ucz4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGRlZmF1bHRWYWxpZGF0b3I6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFQpID0+IGFueSxcbiAgb3B0aW9ucz86IEJhc2VBY3Rpb25PcHRpb25zPFQ+XG4pID0+IHtcbiAgY29uc3Qge3ZhbGlkYXRvciwgdXBkYXRlQWRhcHRlciwgdXBkYXRlT3B0aW9uc30gPSBjcmVhdGVWYWxpZGF0b3JNYW5hZ2VyKFxuICAgIGRlZmF1bHRWYWxpZGF0b3IsXG4gICAgb3B0aW9ucz8uYWRhcHRlck9wdGlvbnNcbiAgKTtcblxuICBpZihvcHRpb25zPy5hZGFwdGVyKSB7XG4gICAgdXBkYXRlQWRhcHRlcihvcHRpb25zLmFkYXB0ZXIpO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlTXV0YXRpb25BY3Rpb24gPSA8UiA9IGFueT4oXG4gICAgbXV0YXRpb25OYW1lOiBzdHJpbmcsXG4gICAgZGF0YVR5cGU6IHN0cmluZyxcbiAgICBxdWVyeVZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwcm9wczogc3RyaW5nW10sXG4gICAgc3VjY2Vzc1R5cGU6IHN0cmluZyxcbiAgICBlcnJvclR5cGU6IHN0cmluZyxcbiAgICBtdXRhdGlvbkZuOiBhbnlcbiAgKSA9PiBhc3luYyAoaW5wdXQ/OiB1bmtub3duKTogUHJvbWlzZTxSPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IGlucHV0ID8ge1xuICAgICAgICAuLi5xdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW09iamVjdC5rZXlzKHF1ZXJ5VmFyaWFibGVzKVswXV06IHtcbiAgICAgICAgICAuLi5xdWVyeVZhcmlhYmxlc1tPYmplY3Qua2V5cyhxdWVyeVZhcmlhYmxlcylbMF1dLFxuICAgICAgICAgIHZhbHVlOiB2YWxpZGF0b3IoaW5wdXQpXG4gICAgICAgIH1cbiAgICAgIH0gOiBxdWVyeVZhcmlhYmxlcztcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhW2RhdGFUeXBlXT8uW211dGF0aW9uTmFtZV0gfHwge307XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtbZGF0YVR5cGUuc2xpY2UoMCwgLTEpXTogcmVzdWx0LCB0eXBlOiBzdWNjZXNzVHlwZX0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbXV0YXRpb25GbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgbXV0YXRpb25OYW1lLFxuICAgICAgICBkYXRhVHlwZSxcbiAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHJlc3VsdClbMF07XG4gICAgICByZXR1cm4gcmVzdWx0W2tleV0gYXMgUjtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogZXJyb3JUeXBlfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlUXVlcnlBY3Rpb24gPSA8UiA9IGFueT4oXG4gICAgcXVlcnlOYW1lOiBzdHJpbmcsXG4gICAgZGF0YVR5cGU6IHN0cmluZyxcbiAgICBxdWVyeVZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwcm9wczogc3RyaW5nW10sXG4gICAgc3VjY2Vzc1R5cGU6IHN0cmluZyxcbiAgICBlcnJvclR5cGU6IHN0cmluZyxcbiAgICBxdWVyeUZuOiBhbnlcbiAgKSA9PiBhc3luYyAoKTogUHJvbWlzZTxSPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YVtkYXRhVHlwZV0/LltxdWVyeU5hbWVdIHx8IHt9O1xuICAgICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7W2RhdGFUeXBlLnNsaWNlKDAsIC0xKV06IHJlc3VsdCwgdHlwZTogc3VjY2Vzc1R5cGV9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Rm4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgICAgZGF0YVR5cGUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHJlc3VsdClbMF07XG4gICAgICByZXR1cm4gcmVzdWx0W2tleV0gYXMgUjtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogZXJyb3JUeXBlfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNdXRhdGlvbkFjdGlvbixcbiAgICBjcmVhdGVRdWVyeUFjdGlvbixcbiAgICBmbHV4LFxuICAgIHVwZGF0ZUFkYXB0ZXIsXG4gICAgdXBkYXRlT3B0aW9ucyxcbiAgICB1cGRhdGVBZGFwdGVyT3B0aW9uczogdXBkYXRlT3B0aW9ucyxcbiAgICB2YWxpZGF0b3JcbiAgfTtcbn07Il0sIm5hbWVzIjpbImNyZWF0ZVZhbGlkYXRvck1hbmFnZXIiLCJjcmVhdGVCYXNlQWN0aW9ucyIsImZsdXgiLCJkZWZhdWx0VmFsaWRhdG9yIiwib3B0aW9ucyIsInZhbGlkYXRvciIsInVwZGF0ZUFkYXB0ZXIiLCJ1cGRhdGVPcHRpb25zIiwiYWRhcHRlck9wdGlvbnMiLCJhZGFwdGVyIiwiY3JlYXRlTXV0YXRpb25BY3Rpb24iLCJtdXRhdGlvbk5hbWUiLCJkYXRhVHlwZSIsInF1ZXJ5VmFyaWFibGVzIiwicHJvcHMiLCJzdWNjZXNzVHlwZSIsImVycm9yVHlwZSIsIm11dGF0aW9uRm4iLCJpbnB1dCIsInZhcmlhYmxlcyIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsIm9uU3VjY2VzcyIsImRhdGEiLCJyZXN1bHQiLCJkaXNwYXRjaCIsInNsaWNlIiwidHlwZSIsImtleSIsImVycm9yIiwiY3JlYXRlUXVlcnlBY3Rpb24iLCJxdWVyeU5hbWUiLCJxdWVyeUZuIiwidXBkYXRlQWRhcHRlck9wdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLHNCQUFzQixRQUFPLHdCQUF3QjtBQVU3RCxPQUFPLE1BQU1DLG9CQUFvQixDQUMvQkMsTUFDQUMsa0JBQ0FDO0lBRUEsTUFBTSxFQUFDQyxTQUFTLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFDLEdBQUdQLHVCQUNoREcsa0JBQ0FDLFNBQVNJO0lBR1gsSUFBR0osU0FBU0ssU0FBUztRQUNuQkgsY0FBY0YsUUFBUUssT0FBTztJQUMvQjtJQUVBLE1BQU1DLHVCQUF1QixDQUMzQkMsY0FDQUMsVUFDQUMsZ0JBQ0FDLE9BQ0FDLGFBQ0FDLFdBQ0FDLGFBQ0csT0FBT0M7WUFDVixJQUFJO2dCQUNGLE1BQU1DLFlBQVlELFFBQVE7b0JBQ3hCLEdBQUdMLGNBQWM7b0JBQ2pCLENBQUNPLE9BQU9DLElBQUksQ0FBQ1IsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFO3dCQUNoQyxHQUFHQSxjQUFjLENBQUNPLE9BQU9DLElBQUksQ0FBQ1IsZUFBZSxDQUFDLEVBQUUsQ0FBQzt3QkFDakRTLE9BQU9qQixVQUFVYTtvQkFDbkI7Z0JBQ0YsSUFBSUw7Z0JBRUosTUFBTVUsWUFBWSxDQUFDQztvQkFDakIsTUFBTUMsU0FBU0QsSUFBSSxDQUFDWixTQUFTLEVBQUUsQ0FBQ0QsYUFBYSxJQUFJLENBQUM7b0JBQ2xELE9BQU9ULEtBQUt3QixRQUFRLENBQUM7d0JBQUMsQ0FBQ2QsU0FBU2UsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUVGO3dCQUFRRyxNQUFNYjtvQkFBVztnQkFDMUU7Z0JBRUEsTUFBTVUsU0FBUyxNQUFNUixXQUNuQmYsTUFDQVMsY0FDQUMsVUFDQU8sV0FDQUwsT0FDQTtvQkFBQ1M7Z0JBQVM7Z0JBR1osTUFBTU0sTUFBTVQsT0FBT0MsSUFBSSxDQUFDSSxPQUFPLENBQUMsRUFBRTtnQkFDbEMsT0FBT0EsTUFBTSxDQUFDSSxJQUFJO1lBQ3BCLEVBQUUsT0FBTUMsT0FBTztnQkFDYjVCLEtBQUt3QixRQUFRLENBQUM7b0JBQUNJO29CQUFPRixNQUFNWjtnQkFBUztnQkFDckMsTUFBTWM7WUFDUjtRQUNGO0lBRUEsTUFBTUMsb0JBQW9CLENBQ3hCQyxXQUNBcEIsVUFDQUMsZ0JBQ0FDLE9BQ0FDLGFBQ0FDLFdBQ0FpQixVQUNHO1lBQ0gsSUFBSTtnQkFDRixNQUFNVixZQUFZLENBQUNDO29CQUNqQixNQUFNQyxTQUFTRCxJQUFJLENBQUNaLFNBQVMsRUFBRSxDQUFDb0IsVUFBVSxJQUFJLENBQUM7b0JBQy9DLE9BQU85QixLQUFLd0IsUUFBUSxDQUFDO3dCQUFDLENBQUNkLFNBQVNlLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFRjt3QkFBUUcsTUFBTWI7b0JBQVc7Z0JBQzFFO2dCQUVBLE1BQU1VLFNBQVMsTUFBTVEsUUFDbkIvQixNQUNBOEIsV0FDQXBCLFVBQ0FDLGdCQUNBQyxPQUNBO29CQUFDUztnQkFBUztnQkFHWixNQUFNTSxNQUFNVCxPQUFPQyxJQUFJLENBQUNJLE9BQU8sQ0FBQyxFQUFFO2dCQUNsQyxPQUFPQSxNQUFNLENBQUNJLElBQUk7WUFDcEIsRUFBRSxPQUFNQyxPQUFPO2dCQUNiNUIsS0FBS3dCLFFBQVEsQ0FBQztvQkFBQ0k7b0JBQU9GLE1BQU1aO2dCQUFTO2dCQUNyQyxNQUFNYztZQUNSO1FBQ0Y7SUFFQSxPQUFPO1FBQ0xwQjtRQUNBcUI7UUFDQTdCO1FBQ0FJO1FBQ0FDO1FBQ0EyQixzQkFBc0IzQjtRQUN0QkY7SUFDRjtBQUNGLEVBQUUifQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
|
+
import type { MetropolisEnvironmentConfiguration } from '../config/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Gets configuration from flux state.
|
|
5
|
+
* Falls back to default config if not found in flux state.
|
|
6
|
+
*
|
|
7
|
+
* @param flux - The Flux framework instance
|
|
8
|
+
* @returns The resolved environment configuration
|
|
9
|
+
*/
|
|
10
|
+
export declare const getConfigFromFlux: (flux: FluxFramework) => MetropolisEnvironmentConfiguration;
|
|
11
|
+
//# sourceMappingURL=configUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configUtils.d.ts","sourceRoot":"","sources":["../../src/utils/configUtils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,oBAAoB,CAAC;AAE7E;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,aAAa,KAAG,kCASvD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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 { getDefaultConfig } from '../config/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Gets configuration from flux state.
|
|
7
|
+
* Falls back to default config if not found in flux state.
|
|
8
|
+
*
|
|
9
|
+
* @param flux - The Flux framework instance
|
|
10
|
+
* @returns The resolved environment configuration
|
|
11
|
+
*/ export const getConfigFromFlux = (flux)=>{
|
|
12
|
+
const config = flux.getState('app.config');
|
|
13
|
+
if (config) {
|
|
14
|
+
return config;
|
|
15
|
+
}
|
|
16
|
+
// Fallback to default config
|
|
17
|
+
return getDefaultConfig();
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvY29uZmlnVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7IGdldERlZmF1bHRDb25maWcgfSBmcm9tICcuLi9jb25maWcvaW5kZXguanMnO1xuaW1wb3J0IHR5cGUgeyBGbHV4RnJhbWV3b3JrIH0gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHsgTWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2NvbmZpZy9pbmRleC5qcyc7XG5cbi8qKlxuICogR2V0cyBjb25maWd1cmF0aW9uIGZyb20gZmx1eCBzdGF0ZS5cbiAqIEZhbGxzIGJhY2sgdG8gZGVmYXVsdCBjb25maWcgaWYgbm90IGZvdW5kIGluIGZsdXggc3RhdGUuXG4gKlxuICogQHBhcmFtIGZsdXggLSBUaGUgRmx1eCBmcmFtZXdvcmsgaW5zdGFuY2VcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb25maWdGcm9tRmx1eCA9IChmbHV4OiBGbHV4RnJhbWV3b3JrKTogTWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGZsdXguZ2V0U3RhdGUoJ2FwcC5jb25maWcnKSBhcyBNZXRyb3BvbGlzRW52aXJvbm1lbnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gZGVmYXVsdCBjb25maWdcbiAgcmV0dXJuIGdldERlZmF1bHRDb25maWcoKTtcbn07XG4iXSwibmFtZXMiOlsiZ2V0RGVmYXVsdENvbmZpZyIsImdldENvbmZpZ0Zyb21GbHV4IiwiZmx1eCIsImNvbmZpZyIsImdldFN0YXRlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFTQSxnQkFBZ0IsUUFBUSxxQkFBcUI7QUFJdEQ7Ozs7OztDQU1DLEdBQ0QsT0FBTyxNQUFNQyxvQkFBb0IsQ0FBQ0M7SUFDaEMsTUFBTUMsU0FBU0QsS0FBS0UsUUFBUSxDQUFDO0lBRTdCLElBQUlELFFBQVE7UUFDVixPQUFPQTtJQUNUO0lBRUEsNkJBQTZCO0lBQzdCLE9BQU9IO0FBQ1QsRUFBRSJ9
|
package/lib/utils/dateUtils.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateUtils.d.ts","sourceRoot":"","sources":["../../src/utils/dateUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,GAAG,MAAM,GAAG,QAAQ,QAQ9D,CAAC"}
|
package/lib/utils/dateUtils.js
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
import{DateTime
|
|
2
|
-
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
export const parseDateTime = (value)=>{
|
|
3
|
+
if (typeof value === 'string') {
|
|
4
|
+
return DateTime.fromISO(value).toMillis();
|
|
5
|
+
} else if (value instanceof DateTime) {
|
|
6
|
+
return value.toMillis();
|
|
7
|
+
}
|
|
8
|
+
return value;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvZGF0ZVV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlRGF0ZVRpbWUgPSAodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IERhdGVUaW1lKSA9PiB7XG4gIGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUlTTyh2YWx1ZSkudG9NaWxsaXMoKTtcbiAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgRGF0ZVRpbWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGFzIERhdGVUaW1lKS50b01pbGxpcygpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcbiJdLCJuYW1lcyI6WyJEYXRlVGltZSIsInBhcnNlRGF0ZVRpbWUiLCJ2YWx1ZSIsImZyb21JU08iLCJ0b01pbGxpcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxRQUFPLFFBQVE7QUFFL0IsT0FBTyxNQUFNQyxnQkFBZ0IsQ0FBQ0M7SUFDNUIsSUFBRyxPQUFPQSxVQUFVLFVBQVU7UUFDNUIsT0FBT0YsU0FBU0csT0FBTyxDQUFDRCxPQUFPRSxRQUFRO0lBQ3pDLE9BQU8sSUFBR0YsaUJBQWlCRixVQUFVO1FBQ25DLE9BQU8sQUFBQ0UsTUFBbUJFLFFBQVE7SUFDckM7SUFFQSxPQUFPRjtBQUNULEVBQUUifQ==
|
package/lib/utils/file.d.ts
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const convertFileToUploadFile: (file: File, maxSize: number, maxBytes?: number) => Promise<File>;
|
|
2
|
+
export declare const convertFileToBase64: (file: File, maxSize: number, maxBytes?: number) => Promise<string>;
|
|
3
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAgFA,eAAO,MAAM,uBAAuB,GAClC,MAAM,IAAI,EACV,SAAS,MAAM,EACf,WAAU,MAAmB,KAC5B,OAAO,CAAC,IAAI,CA0Cd,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,IAAI,EACV,SAAS,MAAM,EACf,WAAU,MAAmB,KAC5B,OAAO,CAAC,MAAM,CA2Eb,CAAC"}
|
package/lib/utils/file.js
CHANGED
|
@@ -1,2 +1,156 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
1
|
+
const getUploadPayloadByteSize = (dataUrl)=>dataUrl.length;
|
|
2
|
+
const getFileNameWithoutExtension = (name)=>name.split('.').slice(0, -1).join('.') || name;
|
|
3
|
+
const createImageCanvas = (file, maxSize)=>new Promise((resolve, reject)=>{
|
|
4
|
+
const image = new Image();
|
|
5
|
+
const objectUrl = URL.createObjectURL(file);
|
|
6
|
+
image.onload = ()=>{
|
|
7
|
+
URL.revokeObjectURL(objectUrl);
|
|
8
|
+
const canvas = document.createElement('canvas');
|
|
9
|
+
const { height, width } = image;
|
|
10
|
+
let updatedHeight = height;
|
|
11
|
+
let updatedWidth = width;
|
|
12
|
+
if (width > height) {
|
|
13
|
+
if (width > maxSize) {
|
|
14
|
+
updatedHeight *= maxSize / width;
|
|
15
|
+
updatedWidth = maxSize;
|
|
16
|
+
}
|
|
17
|
+
} else if (height > maxSize) {
|
|
18
|
+
updatedWidth *= maxSize / height;
|
|
19
|
+
updatedHeight = maxSize;
|
|
20
|
+
}
|
|
21
|
+
const context = canvas.getContext('2d');
|
|
22
|
+
if (!context) {
|
|
23
|
+
reject(new Error('Unable to prepare image upload.'));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
resolve({
|
|
27
|
+
canvas,
|
|
28
|
+
context,
|
|
29
|
+
height: Math.max(1, Math.round(updatedHeight)),
|
|
30
|
+
width: Math.max(1, Math.round(updatedWidth))
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
image.onerror = ()=>{
|
|
34
|
+
URL.revokeObjectURL(objectUrl);
|
|
35
|
+
reject(new Error('Unable to prepare image upload.'));
|
|
36
|
+
};
|
|
37
|
+
image.src = objectUrl;
|
|
38
|
+
});
|
|
39
|
+
const renderImageFile = (canvas, context, image, width, height, quality, name)=>new Promise((resolve, reject)=>{
|
|
40
|
+
canvas.width = width;
|
|
41
|
+
canvas.height = height;
|
|
42
|
+
context.clearRect(0, 0, width, height);
|
|
43
|
+
context.drawImage(image, 0, 0, width, height);
|
|
44
|
+
canvas.toBlob((blob)=>{
|
|
45
|
+
if (!blob) {
|
|
46
|
+
reject(new Error('Unable to prepare image upload.'));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
resolve(new File([
|
|
50
|
+
blob
|
|
51
|
+
], `${getFileNameWithoutExtension(name)}.jpg`, {
|
|
52
|
+
type: 'image/jpeg'
|
|
53
|
+
}));
|
|
54
|
+
}, 'image/jpeg', quality);
|
|
55
|
+
});
|
|
56
|
+
export const convertFileToUploadFile = async (file, maxSize, maxBytes = 900 * 1024)=>{
|
|
57
|
+
if (!file.type.startsWith('image/') || typeof document === 'undefined') {
|
|
58
|
+
return file;
|
|
59
|
+
}
|
|
60
|
+
const image = new Image();
|
|
61
|
+
const objectUrl = URL.createObjectURL(file);
|
|
62
|
+
try {
|
|
63
|
+
await new Promise((resolve, reject)=>{
|
|
64
|
+
image.onload = ()=>resolve();
|
|
65
|
+
image.onerror = ()=>reject(new Error('Unable to prepare image upload.'));
|
|
66
|
+
image.src = objectUrl;
|
|
67
|
+
});
|
|
68
|
+
const { canvas, context, height, width } = await createImageCanvas(file, maxSize);
|
|
69
|
+
let currentWidth = width;
|
|
70
|
+
let currentHeight = height;
|
|
71
|
+
let quality = 0.82;
|
|
72
|
+
let uploadFile = await renderImageFile(canvas, context, image, currentWidth, currentHeight, quality, file.name);
|
|
73
|
+
while(uploadFile.size > maxBytes && quality > 0.45){
|
|
74
|
+
quality = Math.max(0.45, Number((quality - 0.08).toFixed(2)));
|
|
75
|
+
uploadFile = await renderImageFile(canvas, context, image, currentWidth, currentHeight, quality, file.name);
|
|
76
|
+
}
|
|
77
|
+
while(uploadFile.size > maxBytes && (currentWidth > 320 || currentHeight > 320)){
|
|
78
|
+
currentWidth = Math.max(320, Math.round(currentWidth * 0.85));
|
|
79
|
+
currentHeight = Math.max(320, Math.round(currentHeight * 0.85));
|
|
80
|
+
quality = 0.78;
|
|
81
|
+
uploadFile = await renderImageFile(canvas, context, image, currentWidth, currentHeight, quality, file.name);
|
|
82
|
+
while(uploadFile.size > maxBytes && quality > 0.45){
|
|
83
|
+
quality = Math.max(0.45, Number((quality - 0.08).toFixed(2)));
|
|
84
|
+
uploadFile = await renderImageFile(canvas, context, image, currentWidth, currentHeight, quality, file.name);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return uploadFile;
|
|
88
|
+
} finally{
|
|
89
|
+
URL.revokeObjectURL(objectUrl);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
export const convertFileToBase64 = (file, maxSize, maxBytes = 900 * 1024)=>new Promise((resolve, reject)=>{
|
|
93
|
+
const reader = new FileReader();
|
|
94
|
+
reader.onload = ()=>{
|
|
95
|
+
const image = new Image();
|
|
96
|
+
image.onload = ()=>{
|
|
97
|
+
const canvas = document.createElement('canvas');
|
|
98
|
+
const { height, width } = image;
|
|
99
|
+
let updatedHeight = height;
|
|
100
|
+
let updatedWidth = width;
|
|
101
|
+
if (width > height) {
|
|
102
|
+
if (width > maxSize) {
|
|
103
|
+
updatedHeight *= maxSize / width;
|
|
104
|
+
updatedWidth = maxSize;
|
|
105
|
+
}
|
|
106
|
+
} else if (height > maxSize) {
|
|
107
|
+
updatedWidth *= maxSize / height;
|
|
108
|
+
updatedHeight = maxSize;
|
|
109
|
+
}
|
|
110
|
+
const context = canvas.getContext('2d');
|
|
111
|
+
if (!context) {
|
|
112
|
+
reject(new Error('Unable to prepare image upload.'));
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const renderImage = (width, height)=>{
|
|
116
|
+
canvas.width = width;
|
|
117
|
+
canvas.height = height;
|
|
118
|
+
context.clearRect(0, 0, width, height);
|
|
119
|
+
context.drawImage(image, 0, 0, width, height);
|
|
120
|
+
};
|
|
121
|
+
let currentWidth = Math.max(1, Math.round(updatedWidth));
|
|
122
|
+
let currentHeight = Math.max(1, Math.round(updatedHeight));
|
|
123
|
+
let quality = 0.82;
|
|
124
|
+
renderImage(currentWidth, currentHeight);
|
|
125
|
+
let dataUrl = canvas.toDataURL('image/jpeg', quality);
|
|
126
|
+
let byteSize = getUploadPayloadByteSize(dataUrl);
|
|
127
|
+
while(byteSize > maxBytes && quality > 0.45){
|
|
128
|
+
quality = Math.max(0.45, Number((quality - 0.08).toFixed(2)));
|
|
129
|
+
dataUrl = canvas.toDataURL('image/jpeg', quality);
|
|
130
|
+
byteSize = getUploadPayloadByteSize(dataUrl);
|
|
131
|
+
}
|
|
132
|
+
while(byteSize > maxBytes && (currentWidth > 320 || currentHeight > 320)){
|
|
133
|
+
currentWidth = Math.max(320, Math.round(currentWidth * 0.85));
|
|
134
|
+
currentHeight = Math.max(320, Math.round(currentHeight * 0.85));
|
|
135
|
+
quality = 0.78;
|
|
136
|
+
renderImage(currentWidth, currentHeight);
|
|
137
|
+
dataUrl = canvas.toDataURL('image/jpeg', quality);
|
|
138
|
+
byteSize = getUploadPayloadByteSize(dataUrl);
|
|
139
|
+
while(byteSize > maxBytes && quality > 0.45){
|
|
140
|
+
quality = Math.max(0.45, Number((quality - 0.08).toFixed(2)));
|
|
141
|
+
dataUrl = canvas.toDataURL('image/jpeg', quality);
|
|
142
|
+
byteSize = getUploadPayloadByteSize(dataUrl);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
resolve(dataUrl);
|
|
146
|
+
};
|
|
147
|
+
const originalBase64 = reader.result;
|
|
148
|
+
image.src = originalBase64;
|
|
149
|
+
};
|
|
150
|
+
reader.onerror = (event)=>{
|
|
151
|
+
reject(event);
|
|
152
|
+
};
|
|
153
|
+
reader.readAsDataURL(file);
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvZmlsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBnZXRVcGxvYWRQYXlsb2FkQnl0ZVNpemUgPSAoZGF0YVVybDogc3RyaW5nKTogbnVtYmVyID0+IGRhdGFVcmwubGVuZ3RoO1xuXG5jb25zdCBnZXRGaWxlTmFtZVdpdGhvdXRFeHRlbnNpb24gPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IChcbiAgbmFtZS5zcGxpdCgnLicpLnNsaWNlKDAsIC0xKS5qb2luKCcuJykgfHwgbmFtZVxuKTtcblxuY29uc3QgY3JlYXRlSW1hZ2VDYW52YXMgPSAoZmlsZTogRmlsZSwgbWF4U2l6ZTogbnVtYmVyKTogUHJvbWlzZTx7XG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG59PiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gIGNvbnN0IG9iamVjdFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XG5cbiAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcblxuICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjb25zdCB7aGVpZ2h0LCB3aWR0aH0gPSBpbWFnZTtcbiAgICBsZXQgdXBkYXRlZEhlaWdodDogbnVtYmVyID0gaGVpZ2h0O1xuICAgIGxldCB1cGRhdGVkV2lkdGg6IG51bWJlciA9IHdpZHRoO1xuXG4gICAgaWYod2lkdGggPiBoZWlnaHQpIHtcbiAgICAgIGlmKHdpZHRoID4gbWF4U2l6ZSkge1xuICAgICAgICB1cGRhdGVkSGVpZ2h0ICo9IG1heFNpemUgLyB3aWR0aDtcbiAgICAgICAgdXBkYXRlZFdpZHRoID0gbWF4U2l6ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYoaGVpZ2h0ID4gbWF4U2l6ZSkge1xuICAgICAgdXBkYXRlZFdpZHRoICo9IG1heFNpemUgLyBoZWlnaHQ7XG4gICAgICB1cGRhdGVkSGVpZ2h0ID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICBpZighY29udGV4dCkge1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcignVW5hYmxlIHRvIHByZXBhcmUgaW1hZ2UgdXBsb2FkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXNvbHZlKHtcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBoZWlnaHQ6IE1hdGgubWF4KDEsIE1hdGgucm91bmQodXBkYXRlZEhlaWdodCkpLFxuICAgICAgd2lkdGg6IE1hdGgubWF4KDEsIE1hdGgucm91bmQodXBkYXRlZFdpZHRoKSlcbiAgICB9KTtcbiAgfTtcblxuICBpbWFnZS5vbmVycm9yID0gKCkgPT4ge1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICByZWplY3QobmV3IEVycm9yKCdVbmFibGUgdG8gcHJlcGFyZSBpbWFnZSB1cGxvYWQuJykpO1xuICB9O1xuXG4gIGltYWdlLnNyYyA9IG9iamVjdFVybDtcbn0pO1xuXG5jb25zdCByZW5kZXJJbWFnZUZpbGUgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgcXVhbGl0eTogbnVtYmVyLFxuICBuYW1lOiBzdHJpbmdcbik6IFByb21pc2U8RmlsZT4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XG4gICAgaWYoIWJsb2IpIHtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VuYWJsZSB0byBwcmVwYXJlIGltYWdlIHVwbG9hZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVzb2x2ZShuZXcgRmlsZShbYmxvYl0sIGAke2dldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbihuYW1lKX0uanBnYCwge3R5cGU6ICdpbWFnZS9qcGVnJ30pKTtcbiAgfSwgJ2ltYWdlL2pwZWcnLCBxdWFsaXR5KTtcbn0pO1xuXG5leHBvcnQgY29uc3QgY29udmVydEZpbGVUb1VwbG9hZEZpbGUgPSBhc3luYyAoXG4gIGZpbGU6IEZpbGUsXG4gIG1heFNpemU6IG51bWJlcixcbiAgbWF4Qnl0ZXM6IG51bWJlciA9IDkwMCAqIDEwMjRcbik6IFByb21pc2U8RmlsZT4gPT4ge1xuICBpZighZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gIGNvbnN0IG9iamVjdFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICBpbWFnZS5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignVW5hYmxlIHRvIHByZXBhcmUgaW1hZ2UgdXBsb2FkLicpKTtcbiAgICAgIGltYWdlLnNyYyA9IG9iamVjdFVybDtcbiAgICB9KTtcblxuICAgIGNvbnN0IHtjYW52YXMsIGNvbnRleHQsIGhlaWdodCwgd2lkdGh9ID0gYXdhaXQgY3JlYXRlSW1hZ2VDYW52YXMoZmlsZSwgbWF4U2l6ZSk7XG4gICAgbGV0IGN1cnJlbnRXaWR0aCA9IHdpZHRoO1xuICAgIGxldCBjdXJyZW50SGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGxldCBxdWFsaXR5ID0gMC44MjtcbiAgICBsZXQgdXBsb2FkRmlsZSA9IGF3YWl0IHJlbmRlckltYWdlRmlsZShjYW52YXMsIGNvbnRleHQsIGltYWdlLCBjdXJyZW50V2lkdGgsIGN1cnJlbnRIZWlnaHQsIHF1YWxpdHksIGZpbGUubmFtZSk7XG5cbiAgICB3aGlsZSh1cGxvYWRGaWxlLnNpemUgPiBtYXhCeXRlcyAmJiBxdWFsaXR5ID4gMC40NSkge1xuICAgICAgcXVhbGl0eSA9IE1hdGgubWF4KDAuNDUsIE51bWJlcigocXVhbGl0eSAtIDAuMDgpLnRvRml4ZWQoMikpKTtcbiAgICAgIHVwbG9hZEZpbGUgPSBhd2FpdCByZW5kZXJJbWFnZUZpbGUoY2FudmFzLCBjb250ZXh0LCBpbWFnZSwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCBxdWFsaXR5LCBmaWxlLm5hbWUpO1xuICAgIH1cblxuICAgIHdoaWxlKHVwbG9hZEZpbGUuc2l6ZSA+IG1heEJ5dGVzICYmIChjdXJyZW50V2lkdGggPiAzMjAgfHwgY3VycmVudEhlaWdodCA+IDMyMCkpIHtcbiAgICAgIGN1cnJlbnRXaWR0aCA9IE1hdGgubWF4KDMyMCwgTWF0aC5yb3VuZChjdXJyZW50V2lkdGggKiAwLjg1KSk7XG4gICAgICBjdXJyZW50SGVpZ2h0ID0gTWF0aC5tYXgoMzIwLCBNYXRoLnJvdW5kKGN1cnJlbnRIZWlnaHQgKiAwLjg1KSk7XG4gICAgICBxdWFsaXR5ID0gMC43ODtcbiAgICAgIHVwbG9hZEZpbGUgPSBhd2FpdCByZW5kZXJJbWFnZUZpbGUoY2FudmFzLCBjb250ZXh0LCBpbWFnZSwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCBxdWFsaXR5LCBmaWxlLm5hbWUpO1xuXG4gICAgICB3aGlsZSh1cGxvYWRGaWxlLnNpemUgPiBtYXhCeXRlcyAmJiBxdWFsaXR5ID4gMC40NSkge1xuICAgICAgICBxdWFsaXR5ID0gTWF0aC5tYXgoMC40NSwgTnVtYmVyKChxdWFsaXR5IC0gMC4wOCkudG9GaXhlZCgyKSkpO1xuICAgICAgICB1cGxvYWRGaWxlID0gYXdhaXQgcmVuZGVySW1hZ2VGaWxlKGNhbnZhcywgY29udGV4dCwgaW1hZ2UsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCwgcXVhbGl0eSwgZmlsZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBsb2FkRmlsZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0RmlsZVRvQmFzZTY0ID0gKFxuICBmaWxlOiBGaWxlLFxuICBtYXhTaXplOiBudW1iZXIsXG4gIG1heEJ5dGVzOiBudW1iZXIgPSA5MDAgKiAxMDI0XG4pOiBQcm9taXNlPHN0cmluZz4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3Qge2hlaWdodCwgd2lkdGh9ID0gaW1hZ2U7XG4gICAgICAgIGxldCB1cGRhdGVkSGVpZ2h0OiBudW1iZXIgPSBoZWlnaHQ7XG4gICAgICAgIGxldCB1cGRhdGVkV2lkdGg6IG51bWJlciA9IHdpZHRoO1xuXG4gICAgICAgIGlmKHdpZHRoID4gaGVpZ2h0KSB7XG4gICAgICAgICAgaWYod2lkdGggPiBtYXhTaXplKSB7XG4gICAgICAgICAgICB1cGRhdGVkSGVpZ2h0ICo9IG1heFNpemUgLyB3aWR0aDtcbiAgICAgICAgICAgIHVwZGF0ZWRXaWR0aCA9IG1heFNpemU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYoaGVpZ2h0ID4gbWF4U2l6ZSkge1xuICAgICAgICAgIHVwZGF0ZWRXaWR0aCAqPSBtYXhTaXplIC8gaGVpZ2h0O1xuICAgICAgICAgIHVwZGF0ZWRIZWlnaHQgPSBtYXhTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgIGlmKCFjb250ZXh0KSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVW5hYmxlIHRvIHByZXBhcmUgaW1hZ2UgdXBsb2FkLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW5kZXJJbWFnZSA9ICh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBjdXJyZW50V2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHVwZGF0ZWRXaWR0aCkpO1xuICAgICAgICBsZXQgY3VycmVudEhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodXBkYXRlZEhlaWdodCkpO1xuICAgICAgICBsZXQgcXVhbGl0eSA9IDAuODI7XG5cbiAgICAgICAgcmVuZGVySW1hZ2UoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0KTtcblxuICAgICAgICBsZXQgZGF0YVVybDogc3RyaW5nID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHF1YWxpdHkpO1xuICAgICAgICBsZXQgYnl0ZVNpemUgPSBnZXRVcGxvYWRQYXlsb2FkQnl0ZVNpemUoZGF0YVVybCk7XG5cbiAgICAgICAgd2hpbGUoYnl0ZVNpemUgPiBtYXhCeXRlcyAmJiBxdWFsaXR5ID4gMC40NSkge1xuICAgICAgICAgIHF1YWxpdHkgPSBNYXRoLm1heCgwLjQ1LCBOdW1iZXIoKHF1YWxpdHkgLSAwLjA4KS50b0ZpeGVkKDIpKSk7XG4gICAgICAgICAgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBxdWFsaXR5KTtcbiAgICAgICAgICBieXRlU2l6ZSA9IGdldFVwbG9hZFBheWxvYWRCeXRlU2l6ZShkYXRhVXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlKGJ5dGVTaXplID4gbWF4Qnl0ZXMgJiYgKGN1cnJlbnRXaWR0aCA+IDMyMCB8fCBjdXJyZW50SGVpZ2h0ID4gMzIwKSkge1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IE1hdGgubWF4KDMyMCwgTWF0aC5yb3VuZChjdXJyZW50V2lkdGggKiAwLjg1KSk7XG4gICAgICAgICAgY3VycmVudEhlaWdodCA9IE1hdGgubWF4KDMyMCwgTWF0aC5yb3VuZChjdXJyZW50SGVpZ2h0ICogMC44NSkpO1xuICAgICAgICAgIHF1YWxpdHkgPSAwLjc4O1xuICAgICAgICAgIHJlbmRlckltYWdlKGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCk7XG4gICAgICAgICAgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBxdWFsaXR5KTtcbiAgICAgICAgICBieXRlU2l6ZSA9IGdldFVwbG9hZFBheWxvYWRCeXRlU2l6ZShkYXRhVXJsKTtcblxuICAgICAgICAgIHdoaWxlKGJ5dGVTaXplID4gbWF4Qnl0ZXMgJiYgcXVhbGl0eSA+IDAuNDUpIHtcbiAgICAgICAgICAgIHF1YWxpdHkgPSBNYXRoLm1heCgwLjQ1LCBOdW1iZXIoKHF1YWxpdHkgLSAwLjA4KS50b0ZpeGVkKDIpKSk7XG4gICAgICAgICAgICBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHF1YWxpdHkpO1xuICAgICAgICAgICAgYnl0ZVNpemUgPSBnZXRVcGxvYWRQYXlsb2FkQnl0ZVNpemUoZGF0YVVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShkYXRhVXJsKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsQmFzZTY0OiBzdHJpbmcgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcbiAgICAgIGltYWdlLnNyYyA9IG9yaWdpbmFsQmFzZTY0O1xuICAgIH07XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgIHJlamVjdChldmVudCk7XG4gICAgfTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgfSk7XG4iXSwibmFtZXMiOlsiZ2V0VXBsb2FkUGF5bG9hZEJ5dGVTaXplIiwiZGF0YVVybCIsImxlbmd0aCIsImdldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbiIsIm5hbWUiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsImNyZWF0ZUltYWdlQ2FudmFzIiwiZmlsZSIsIm1heFNpemUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImltYWdlIiwiSW1hZ2UiLCJvYmplY3RVcmwiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJvbmxvYWQiLCJyZXZva2VPYmplY3RVUkwiLCJjYW52YXMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJoZWlnaHQiLCJ3aWR0aCIsInVwZGF0ZWRIZWlnaHQiLCJ1cGRhdGVkV2lkdGgiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsIkVycm9yIiwiTWF0aCIsIm1heCIsInJvdW5kIiwib25lcnJvciIsInNyYyIsInJlbmRlckltYWdlRmlsZSIsInF1YWxpdHkiLCJjbGVhclJlY3QiLCJkcmF3SW1hZ2UiLCJ0b0Jsb2IiLCJibG9iIiwiRmlsZSIsInR5cGUiLCJjb252ZXJ0RmlsZVRvVXBsb2FkRmlsZSIsIm1heEJ5dGVzIiwic3RhcnRzV2l0aCIsImN1cnJlbnRXaWR0aCIsImN1cnJlbnRIZWlnaHQiLCJ1cGxvYWRGaWxlIiwic2l6ZSIsIk51bWJlciIsInRvRml4ZWQiLCJjb252ZXJ0RmlsZVRvQmFzZTY0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlbmRlckltYWdlIiwidG9EYXRhVVJMIiwiYnl0ZVNpemUiLCJvcmlnaW5hbEJhc2U2NCIsInJlc3VsdCIsImV2ZW50IiwicmVhZEFzRGF0YVVSTCJdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTUEsMkJBQTJCLENBQUNDLFVBQTRCQSxRQUFRQyxNQUFNO0FBRTVFLE1BQU1DLDhCQUE4QixDQUFDQyxPQUNuQ0EsS0FBS0MsS0FBSyxDQUFDLEtBQUtDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBR0MsSUFBSSxDQUFDLFFBQVFIO0FBRzVDLE1BQU1JLG9CQUFvQixDQUFDQyxNQUFZQyxVQUtqQyxJQUFJQyxRQUFRLENBQUNDLFNBQVNDO1FBQzFCLE1BQU1DLFFBQVEsSUFBSUM7UUFDbEIsTUFBTUMsWUFBWUMsSUFBSUMsZUFBZSxDQUFDVDtRQUV0Q0ssTUFBTUssTUFBTSxHQUFHO1lBQ2JGLElBQUlHLGVBQWUsQ0FBQ0o7WUFFcEIsTUFBTUssU0FBNEJDLFNBQVNDLGFBQWEsQ0FBQztZQUN6RCxNQUFNLEVBQUNDLE1BQU0sRUFBRUMsS0FBSyxFQUFDLEdBQUdYO1lBQ3hCLElBQUlZLGdCQUF3QkY7WUFDNUIsSUFBSUcsZUFBdUJGO1lBRTNC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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ComplexTranslations, SimpleTranslations } from '../index.js';
|
|
2
|
+
export declare const buildI18nResources: (translations: ComplexTranslations) => Record<string, Record<string, Record<string, string>>>;
|
|
3
|
+
export declare const buildSimpleI18nResources: (translations: SimpleTranslations) => Record<string, Record<string, Record<string, string>>>;
|
|
4
|
+
export declare const initI18n: (translations: SimpleTranslations | ComplexTranslations) => void;
|
|
5
|
+
export declare const updateI18nResources: (translations: ComplexTranslations) => void;
|
|
6
|
+
export declare const i18n: (key: string, params?: Record<string, any>, lng?: string, ns?: string) => string;
|
|
7
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAK3E,eAAO,MAAM,kBAAkB,GAC7B,cAAc,mBAAmB,2DAmBlC,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,cAAc,kBAAkB,2DAmBjC,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,cAAc,kBAAkB,GAAG,mBAAmB,SAoCvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,cAAc,mBAAmB,SAelC,CAAC;AAEF,eAAO,MAAM,IAAI,GACf,KAAK,MAAM,EACX,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,MAAM,EACZ,KAAK,MAAM,KACV,MAUF,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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 { init, t } from 'i18next';
|
|
5
|
+
let initialized = false;
|
|
6
|
+
let currentResources = {};
|
|
7
|
+
export const buildI18nResources = (translations)=>{
|
|
8
|
+
const resources = {};
|
|
9
|
+
for(const key in translations){
|
|
10
|
+
const { locale, value, namespace } = translations[key];
|
|
11
|
+
const lang = locale || 'en';
|
|
12
|
+
const ns = namespace || 'translations';
|
|
13
|
+
if (!resources[lang]) {
|
|
14
|
+
resources[lang] = {};
|
|
15
|
+
}
|
|
16
|
+
if (!resources[lang][ns]) {
|
|
17
|
+
resources[lang][ns] = {};
|
|
18
|
+
}
|
|
19
|
+
resources[lang][ns][key] = value;
|
|
20
|
+
}
|
|
21
|
+
return resources;
|
|
22
|
+
};
|
|
23
|
+
export const buildSimpleI18nResources = (translations)=>{
|
|
24
|
+
const resources = {};
|
|
25
|
+
for(const key in translations){
|
|
26
|
+
const value = translations[key];
|
|
27
|
+
const lang = 'en'; // Default to English
|
|
28
|
+
const ns = 'translations'; // Default namespace
|
|
29
|
+
if (!resources[lang]) {
|
|
30
|
+
resources[lang] = {};
|
|
31
|
+
}
|
|
32
|
+
if (!resources[lang][ns]) {
|
|
33
|
+
resources[lang][ns] = {};
|
|
34
|
+
}
|
|
35
|
+
resources[lang][ns][key] = value;
|
|
36
|
+
}
|
|
37
|
+
return resources;
|
|
38
|
+
};
|
|
39
|
+
export const initI18n = (translations)=>{
|
|
40
|
+
if (initialized) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
let resources = {};
|
|
44
|
+
// Check if it's a simple key-value format or complex format
|
|
45
|
+
if (translations && Object.keys(translations).length > 0) {
|
|
46
|
+
const firstKey = Object.keys(translations)[0];
|
|
47
|
+
const firstValue = translations[firstKey];
|
|
48
|
+
if (typeof firstValue === 'string') {
|
|
49
|
+
// Simple key-value format
|
|
50
|
+
resources = buildSimpleI18nResources(translations);
|
|
51
|
+
} else {
|
|
52
|
+
// Complex format with locale and namespace
|
|
53
|
+
resources = buildI18nResources(translations);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
currentResources = resources;
|
|
57
|
+
const defaultLang = Object.keys(resources)[0] || 'en';
|
|
58
|
+
const namespaces = Object.keys(resources[defaultLang] || {});
|
|
59
|
+
init({
|
|
60
|
+
defaultNS: 'translations',
|
|
61
|
+
fallbackLng: defaultLang,
|
|
62
|
+
interpolation: {
|
|
63
|
+
escapeValue: false
|
|
64
|
+
},
|
|
65
|
+
lng: defaultLang,
|
|
66
|
+
ns: namespaces,
|
|
67
|
+
resources
|
|
68
|
+
});
|
|
69
|
+
initialized = true;
|
|
70
|
+
};
|
|
71
|
+
export const updateI18nResources = (translations)=>{
|
|
72
|
+
const newResources = buildI18nResources(translations);
|
|
73
|
+
Object.entries(newResources).forEach(([lng, namespaces])=>{
|
|
74
|
+
Object.entries(namespaces).forEach(([ns, keys])=>{
|
|
75
|
+
if (!currentResources[lng]) {
|
|
76
|
+
currentResources[lng] = {};
|
|
77
|
+
}
|
|
78
|
+
if (!currentResources[lng][ns]) {
|
|
79
|
+
currentResources[lng][ns] = {};
|
|
80
|
+
}
|
|
81
|
+
Object.assign(currentResources[lng][ns], keys);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
export const i18n = (key, params, lng, ns)=>{
|
|
86
|
+
if (!initialized) {
|
|
87
|
+
return key;
|
|
88
|
+
}
|
|
89
|
+
return t(key, {
|
|
90
|
+
...params || {},
|
|
91
|
+
lng,
|
|
92
|
+
ns: ns || 'translations'
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvaTE4bi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHsgaW5pdCwgdCB9IGZyb20gJ2kxOG5leHQnO1xuXG4vLyBJbXBvcnQgdHlwZXMgZnJvbSB0aGUgbWFpbiBpbmRleFxuaW1wb3J0IHR5cGUgeyBDb21wbGV4VHJhbnNsYXRpb25zLCBTaW1wbGVUcmFuc2xhdGlvbnMgfSBmcm9tICcuLi9pbmRleC5qcyc7XG5cbmxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xubGV0IGN1cnJlbnRSZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PiA9IHt9O1xuXG5leHBvcnQgY29uc3QgYnVpbGRJMThuUmVzb3VyY2VzID0gKFxuICB0cmFuc2xhdGlvbnM6IENvbXBsZXhUcmFuc2xhdGlvbnNcbikgPT4ge1xuICBjb25zdCByZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PiA9IHt9O1xuXG4gIGZvcihjb25zdCBrZXkgaW4gdHJhbnNsYXRpb25zKSB7XG4gICAgY29uc3Qge2xvY2FsZSwgdmFsdWUsIG5hbWVzcGFjZX0gPSB0cmFuc2xhdGlvbnNba2V5XTtcbiAgICBjb25zdCBsYW5nID0gbG9jYWxlIHx8ICdlbic7XG4gICAgY29uc3QgbnMgPSBuYW1lc3BhY2UgfHwgJ3RyYW5zbGF0aW9ucyc7XG5cbiAgICBpZighcmVzb3VyY2VzW2xhbmddKSB7XG4gICAgICByZXNvdXJjZXNbbGFuZ10gPSB7fTtcbiAgICB9XG4gICAgaWYoIXJlc291cmNlc1tsYW5nXVtuc10pIHtcbiAgICAgIHJlc291cmNlc1tsYW5nXVtuc10gPSB7fTtcbiAgICB9XG4gICAgcmVzb3VyY2VzW2xhbmddW25zXVtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzb3VyY2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkU2ltcGxlSTE4blJlc291cmNlcyA9IChcbiAgdHJhbnNsYXRpb25zOiBTaW1wbGVUcmFuc2xhdGlvbnNcbikgPT4ge1xuICBjb25zdCByZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PiA9IHt9O1xuXG4gIGZvcihjb25zdCBrZXkgaW4gdHJhbnNsYXRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0cmFuc2xhdGlvbnNba2V5XTtcbiAgICBjb25zdCBsYW5nID0gJ2VuJzsgLy8gRGVmYXVsdCB0byBFbmdsaXNoXG4gICAgY29uc3QgbnMgPSAndHJhbnNsYXRpb25zJzsgLy8gRGVmYXVsdCBuYW1lc3BhY2VcblxuICAgIGlmKCFyZXNvdXJjZXNbbGFuZ10pIHtcbiAgICAgIHJlc291cmNlc1tsYW5nXSA9IHt9O1xuICAgIH1cbiAgICBpZighcmVzb3VyY2VzW2xhbmddW25zXSkge1xuICAgICAgcmVzb3VyY2VzW2xhbmddW25zXSA9IHt9O1xuICAgIH1cbiAgICByZXNvdXJjZXNbbGFuZ11bbnNdW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXNvdXJjZXM7XG59O1xuXG5leHBvcnQgY29uc3QgaW5pdEkxOG4gPSAoXG4gIHRyYW5zbGF0aW9uczogU2ltcGxlVHJhbnNsYXRpb25zIHwgQ29tcGxleFRyYW5zbGF0aW9uc1xuKSA9PiB7XG4gIGlmKGluaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHJlc291cmNlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4+ID0ge307XG5cbiAgLy8gQ2hlY2sgaWYgaXQncyBhIHNpbXBsZSBrZXktdmFsdWUgZm9ybWF0IG9yIGNvbXBsZXggZm9ybWF0XG4gIGlmICh0cmFuc2xhdGlvbnMgJiYgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmlyc3RLZXkgPSBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpWzBdO1xuICAgIGNvbnN0IGZpcnN0VmFsdWUgPSB0cmFuc2xhdGlvbnNbZmlyc3RLZXldO1xuXG4gICAgaWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gU2ltcGxlIGtleS12YWx1ZSBmb3JtYXRcbiAgICAgIHJlc291cmNlcyA9IGJ1aWxkU2ltcGxlSTE4blJlc291cmNlcyh0cmFuc2xhdGlvbnMgYXMgU2ltcGxlVHJhbnNsYXRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tcGxleCBmb3JtYXQgd2l0aCBsb2NhbGUgYW5kIG5hbWVzcGFjZVxuICAgICAgcmVzb3VyY2VzID0gYnVpbGRJMThuUmVzb3VyY2VzKHRyYW5zbGF0aW9ucyBhcyBDb21wbGV4VHJhbnNsYXRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjdXJyZW50UmVzb3VyY2VzID0gcmVzb3VyY2VzO1xuICBjb25zdCBkZWZhdWx0TGFuZyA9IE9iamVjdC5rZXlzKHJlc291cmNlcylbMF0gfHwgJ2VuJztcbiAgY29uc3QgbmFtZXNwYWNlcyA9IE9iamVjdC5rZXlzKHJlc291cmNlc1tkZWZhdWx0TGFuZ10gfHwge30pO1xuXG4gIGluaXQoe1xuICAgIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9ucycsXG4gICAgZmFsbGJhY2tMbmc6IGRlZmF1bHRMYW5nLFxuICAgIGludGVycG9sYXRpb246IHtlc2NhcGVWYWx1ZTogZmFsc2V9LFxuICAgIGxuZzogZGVmYXVsdExhbmcsXG4gICAgbnM6IG5hbWVzcGFjZXMsXG4gICAgcmVzb3VyY2VzXG4gIH0pO1xuXG4gIGluaXRpYWxpemVkID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVJMThuUmVzb3VyY2VzID0gKFxuICB0cmFuc2xhdGlvbnM6IENvbXBsZXhUcmFuc2xhdGlvbnNcbikgPT4ge1xuICBjb25zdCBuZXdSZXNvdXJjZXMgPSBidWlsZEkxOG5SZXNvdXJjZXModHJhbnNsYXRpb25zKTtcblxuICBPYmplY3QuZW50cmllcyhuZXdSZXNvdXJjZXMpLmZvckVhY2goKFtsbmcsIG5hbWVzcGFjZXNdKSA9PiB7XG4gICAgT2JqZWN0LmVudHJpZXMobmFtZXNwYWNlcykuZm9yRWFjaCgoW25zLCBrZXlzXSkgPT4ge1xuICAgICAgaWYoIWN1cnJlbnRSZXNvdXJjZXNbbG5nXSkge1xuICAgICAgICBjdXJyZW50UmVzb3VyY2VzW2xuZ10gPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmKCFjdXJyZW50UmVzb3VyY2VzW2xuZ11bbnNdKSB7XG4gICAgICAgIGN1cnJlbnRSZXNvdXJjZXNbbG5nXVtuc10gPSB7fTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudFJlc291cmNlc1tsbmddW25zXSwga2V5cyk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGkxOG4gPSAoXG4gIGtleTogc3RyaW5nLFxuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBsbmc/OiBzdHJpbmcsXG4gIG5zPzogc3RyaW5nXG4pOiBzdHJpbmcgPT4ge1xuICBpZighaW5pdGlhbGl6ZWQpIHtcbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgcmV0dXJuIHQoa2V5LCB7XG4gICAgLi4uKHBhcmFtcyB8fCB7fSksXG4gICAgbG5nLFxuICAgIG5zOiBucyB8fCAndHJhbnNsYXRpb25zJ1xuICB9KTtcbn07Il0sIm5hbWVzIjpbImluaXQiLCJ0IiwiaW5pdGlhbGl6ZWQiLCJjdXJyZW50UmVzb3VyY2VzIiwiYnVpbGRJMThuUmVzb3VyY2VzIiwidHJhbnNsYXRpb25zIiwicmVzb3VyY2VzIiwia2V5IiwibG9jYWxlIiwidmFsdWUiLCJuYW1lc3BhY2UiLCJsYW5nIiwibnMiLCJidWlsZFNpbXBsZUkxOG5SZXNvdXJjZXMiLCJpbml0STE4biIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJmaXJzdEtleSIsImZpcnN0VmFsdWUiLCJkZWZhdWx0TGFuZyIsIm5hbWVzcGFjZXMiLCJkZWZhdWx0TlMiLCJmYWxsYmFja0xuZyIsImludGVycG9sYXRpb24iLCJlc2NhcGVWYWx1ZSIsImxuZyIsInVwZGF0ZUkxOG5SZXNvdXJjZXMiLCJuZXdSZXNvdXJjZXMiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImFzc2lnbiIsImkxOG4iLCJwYXJhbXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVNBLElBQUksRUFBRUMsQ0FBQyxRQUFRLFVBQVU7QUFLbEMsSUFBSUMsY0FBYztBQUNsQixJQUFJQyxtQkFBMkUsQ0FBQztBQUVoRixPQUFPLE1BQU1DLHFCQUFxQixDQUNoQ0M7SUFFQSxNQUFNQyxZQUFvRSxDQUFDO0lBRTNFLElBQUksTUFBTUMsT0FBT0YsYUFBYztRQUM3QixNQUFNLEVBQUNHLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxTQUFTLEVBQUMsR0FBR0wsWUFBWSxDQUFDRSxJQUFJO1FBQ3BELE1BQU1JLE9BQU9ILFVBQVU7UUFDdkIsTUFBTUksS0FBS0YsYUFBYTtRQUV4QixJQUFHLENBQUNKLFNBQVMsQ0FBQ0ssS0FBSyxFQUFFO1lBQ25CTCxTQUFTLENBQUNLLEtBQUssR0FBRyxDQUFDO1FBQ3JCO1FBQ0EsSUFBRyxDQUFDTCxTQUFTLENBQUNLLEtBQUssQ0FBQ0MsR0FBRyxFQUFFO1lBQ3ZCTixTQUFTLENBQUNLLEtBQUssQ0FBQ0MsR0FBRyxHQUFHLENBQUM7UUFDekI7UUFDQU4sU0FBUyxDQUFDSyxLQUFLLENBQUNDLEdBQUcsQ0FBQ0wsSUFBSSxHQUFHRTtJQUM3QjtJQUVBLE9BQU9IO0FBQ1QsRUFBRTtBQUVGLE9BQU8s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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/
|
|
5
|
+
export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, refreshSession, uploadImage, type ApiResultsType, type ReaktorDbCollection, type SessionType } from './api.js';
|
|
6
|
+
export { createAction, createActions, createAllActions, type ActionOptions, type ActionReturnType, type ActionType, type ActionTypes } from './actionFactory.js';
|
|
7
|
+
export { createBaseActions, type BaseActionOptions } from './baseActionFactory.js';
|
|
8
|
+
export { createValidatorFactory, createValidatorManager, type BaseAdapterOptions } from './validatorFactory.js';
|
|
9
|
+
export { MetropolisContext, MetropolisProvider } from './MetropolisProvider.js';
|
|
10
|
+
export { PermissionGuard, PermissionLevel, usePermissions, type Permission, type PermissionGuardProps, type UsePermissionsReturn } from './permissionUtils.js';
|
|
11
|
+
export { useMetropolis } from './useMetropolis.js';
|
|
12
|
+
export { useConversationTyping, type ConversationTypingOptions, type UseConversationTypingOptions } from './useConversationTyping.js';
|
|
13
|
+
export { useTranslations } from './useTranslations.js';
|
|
14
|
+
export * from './app.js';
|
|
15
|
+
export * from './dateUtils.js';
|
|
16
|
+
export * from './file.js';
|
|
17
|
+
export * from './i18n.js';
|
|
18
|
+
export * from './location.js';
|
|
19
|
+
export * from './session.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,qBAAqB,EAAE,KAAK,yBAAyB,EAAE,KAAK,4BAA4B,EAAC,MAAM,4BAA4B,CAAC;AACpI,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAGrD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
|