@nlabs/reaktor 0.10.5 → 0.10.6
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/lib/actions/apps.d.ts +1 -0
- package/lib/actions/apps.d.ts.map +1 -0
- package/lib/actions/apps.js +221 -0
- package/lib/actions/connections.d.ts +1 -0
- package/lib/actions/connections.d.ts.map +1 -0
- package/lib/actions/connections.js +62 -0
- package/lib/actions/content.d.ts +1 -0
- package/lib/actions/content.d.ts.map +1 -0
- package/lib/actions/content.js +240 -0
- package/lib/actions/conversations.d.ts +1 -0
- package/lib/actions/conversations.d.ts.map +1 -0
- package/lib/actions/conversations.js +335 -0
- package/lib/actions/dynamodb.d.ts +1 -0
- package/lib/actions/dynamodb.d.ts.map +1 -0
- package/lib/actions/dynamodb.js +119 -0
- package/lib/actions/email.d.ts +1 -0
- package/lib/actions/email.d.ts.map +1 -0
- package/lib/actions/email.js +56 -0
- package/lib/actions/files.d.ts +1 -0
- package/lib/actions/files.d.ts.map +1 -0
- package/lib/actions/files.js +226 -0
- package/lib/actions/groups.d.ts +1 -0
- package/lib/actions/groups.d.ts.map +1 -0
- package/lib/actions/groups.js +267 -0
- package/lib/actions/images.d.ts +1 -0
- package/lib/actions/images.d.ts.map +1 -0
- package/lib/actions/images.js +723 -0
- package/lib/actions/index.d.ts +1 -0
- package/lib/actions/index.d.ts.map +1 -0
- package/lib/actions/index.js +29 -0
- package/lib/actions/ios.d.ts +1 -0
- package/lib/actions/ios.d.ts.map +1 -0
- package/lib/actions/ios.js +230 -0
- package/lib/actions/locations.d.ts +1 -0
- package/lib/actions/locations.d.ts.map +1 -0
- package/lib/actions/locations.js +111 -0
- package/lib/actions/messages.d.ts +1 -0
- package/lib/actions/messages.d.ts.map +1 -0
- package/lib/actions/messages.js +167 -0
- package/lib/actions/notifications.d.ts +3 -2
- package/lib/actions/notifications.d.ts.map +1 -0
- package/lib/actions/notifications.js +37 -0
- package/lib/actions/payments.d.ts +1 -0
- package/lib/actions/payments.d.ts.map +1 -0
- package/lib/actions/payments.js +449 -0
- package/lib/actions/posts.d.ts +1 -0
- package/lib/actions/posts.d.ts.map +1 -0
- package/lib/actions/posts.js +608 -0
- package/lib/actions/profiles.d.ts +1 -0
- package/lib/actions/profiles.d.ts.map +1 -0
- package/lib/actions/profiles.js +58 -0
- package/lib/actions/reactions.d.ts +1 -0
- package/lib/actions/reactions.d.ts.map +1 -0
- package/lib/actions/reactions.js +286 -0
- package/lib/actions/s3.d.ts +1 -0
- package/lib/actions/s3.d.ts.map +1 -0
- package/lib/actions/s3.js +102 -0
- package/lib/actions/search.d.ts +1 -0
- package/lib/actions/search.d.ts.map +1 -0
- package/lib/actions/search.js +81 -0
- package/lib/actions/sms.d.ts +1 -0
- package/lib/actions/sms.d.ts.map +1 -0
- package/lib/actions/sms.js +52 -0
- package/lib/actions/statistics.d.ts +1 -0
- package/lib/actions/statistics.d.ts.map +1 -0
- package/lib/actions/statistics.js +43 -0
- package/lib/actions/subscriptions.d.ts +1 -0
- package/lib/actions/subscriptions.d.ts.map +1 -0
- package/lib/actions/subscriptions.js +202 -0
- package/lib/actions/tags.d.ts +1 -0
- package/lib/actions/tags.d.ts.map +1 -0
- package/lib/actions/tags.js +263 -0
- package/lib/actions/users.d.ts +1 -0
- package/lib/actions/users.d.ts.map +1 -0
- package/lib/actions/users.js +802 -0
- package/lib/actions/videos.d.ts +1 -0
- package/lib/actions/videos.d.ts.map +1 -0
- package/lib/actions/videos.js +423 -0
- package/lib/actions/websockets.d.ts +1 -0
- package/lib/actions/websockets.d.ts.map +1 -0
- package/lib/actions/websockets.js +164 -0
- package/lib/adapters/arangoAdapter.d.ts +1 -0
- package/lib/adapters/arangoAdapter.d.ts.map +1 -0
- package/lib/adapters/arangoAdapter.js +70 -0
- package/lib/adapters/contentAdapter.d.ts +1 -0
- package/lib/adapters/contentAdapter.d.ts.map +1 -0
- package/lib/adapters/contentAdapter.js +108 -0
- package/lib/adapters/fileAdapter.d.ts +1 -0
- package/lib/adapters/fileAdapter.d.ts.map +1 -0
- package/lib/adapters/fileAdapter.js +119 -0
- package/lib/adapters/imageAdapter.d.ts +1 -0
- package/lib/adapters/imageAdapter.d.ts.map +1 -0
- package/lib/adapters/imageAdapter.js +112 -0
- package/lib/adapters/index.d.ts +1 -0
- package/lib/adapters/index.d.ts.map +1 -0
- package/lib/adapters/index.js +11 -0
- package/lib/adapters/messageAdapter.d.ts +1 -0
- package/lib/adapters/messageAdapter.d.ts.map +1 -0
- package/lib/adapters/messageAdapter.js +82 -0
- package/lib/adapters/postAdapter.d.ts +1 -0
- package/lib/adapters/postAdapter.d.ts.map +1 -0
- package/lib/adapters/postAdapter.js +117 -0
- package/lib/adapters/reaktorAdapter.d.ts +1 -0
- package/lib/adapters/reaktorAdapter.d.ts.map +1 -0
- package/lib/adapters/reaktorAdapter.js +59 -0
- package/lib/adapters/tagAdapter.d.ts +1 -0
- package/lib/adapters/tagAdapter.d.ts.map +1 -0
- package/lib/adapters/tagAdapter.js +99 -0
- package/lib/adapters/userAdapter.d.ts +1 -0
- package/lib/adapters/userAdapter.d.ts.map +1 -0
- package/lib/adapters/userAdapter.js +264 -0
- package/lib/config.d.ts +1 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +161 -0
- package/lib/handlers/graphqlHandler.d.ts +1 -0
- package/lib/handlers/graphqlHandler.d.ts.map +1 -0
- package/lib/handlers/graphqlHandler.js +118 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +18 -0
- package/lib/lambdas/actions/websockets.d.ts +1 -0
- package/lib/lambdas/actions/websockets.d.ts.map +1 -0
- package/lib/lambdas/actions/websockets.js +105 -0
- package/lib/lambdas/authorizer.d.ts +1 -0
- package/lib/lambdas/authorizer.d.ts.map +1 -0
- package/lib/lambdas/authorizer.js +41 -0
- package/lib/lambdas/connection.d.ts +1 -0
- package/lib/lambdas/connection.d.ts.map +1 -0
- package/lib/lambdas/connection.js +85 -0
- package/lib/lambdas/utils/message.d.ts +1 -0
- package/lib/lambdas/utils/message.d.ts.map +1 -0
- package/lib/lambdas/utils/message.js +20 -0
- package/lib/lambdas/utils/websocket.d.ts +1 -0
- package/lib/lambdas/utils/websocket.d.ts.map +1 -0
- package/lib/lambdas/utils/websocket.js +78 -0
- package/lib/mocks/conversation.d.ts +1 -0
- package/lib/mocks/conversation.d.ts.map +1 -0
- package/lib/mocks/conversation.js +10 -0
- package/lib/mocks/file.d.ts +1 -0
- package/lib/mocks/file.d.ts.map +1 -0
- package/lib/mocks/file.js +13 -0
- package/lib/mocks/group.d.ts +1 -0
- package/lib/mocks/group.d.ts.map +1 -0
- package/lib/mocks/group.js +20 -0
- package/lib/mocks/image.d.ts +1 -0
- package/lib/mocks/image.d.ts.map +1 -0
- package/lib/mocks/image.js +17 -0
- package/lib/mocks/post.d.ts +1 -0
- package/lib/mocks/post.d.ts.map +1 -0
- package/lib/mocks/post.js +28 -0
- package/lib/mocks/tag.d.ts +1 -0
- package/lib/mocks/tag.d.ts.map +1 -0
- package/lib/mocks/tag.js +12 -0
- package/lib/mocks/user.d.ts +1 -0
- package/lib/mocks/user.d.ts.map +1 -0
- package/lib/mocks/user.js +61 -0
- package/lib/mocks/video.d.ts +1 -0
- package/lib/mocks/video.d.ts.map +1 -0
- package/lib/mocks/video.js +17 -0
- package/lib/mutations/content.d.ts +1 -0
- package/lib/mutations/content.d.ts.map +1 -0
- package/lib/mutations/content.js +27 -0
- package/lib/mutations/index.d.ts +1 -0
- package/lib/mutations/index.d.ts.map +1 -0
- package/lib/mutations/index.js +29 -0
- package/lib/mutations/locations.d.ts +1 -0
- package/lib/mutations/locations.d.ts.map +1 -0
- package/lib/mutations/locations.js +22 -0
- package/lib/mutations/messages.d.ts +1 -0
- package/lib/mutations/messages.d.ts.map +1 -0
- package/lib/mutations/messages.js +75 -0
- package/lib/mutations/posts.d.ts +1 -0
- package/lib/mutations/posts.d.ts.map +1 -0
- package/lib/mutations/posts.js +31 -0
- package/lib/mutations/profiles.d.ts +1 -0
- package/lib/mutations/profiles.d.ts.map +1 -0
- package/lib/mutations/profiles.js +78 -0
- package/lib/mutations/reactions.d.ts +1 -0
- package/lib/mutations/reactions.d.ts.map +1 -0
- package/lib/mutations/reactions.js +29 -0
- package/lib/mutations/statistics.d.ts +1 -0
- package/lib/mutations/statistics.d.ts.map +1 -0
- package/lib/mutations/statistics.js +17 -0
- package/lib/mutations/subscriptions.d.ts +1 -0
- package/lib/mutations/subscriptions.d.ts.map +1 -0
- package/lib/mutations/subscriptions.js +38 -0
- package/lib/mutations/tags.d.ts +1 -0
- package/lib/mutations/tags.d.ts.map +1 -0
- package/lib/mutations/tags.js +109 -0
- package/lib/mutations/users.d.ts +1 -0
- package/lib/mutations/users.d.ts.map +1 -0
- package/lib/mutations/users.js +129 -0
- package/lib/objectTypes/app.d.ts +1 -0
- package/lib/objectTypes/app.d.ts.map +1 -0
- package/lib/objectTypes/app.js +147 -0
- package/lib/objectTypes/bankAccount.d.ts +1 -0
- package/lib/objectTypes/bankAccount.d.ts.map +1 -0
- package/lib/objectTypes/bankAccount.js +54 -0
- package/lib/objectTypes/connection.d.ts +1 -0
- package/lib/objectTypes/connection.d.ts.map +1 -0
- package/lib/objectTypes/connection.js +26 -0
- package/lib/objectTypes/content.d.ts +1 -0
- package/lib/objectTypes/content.d.ts.map +1 -0
- package/lib/objectTypes/content.js +79 -0
- package/lib/objectTypes/conversation.d.ts +1 -0
- package/lib/objectTypes/conversation.d.ts.map +1 -0
- package/lib/objectTypes/conversation.js +53 -0
- package/lib/objectTypes/creditCard.d.ts +1 -0
- package/lib/objectTypes/creditCard.d.ts.map +1 -0
- package/lib/objectTypes/creditCard.js +64 -0
- package/lib/objectTypes/document.d.ts +1 -0
- package/lib/objectTypes/document.d.ts.map +1 -0
- package/lib/objectTypes/document.js +21 -0
- package/lib/objectTypes/error.d.ts +1 -0
- package/lib/objectTypes/error.d.ts.map +1 -0
- package/lib/objectTypes/error.js +24 -0
- package/lib/objectTypes/external.d.ts +1 -0
- package/lib/objectTypes/external.d.ts.map +1 -0
- package/lib/objectTypes/external.js +52 -0
- package/lib/objectTypes/file.d.ts +1 -0
- package/lib/objectTypes/file.d.ts.map +1 -0
- package/lib/objectTypes/file.js +76 -0
- package/lib/objectTypes/filter.d.ts +1 -0
- package/lib/objectTypes/filter.d.ts.map +1 -0
- package/lib/objectTypes/filter.js +21 -0
- package/lib/objectTypes/group.d.ts +1 -0
- package/lib/objectTypes/group.d.ts.map +1 -0
- package/lib/objectTypes/group.js +97 -0
- package/lib/objectTypes/iapSubscription.d.ts +1 -0
- package/lib/objectTypes/iapSubscription.d.ts.map +1 -0
- package/lib/objectTypes/iapSubscription.js +18 -0
- package/lib/objectTypes/image.d.ts +1 -0
- package/lib/objectTypes/image.d.ts.map +1 -0
- package/lib/objectTypes/image.js +105 -0
- package/lib/objectTypes/index.d.ts +1 -0
- package/lib/objectTypes/index.d.ts.map +1 -0
- package/lib/objectTypes/index.js +28 -0
- package/lib/objectTypes/location.d.ts +1 -0
- package/lib/objectTypes/location.d.ts.map +1 -0
- package/lib/objectTypes/location.js +85 -0
- package/lib/objectTypes/message.d.ts +1 -0
- package/lib/objectTypes/message.d.ts.map +1 -0
- package/lib/objectTypes/message.js +72 -0
- package/lib/objectTypes/passcode.d.ts +1 -0
- package/lib/objectTypes/passcode.d.ts.map +1 -0
- package/lib/objectTypes/passcode.js +20 -0
- package/lib/objectTypes/plan.d.ts +1 -0
- package/lib/objectTypes/plan.d.ts.map +1 -0
- package/lib/objectTypes/plan.js +71 -0
- package/lib/objectTypes/post.d.ts +1 -0
- package/lib/objectTypes/post.d.ts.map +1 -0
- package/lib/objectTypes/post.js +101 -0
- package/lib/objectTypes/profile.d.ts +1 -0
- package/lib/objectTypes/profile.d.ts.map +1 -0
- package/lib/objectTypes/profile.js +68 -0
- package/lib/objectTypes/reaction.d.ts +1 -0
- package/lib/objectTypes/reaction.d.ts.map +1 -0
- package/lib/objectTypes/reaction.js +37 -0
- package/lib/objectTypes/relation.d.ts +1 -0
- package/lib/objectTypes/relation.d.ts.map +1 -0
- package/lib/objectTypes/relation.js +27 -0
- package/lib/objectTypes/search.d.ts +1 -0
- package/lib/objectTypes/search.d.ts.map +1 -0
- package/lib/objectTypes/search.js +50 -0
- package/lib/objectTypes/statistics.d.ts +1 -0
- package/lib/objectTypes/statistics.d.ts.map +1 -0
- package/lib/objectTypes/statistics.js +17 -0
- package/lib/objectTypes/subscription.d.ts +1 -0
- package/lib/objectTypes/subscription.d.ts.map +1 -0
- package/lib/objectTypes/subscription.js +102 -0
- package/lib/objectTypes/tag.d.ts +1 -0
- package/lib/objectTypes/tag.d.ts.map +1 -0
- package/lib/objectTypes/tag.js +41 -0
- package/lib/objectTypes/user.d.ts +1 -0
- package/lib/objectTypes/user.d.ts.map +1 -0
- package/lib/objectTypes/user.js +111 -0
- package/lib/queries/content.d.ts +1 -0
- package/lib/queries/content.d.ts.map +1 -0
- package/lib/queries/content.js +50 -0
- package/lib/queries/index.d.ts +1 -0
- package/lib/queries/index.d.ts.map +1 -0
- package/lib/queries/index.js +27 -0
- package/lib/queries/locations.d.ts +1 -0
- package/lib/queries/locations.d.ts.map +1 -0
- package/lib/queries/locations.js +23 -0
- package/lib/queries/messages.d.ts +1 -0
- package/lib/queries/messages.d.ts.map +1 -0
- package/lib/queries/messages.js +35 -0
- package/lib/queries/posts.d.ts +1 -0
- package/lib/queries/posts.d.ts.map +1 -0
- package/lib/queries/posts.js +154 -0
- package/lib/queries/reactions.d.ts +1 -0
- package/lib/queries/reactions.d.ts.map +1 -0
- package/lib/queries/reactions.js +34 -0
- package/lib/queries/statistics.d.ts +1 -0
- package/lib/queries/statistics.d.ts.map +1 -0
- package/lib/queries/statistics.js +17 -0
- package/lib/queries/subscriptions.d.ts +1 -0
- package/lib/queries/subscriptions.d.ts.map +1 -0
- package/lib/queries/subscriptions.js +21 -0
- package/lib/queries/tags.d.ts +1 -0
- package/lib/queries/tags.d.ts.map +1 -0
- package/lib/queries/tags.js +56 -0
- package/lib/queries/users.d.ts +1 -0
- package/lib/queries/users.d.ts.map +1 -0
- package/lib/queries/users.js +39 -0
- package/lib/templates/email/layout.d.ts +1 -0
- package/lib/templates/email/layout.d.ts.map +1 -0
- package/lib/templates/email/layout.js +281 -0
- package/lib/templates/email/passwordForgot.d.ts +1 -0
- package/lib/templates/email/passwordForgot.d.ts.map +1 -0
- package/lib/templates/email/passwordForgot.js +17 -0
- package/lib/templates/email/passwordRecovery.d.ts +1 -0
- package/lib/templates/email/passwordRecovery.d.ts.map +1 -0
- package/lib/templates/email/passwordRecovery.js +14 -0
- package/lib/templates/email/verifyEmail.d.ts +1 -0
- package/lib/templates/email/verifyEmail.d.ts.map +1 -0
- package/lib/templates/email/verifyEmail.js +17 -0
- package/lib/templates/email/welcome.d.ts +1 -0
- package/lib/templates/email/welcome.d.ts.map +1 -0
- package/lib/templates/email/welcome.js +17 -0
- package/lib/templates/sms/passwordForgot.d.ts +1 -0
- package/lib/templates/sms/passwordForgot.d.ts.map +1 -0
- package/lib/templates/sms/passwordForgot.js +3 -0
- package/lib/templates/sms/passwordRecovery.d.ts +1 -0
- package/lib/templates/sms/passwordRecovery.d.ts.map +1 -0
- package/lib/templates/sms/passwordRecovery.js +3 -0
- package/lib/templates/sms/verifyEmail.d.ts +1 -0
- package/lib/templates/sms/verifyEmail.d.ts.map +1 -0
- package/lib/templates/sms/verifyEmail.js +3 -0
- package/lib/templates/sms/verifyPhone.d.ts +1 -0
- package/lib/templates/sms/verifyPhone.d.ts.map +1 -0
- package/lib/templates/sms/verifyPhone.js +3 -0
- package/lib/templates/sms/welcome.d.ts +1 -0
- package/lib/templates/sms/welcome.d.ts.map +1 -0
- package/lib/templates/sms/welcome.js +3 -0
- package/lib/types/apps.types.d.ts +1 -0
- package/lib/types/apps.types.d.ts.map +1 -0
- package/lib/types/apps.types.js +10 -0
- package/lib/types/arangodb.types.d.ts +1 -0
- package/lib/types/arangodb.types.d.ts.map +1 -0
- package/lib/types/arangodb.types.js +6 -0
- package/lib/types/auth.types.d.ts +1 -0
- package/lib/types/auth.types.d.ts.map +1 -0
- package/lib/types/auth.types.js +6 -0
- package/lib/types/connections.types.d.ts +1 -0
- package/lib/types/connections.types.d.ts.map +1 -0
- package/lib/types/connections.types.js +6 -0
- package/lib/types/content.types.d.ts +1 -0
- package/lib/types/content.types.d.ts.map +1 -0
- package/lib/types/content.types.js +6 -0
- package/lib/types/conversations.types.d.ts +1 -0
- package/lib/types/conversations.types.d.ts.map +1 -0
- package/lib/types/conversations.types.js +6 -0
- package/lib/types/email.types.d.ts +1 -0
- package/lib/types/email.types.d.ts.map +1 -0
- package/lib/types/email.types.js +6 -0
- package/lib/types/error.types.d.ts +1 -0
- package/lib/types/error.types.d.ts.map +1 -0
- package/lib/types/error.types.js +20 -0
- package/lib/types/files.types.d.ts +1 -0
- package/lib/types/files.types.d.ts.map +1 -0
- package/lib/types/files.types.js +6 -0
- package/lib/types/google.types.d.ts +1 -0
- package/lib/types/google.types.d.ts.map +1 -0
- package/lib/types/google.types.js +6 -0
- package/lib/types/groups.types.d.ts +1 -0
- package/lib/types/groups.types.d.ts.map +1 -0
- package/lib/types/groups.types.js +6 -0
- package/lib/types/images.types.d.ts +1 -0
- package/lib/types/images.types.d.ts.map +1 -0
- package/lib/types/images.types.js +6 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +28 -0
- package/lib/types/locations.types.d.ts +1 -0
- package/lib/types/locations.types.d.ts.map +1 -0
- package/lib/types/locations.types.js +6 -0
- package/lib/types/messages.types.d.ts +1 -0
- package/lib/types/messages.types.d.ts.map +1 -0
- package/lib/types/messages.types.js +6 -0
- package/lib/types/notifications.types.d.ts +1 -0
- package/lib/types/notifications.types.d.ts.map +1 -0
- package/lib/types/notifications.types.js +6 -0
- package/lib/types/payments.types.d.ts +1 -0
- package/lib/types/payments.types.d.ts.map +1 -0
- package/lib/types/payments.types.js +6 -0
- package/lib/types/posts.types.d.ts +1 -0
- package/lib/types/posts.types.d.ts.map +1 -0
- package/lib/types/posts.types.js +6 -0
- package/lib/types/profiles.types.d.ts +1 -0
- package/lib/types/profiles.types.d.ts.map +1 -0
- package/lib/types/profiles.types.js +3 -0
- package/lib/types/statistics.types.d.ts +1 -0
- package/lib/types/statistics.types.d.ts.map +1 -0
- package/lib/types/statistics.types.js +3 -0
- package/lib/types/tags.types.d.ts +1 -0
- package/lib/types/tags.types.d.ts.map +1 -0
- package/lib/types/tags.types.js +6 -0
- package/lib/types/users.types.d.ts +1 -0
- package/lib/types/users.types.d.ts.map +1 -0
- package/lib/types/users.types.js +6 -0
- package/lib/types/videos.types.d.ts +1 -0
- package/lib/types/videos.types.d.ts.map +1 -0
- package/lib/types/videos.types.js +6 -0
- package/lib/types/websockets.types.d.ts +1 -0
- package/lib/types/websockets.types.d.ts.map +1 -0
- package/lib/types/websockets.types.js +6 -0
- package/lib/utils/adapterUtils.d.ts +1 -0
- package/lib/utils/adapterUtils.d.ts.map +1 -0
- package/lib/utils/adapterUtils.js +23 -0
- package/lib/utils/analyticsUtils.d.ts +1 -0
- package/lib/utils/analyticsUtils.d.ts.map +1 -0
- package/lib/utils/analyticsUtils.js +45 -0
- package/lib/utils/arangodbUtils.d.ts +1 -0
- package/lib/utils/arangodbUtils.d.ts.map +1 -0
- package/lib/utils/arangodbUtils.js +130 -0
- package/lib/utils/authUtils.d.ts +1 -0
- package/lib/utils/authUtils.d.ts.map +1 -0
- package/lib/utils/authUtils.js +54 -0
- package/lib/utils/contextUtils.d.ts +1 -0
- package/lib/utils/contextUtils.d.ts.map +1 -0
- package/lib/utils/contextUtils.js +10 -0
- package/lib/utils/dbI18n.d.ts +1 -0
- package/lib/utils/dbI18n.d.ts.map +1 -0
- package/lib/utils/dbI18n.example.d.ts +1 -0
- package/lib/utils/dbI18n.example.d.ts.map +1 -0
- package/lib/utils/dbI18n.example.js +93 -0
- package/lib/utils/dbI18n.js +28 -0
- package/lib/utils/googleTranslate.d.ts +1 -0
- package/lib/utils/googleTranslate.d.ts.map +1 -0
- package/lib/utils/googleTranslate.js +70 -0
- package/lib/utils/graphqlUtils.d.ts +1 -0
- package/lib/utils/graphqlUtils.d.ts.map +1 -0
- package/lib/utils/graphqlUtils.js +11 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +19 -0
- package/lib/utils/languageDetection.d.ts +1 -0
- package/lib/utils/languageDetection.d.ts.map +1 -0
- package/lib/utils/languageDetection.js +120 -0
- package/lib/utils/localeUtils.d.ts +1 -0
- package/lib/utils/localeUtils.d.ts.map +1 -0
- package/lib/utils/localeUtils.example.d.ts +1 -0
- package/lib/utils/localeUtils.example.d.ts.map +1 -0
- package/lib/utils/localeUtils.example.js +124 -0
- package/lib/utils/localeUtils.js +71 -0
- package/lib/utils/middlewareUtils.d.ts +1 -0
- package/lib/utils/middlewareUtils.d.ts.map +1 -0
- package/lib/utils/middlewareUtils.js +10 -0
- package/lib/utils/sessionUtils.d.ts +1 -0
- package/lib/utils/sessionUtils.d.ts.map +1 -0
- package/lib/utils/sessionUtils.js +26 -0
- package/lib/utils/stripeUtils.d.ts +2 -1
- package/lib/utils/stripeUtils.d.ts.map +1 -0
- package/lib/utils/stripeUtils.js +12 -0
- package/lib/utils/templateUtils.d.ts +1 -0
- package/lib/utils/templateUtils.d.ts.map +1 -0
- package/lib/utils/templateUtils.js +11 -0
- package/lib/utils/testUtils.d.ts +1 -0
- package/lib/utils/testUtils.d.ts.map +1 -0
- package/lib/utils/testUtils.js +292 -0
- package/lib/utils/translationQueue.d.ts +1 -0
- package/lib/utils/translationQueue.d.ts.map +1 -0
- package/lib/utils/translationQueue.example.d.ts +1 -0
- package/lib/utils/translationQueue.example.d.ts.map +1 -0
- package/lib/utils/translationQueue.example.js +340 -0
- package/lib/utils/translationQueue.js +113 -0
- package/package.json +43 -24
|
@@ -0,0 +1,292 @@
|
|
|
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 { jest } from '@jest/globals';
|
|
5
|
+
export const createMockContext = (overrides = {})=>{
|
|
6
|
+
const defaultSession = {
|
|
7
|
+
userAccess: 1,
|
|
8
|
+
userId: 'user1',
|
|
9
|
+
username: 'testuser'
|
|
10
|
+
};
|
|
11
|
+
const overrideSession = overrides.session || {};
|
|
12
|
+
const context = {
|
|
13
|
+
databaseName: overrides.databaseName ?? 'test',
|
|
14
|
+
...overrides
|
|
15
|
+
};
|
|
16
|
+
delete context.session;
|
|
17
|
+
context.session = {
|
|
18
|
+
userAccess: overrideSession.userAccess !== undefined ? overrideSession.userAccess : defaultSession.userAccess,
|
|
19
|
+
userId: overrideSession.userId !== undefined ? overrideSession.userId : defaultSession.userId,
|
|
20
|
+
username: overrideSession.username !== undefined ? overrideSession.username : defaultSession.username
|
|
21
|
+
};
|
|
22
|
+
return context;
|
|
23
|
+
};
|
|
24
|
+
// Common mock resolve info for GraphQL resolvers
|
|
25
|
+
export const createMockResolveInfo = (fieldName = 'test')=>{
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
27
|
+
const operation = {};
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
29
|
+
const parentType = {};
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
31
|
+
const returnType = {};
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
33
|
+
const schema = {};
|
|
34
|
+
return {
|
|
35
|
+
fieldName,
|
|
36
|
+
fieldNodes: [],
|
|
37
|
+
fragments: {},
|
|
38
|
+
operation,
|
|
39
|
+
parentType,
|
|
40
|
+
path: {
|
|
41
|
+
key: fieldName,
|
|
42
|
+
prev: undefined,
|
|
43
|
+
typename: 'Test'
|
|
44
|
+
},
|
|
45
|
+
returnType,
|
|
46
|
+
rootValue: {},
|
|
47
|
+
schema,
|
|
48
|
+
variableValues: {}
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
// Utility to mock actions module
|
|
52
|
+
export const mockActionsModule = async (modulePath, mockActions)=>{
|
|
53
|
+
const mocks = Object.entries(mockActions).reduce((acc, [key, value])=>{
|
|
54
|
+
acc[key] = jest.fn().mockImplementation(value);
|
|
55
|
+
return acc;
|
|
56
|
+
}, {});
|
|
57
|
+
await jest.isolateModulesAsync(async ()=>{
|
|
58
|
+
jest.unstable_mockModule(modulePath, ()=>({
|
|
59
|
+
__esModule: true,
|
|
60
|
+
...mocks,
|
|
61
|
+
default: mocks
|
|
62
|
+
}));
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
// Utility to mock object types
|
|
66
|
+
export const mockObjectType = async (modulePath, typeName)=>{
|
|
67
|
+
const mock = {
|
|
68
|
+
__esModule: true,
|
|
69
|
+
[typeName]: {
|
|
70
|
+
getField: jest.fn(()=>({
|
|
71
|
+
resolve: jest.fn()
|
|
72
|
+
})),
|
|
73
|
+
getFields: jest.fn(()=>({}))
|
|
74
|
+
},
|
|
75
|
+
default: {
|
|
76
|
+
[typeName]: {
|
|
77
|
+
getField: jest.fn(()=>({
|
|
78
|
+
resolve: jest.fn()
|
|
79
|
+
})),
|
|
80
|
+
getFields: jest.fn(()=>({}))
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
await jest.isolateModulesAsync(async ()=>{
|
|
85
|
+
jest.unstable_mockModule(modulePath, ()=>mock);
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
// Utility to create a test suite for query resolvers
|
|
89
|
+
export const createQueryTestSuite = (name, actionsPath, testCases)=>{
|
|
90
|
+
describe(`${name} Queries`, ()=>{
|
|
91
|
+
let actions;
|
|
92
|
+
const mockContext = createMockContext();
|
|
93
|
+
beforeAll(()=>{
|
|
94
|
+
actions = {};
|
|
95
|
+
});
|
|
96
|
+
testCases.forEach(({ name: testName, actionName, args, expectedCall, mockReturnValue, errorCase = false })=>{
|
|
97
|
+
it(`should call ${actionName} action with correct parameters`, async ()=>{
|
|
98
|
+
const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(mockReturnValue));
|
|
99
|
+
actions[actionName] = mockFn;
|
|
100
|
+
const result = await mockFn(mockContext, args);
|
|
101
|
+
expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
|
|
102
|
+
expect(result).toEqual(mockReturnValue);
|
|
103
|
+
});
|
|
104
|
+
if (errorCase) {
|
|
105
|
+
it(`should handle ${actionName} when no data found`, async ()=>{
|
|
106
|
+
const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(null));
|
|
107
|
+
actions[actionName] = mockFn;
|
|
108
|
+
const result = await mockFn(mockContext, args);
|
|
109
|
+
expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
|
|
110
|
+
expect(result).toBeNull();
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
// Utility to create a test suite for mutation resolvers
|
|
117
|
+
export const createMutationTestSuite = (name, actionsPath, testCases)=>{
|
|
118
|
+
describe(`${name} Mutations`, ()=>{
|
|
119
|
+
let actions;
|
|
120
|
+
beforeAll(()=>{
|
|
121
|
+
actions = {};
|
|
122
|
+
});
|
|
123
|
+
testCases.forEach(({ actionName, args, expectedCall, mockReturnValue, requiresAuth = false, authUserId })=>{
|
|
124
|
+
it(`should call ${actionName} action with correct parameters`, async ()=>{
|
|
125
|
+
const mockContext = createMockContext();
|
|
126
|
+
if (requiresAuth && authUserId) {
|
|
127
|
+
mockContext.session.userId = authUserId;
|
|
128
|
+
}
|
|
129
|
+
const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(mockReturnValue));
|
|
130
|
+
actions[actionName] = mockFn;
|
|
131
|
+
const result = await mockFn(mockContext, args);
|
|
132
|
+
expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
|
|
133
|
+
expect(result).toEqual(mockReturnValue);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
// Utility to create integration test suite
|
|
139
|
+
export const createIntegrationTestSuite = (name, actionsPath, objectTypePath, typeName, testCases)=>{
|
|
140
|
+
describe(`${name} Integration`, ()=>{
|
|
141
|
+
let actions;
|
|
142
|
+
beforeAll(()=>{
|
|
143
|
+
actions = {};
|
|
144
|
+
});
|
|
145
|
+
testCases.forEach(({ name: testName, actionName, args, expectedCall, successReturnValue, errorReturnValue, testErrorCase })=>{
|
|
146
|
+
describe(testName, ()=>{
|
|
147
|
+
it(`should return data when ${actionName} succeeds`, async ()=>{
|
|
148
|
+
const mockContext = createMockContext();
|
|
149
|
+
const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(successReturnValue));
|
|
150
|
+
actions[actionName] = mockFn;
|
|
151
|
+
const result = await mockFn(mockContext, args);
|
|
152
|
+
expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
|
|
153
|
+
expect(result).toEqual(successReturnValue || {});
|
|
154
|
+
});
|
|
155
|
+
if (testErrorCase) {
|
|
156
|
+
it(`should handle ${actionName} when no data found`, async ()=>{
|
|
157
|
+
const mockContext = createMockContext();
|
|
158
|
+
const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(errorReturnValue));
|
|
159
|
+
actions[actionName] = mockFn;
|
|
160
|
+
const result = await mockFn(mockContext, args);
|
|
161
|
+
expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
|
|
162
|
+
expect(result).toEqual(errorReturnValue);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
// Common mock data generators
|
|
170
|
+
export const createMockUser = (overrides = {})=>({
|
|
171
|
+
email: 'test@example.com',
|
|
172
|
+
firstName: 'Test',
|
|
173
|
+
lastName: 'User',
|
|
174
|
+
userId: 'user1',
|
|
175
|
+
username: 'testuser',
|
|
176
|
+
...overrides
|
|
177
|
+
});
|
|
178
|
+
export const createMockPost = (overrides = {})=>({
|
|
179
|
+
content: 'Test post content',
|
|
180
|
+
createdAt: new Date().toISOString(),
|
|
181
|
+
postId: 'post1',
|
|
182
|
+
userId: 'user1',
|
|
183
|
+
...overrides
|
|
184
|
+
});
|
|
185
|
+
export const createMockMessage = (overrides = {})=>({
|
|
186
|
+
content: 'Test message',
|
|
187
|
+
conversationId: 'conv1',
|
|
188
|
+
createdAt: new Date().toISOString(),
|
|
189
|
+
messageId: 'msg1',
|
|
190
|
+
userId: 'user1',
|
|
191
|
+
...overrides
|
|
192
|
+
});
|
|
193
|
+
export const createMockReaction = (overrides = {})=>({
|
|
194
|
+
createdAt: new Date().toISOString(),
|
|
195
|
+
postId: 'post1',
|
|
196
|
+
reactionId: 'react1',
|
|
197
|
+
type: 'like',
|
|
198
|
+
userId: 'user1',
|
|
199
|
+
...overrides
|
|
200
|
+
});
|
|
201
|
+
export const createMockTag = (overrides = {})=>({
|
|
202
|
+
description: 'Test tag description',
|
|
203
|
+
name: 'test-tag',
|
|
204
|
+
tagId: 'tag1',
|
|
205
|
+
...overrides
|
|
206
|
+
});
|
|
207
|
+
// Utility to set up common mocks
|
|
208
|
+
export const setupCommonMocks = async ()=>{
|
|
209
|
+
const mock = {
|
|
210
|
+
__esModule: true,
|
|
211
|
+
useDb: jest.fn(),
|
|
212
|
+
getLimit: jest.fn(),
|
|
213
|
+
getDocId: jest.fn(),
|
|
214
|
+
sortIds: jest.fn(),
|
|
215
|
+
getGqlFields: jest.fn(),
|
|
216
|
+
default: {
|
|
217
|
+
useDb: jest.fn(),
|
|
218
|
+
getLimit: jest.fn(),
|
|
219
|
+
getDocId: jest.fn(),
|
|
220
|
+
sortIds: jest.fn(),
|
|
221
|
+
getGqlFields: jest.fn()
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
await jest.isolateModulesAsync(async ()=>{
|
|
225
|
+
jest.unstable_mockModule('./arangodbUtils.js', ()=>mock);
|
|
226
|
+
});
|
|
227
|
+
};
|
|
228
|
+
// Utility to clear all mocks
|
|
229
|
+
export const clearAllMocks = ()=>{
|
|
230
|
+
jest.clearAllMocks();
|
|
231
|
+
};
|
|
232
|
+
// Utility to create a test suite for action functions
|
|
233
|
+
export const createActionTestSuite = (name, actionsPath, testCases)=>{
|
|
234
|
+
describe(`${name} actions`, ()=>{
|
|
235
|
+
let actions;
|
|
236
|
+
beforeAll(async ()=>{
|
|
237
|
+
actions = await import(actionsPath);
|
|
238
|
+
});
|
|
239
|
+
testCases.forEach(({ name: testName, actionName, args, mockQuery, expectedResult })=>{
|
|
240
|
+
it(`should execute ${actionName}`, async ()=>{
|
|
241
|
+
const mockContext = createMockContext();
|
|
242
|
+
const mockDb = jest.fn().mockReturnValue({
|
|
243
|
+
query: mockQuery
|
|
244
|
+
});
|
|
245
|
+
const actual = jest.requireActual('./arangodbUtils.js');
|
|
246
|
+
jest.doMock('./arangodbUtils.js', ()=>({
|
|
247
|
+
useDb: mockDb,
|
|
248
|
+
...actual
|
|
249
|
+
}));
|
|
250
|
+
const result = await actions[actionName](mockContext, args);
|
|
251
|
+
expect(result).toEqual(expectedResult);
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
};
|
|
256
|
+
export const createAdapterTestSuite = (name, adapterPath, testCases)=>{
|
|
257
|
+
describe(name, ()=>{
|
|
258
|
+
let adapter;
|
|
259
|
+
beforeAll(async ()=>{
|
|
260
|
+
adapter = await import(adapterPath);
|
|
261
|
+
});
|
|
262
|
+
testCases.forEach(({ name: testName, input, expectedOutput })=>{
|
|
263
|
+
it(`should ${testName}`, ()=>{
|
|
264
|
+
const result = adapter.parseTag(input);
|
|
265
|
+
expect(result).toEqual(expectedOutput);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
};
|
|
270
|
+
export const createUtilsTestSuite = (name, utilsPath, testCases)=>{
|
|
271
|
+
describe(name, ()=>{
|
|
272
|
+
let utils;
|
|
273
|
+
beforeAll(async ()=>{
|
|
274
|
+
utils = await import(utilsPath);
|
|
275
|
+
});
|
|
276
|
+
testCases.forEach(({ name: testName, input, expectedOutput })=>{
|
|
277
|
+
it(`should ${testName}`, ()=>{
|
|
278
|
+
let result;
|
|
279
|
+
if (utils.logInfo) {
|
|
280
|
+
result = utils.logInfo(input);
|
|
281
|
+
} else if (utils.removeEmptyKeys) {
|
|
282
|
+
result = utils.removeEmptyKeys(input);
|
|
283
|
+
} else {
|
|
284
|
+
throw new Error(`No suitable function found in ${utilsPath}`);
|
|
285
|
+
}
|
|
286
|
+
expect(result).toEqual(expectedOutput);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL3V0aWxzL3Rlc3RVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtqZXN0fSBmcm9tICdAamVzdC9nbG9iYWxzJztcbmltcG9ydCB0eXBlIHtHcmFwaFFMUmVzb2x2ZUluZm99IGZyb20gJ2dyYXBocWwnO1xuXG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcblxuLy8gRGVmaW5lIHByb3BlciB0eXBlcyBmb3IgdGVzdCB1dGlsaXRpZXNcbnR5cGUgTW9ja092ZXJyaWRlcyA9IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xudHlwZSBUZXN0Q29udGV4dCA9IFBhcnRpYWw8QXBpQ29udGV4dD4gJiB7c2Vzc2lvbj86IFBhcnRpYWw8e3VzZXJJZDogc3RyaW5nOyB1c2VybmFtZTogc3RyaW5nOyB1c2VyQWNjZXNzOiBudW1iZXJ9Pn07XG50eXBlIFRlc3RBcmdzID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG50eXBlIFRlc3RSZXR1cm5WYWx1ZSA9IHVua25vd247XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrQ29udGV4dCA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSk6IEFwaUNvbnRleHQgPT4ge1xuICBjb25zdCBkZWZhdWx0U2Vzc2lvbiA9IHtcbiAgICB1c2VyQWNjZXNzOiAxLFxuICAgIHVzZXJJZDogJ3VzZXIxJyxcbiAgICB1c2VybmFtZTogJ3Rlc3R1c2VyJ1xuICB9O1xuICBjb25zdCBvdmVycmlkZVNlc3Npb246IFBhcnRpYWw8dHlwZW9mIGRlZmF1bHRTZXNzaW9uPiA9IG92ZXJyaWRlcy5zZXNzaW9uIHx8IHt9O1xuICBjb25zdCBjb250ZXh0OiBUZXN0Q29udGV4dCA9IHtcbiAgICBkYXRhYmFzZU5hbWU6IChvdmVycmlkZXMuZGF0YWJhc2VOYW1lIGFzIHN0cmluZykgPz8gJ3Rlc3QnLFxuICAgIC4uLm92ZXJyaWRlc1xuICB9O1xuICBkZWxldGUgY29udGV4dC5zZXNzaW9uO1xuICBjb250ZXh0LnNlc3Npb24gPSB7XG4gICAgdXNlckFjY2Vzczogb3ZlcnJpZGVTZXNzaW9uLnVzZXJBY2Nlc3MgIT09IHVuZGVmaW5lZCA/IG92ZXJyaWRlU2Vzc2lvbi51c2VyQWNjZXNzIDogZGVmYXVsdFNlc3Npb24udXNlckFjY2VzcyxcbiAgICB1c2VySWQ6IG92ZXJyaWRlU2Vzc2lvbi51c2VySWQgIT09IHVuZGVmaW5lZCA/IG92ZXJyaWRlU2Vzc2lvbi51c2VySWQgOiBkZWZhdWx0U2Vzc2lvbi51c2VySWQsXG4gICAgdXNlcm5hbWU6IG92ZXJyaWRlU2Vzc2lvbi51c2VybmFtZSAhPT0gdW5kZWZpbmVkID8gb3ZlcnJpZGVTZXNzaW9uLnVzZXJuYW1lIDogZGVmYXVsdFNlc3Npb24udXNlcm5hbWVcbiAgfTtcbiAgcmV0dXJuIGNvbnRleHQgYXMgQXBpQ29udGV4dDtcbn07XG5cbi8vIENvbW1vbiBtb2NrIHJlc29sdmUgaW5mbyBmb3IgR3JhcGhRTCByZXNvbHZlcnNcbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUmVzb2x2ZUluZm8gPSAoZmllbGROYW1lOiBzdHJpbmcgPSAndGVzdCcpOiBHcmFwaFFMUmVzb2x2ZUluZm8gPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gIGNvbnN0IG9wZXJhdGlvbiA9IHt9IGFzIEdyYXBoUUxSZXNvbHZlSW5mb1snb3BlcmF0aW9uJ107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWFzc2VydGlvbnNcbiAgY29uc3QgcGFyZW50VHlwZSA9IHt9IGFzIEdyYXBoUUxSZXNvbHZlSW5mb1sncGFyZW50VHlwZSddO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gIGNvbnN0IHJldHVyblR5cGUgPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ3JldHVyblR5cGUnXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICBjb25zdCBzY2hlbWEgPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ3NjaGVtYSddO1xuXG4gIHJldHVybiB7XG4gICAgZmllbGROYW1lLFxuICAgIGZpZWxkTm9kZXM6IFtdLFxuICAgIGZyYWdtZW50czoge30sXG4gICAgb3BlcmF0aW9uLFxuICAgIHBhcmVudFR5cGUsXG4gICAgcGF0aDoge2tleTogZmllbGROYW1lLCBwcmV2OiB1bmRlZmluZWQsIHR5cGVuYW1lOiAnVGVzdCd9LFxuICAgIHJldHVyblR5cGUsXG4gICAgcm9vdFZhbHVlOiB7fSxcbiAgICBzY2hlbWEsXG4gICAgdmFyaWFibGVWYWx1ZXM6IHt9XG4gIH07XG59O1xuXG4vLyBVdGlsaXR5IHRvIG1vY2sgYWN0aW9ucyBtb2R1bGVcbmV4cG9ydCBjb25zdCBtb2NrQWN0aW9uc01vZHVsZSA9IGFzeW5jIChtb2R1bGVQYXRoOiBzdHJpbmcsIG1vY2tBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBqZXN0Lk1vY2s+KSA9PiB7XG4gIGNvbnN0IG1vY2tzID0gT2JqZWN0LmVudHJpZXMobW9ja0FjdGlvbnMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBhY2Nba2V5XSA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24odmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIGplc3QuTW9jaz4pO1xuXG4gIGF3YWl0IGplc3QuaXNvbGF0ZU1vZHVsZXNBc3luYyhhc3luYyAoKSA9PiB7XG4gICAgamVzdC51bnN0YWJsZV9tb2NrTW9kdWxlKG1vZHVsZVBhdGgsICgpID0+ICh7XG4gICAgICBfX2VzTW9kdWxlOiB0cnVlLFxuICAgICAgLi4ubW9ja3MsXG4gICAgICBkZWZhdWx0OiBtb2Nrc1xuICAgIH0pKTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIG1vY2sgb2JqZWN0IHR5cGVzXG5leHBvcnQgY29uc3QgbW9ja09iamVjdFR5cGUgPSBhc3luYyAobW9kdWxlUGF0aDogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG1vY2sgPSB7XG4gICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICBbdHlwZU5hbWVdOiB7XG4gICAgICBnZXRGaWVsZDogamVzdC5mbigoKSA9PiAoe3Jlc29sdmU6IGplc3QuZm4oKX0pKSxcbiAgICAgIGdldEZpZWxkczogamVzdC5mbigoKSA9PiAoe30pKVxuICAgIH0sXG4gICAgZGVmYXVsdDoge1xuICAgICAgW3R5cGVOYW1lXToge1xuICAgICAgICBnZXRGaWVsZDogamVzdC5mbigoKSA9PiAoe3Jlc29sdmU6IGplc3QuZm4oKX0pKSxcbiAgICAgICAgZ2V0RmllbGRzOiBqZXN0LmZuKCgpID0+ICh7fSkpXG4gICAgICB9XG4gICAgfVxuICB9O1xuICBhd2FpdCBqZXN0Lmlzb2xhdGVNb2R1bGVzQXN5bmMoYXN5bmMgKCkgPT4ge1xuICAgIGplc3QudW5zdGFibGVfbW9ja01vZHVsZShtb2R1bGVQYXRoLCAoKSA9PiBtb2NrKTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIGNyZWF0ZSBhIHRlc3Qgc3VpdGUgZm9yIHF1ZXJ5IHJlc29sdmVyc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5VGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRDYWxsOiAoY29udGV4dDogVGVzdENvbnRleHQsIGFyZ3M6IFRlc3RBcmdzKSA9PiBUZXN0QXJncztcbiAgICBtb2NrUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICBlcnJvckNhc2U/OiBib29sZWFuO1xuICB9PlxuKSA9PiB7XG4gIGRlc2NyaWJlKGAke25hbWV9IFF1ZXJpZXNgLCAoKSA9PiB7XG4gICAgbGV0IGFjdGlvbnM6IGFueTtcbiAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG5cbiAgICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgICAgYWN0aW9ucyA9IHt9O1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtuYW1lOiB0ZXN0TmFtZSwgYWN0aW9uTmFtZSwgYXJncywgZXhwZWN0ZWRDYWxsLCBtb2NrUmV0dXJuVmFsdWUsIGVycm9yQ2FzZSA9IGZhbHNlfSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCBjYWxsICR7YWN0aW9uTmFtZX0gYWN0aW9uIHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZShtb2NrUmV0dXJuVmFsdWUpKTtcbiAgICAgICAgYWN0aW9uc1thY3Rpb25OYW1lXSA9IG1vY2tGbjtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwobW9ja1JldHVyblZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZihlcnJvckNhc2UpIHtcbiAgICAgICAgaXQoYHNob3VsZCBoYW5kbGUgJHthY3Rpb25OYW1lfSB3aGVuIG5vIGRhdGEgZm91bmRgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUobnVsbCkpO1xuICAgICAgICAgIGFjdGlvbnNbYWN0aW9uTmFtZV0gPSBtb2NrRm47XG5cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tDb250ZXh0LCBleHBlY3RlZENhbGwobW9ja0NvbnRleHQsIGFyZ3MpKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIGNyZWF0ZSBhIHRlc3Qgc3VpdGUgZm9yIG11dGF0aW9uIHJlc29sdmVyc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU11dGF0aW9uVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRDYWxsOiAoY29udGV4dDogVGVzdENvbnRleHQsIGFyZ3M6IFRlc3RBcmdzKSA9PiBUZXN0QXJncztcbiAgICBtb2NrUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICByZXF1aXJlc0F1dGg/OiBib29sZWFuO1xuICAgIGF1dGhVc2VySWQ/OiBzdHJpbmc7XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUoYCR7bmFtZX0gTXV0YXRpb25zYCwgKCkgPT4ge1xuICAgIGxldCBhY3Rpb25zOiBhbnk7XG5cbiAgICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgICAgYWN0aW9ucyA9IHt9O1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtcbiAgICAgIGFjdGlvbk5hbWUsXG4gICAgICBhcmdzLFxuICAgICAgZXhwZWN0ZWRDYWxsLFxuICAgICAgbW9ja1JldHVyblZhbHVlLFxuICAgICAgcmVxdWlyZXNBdXRoID0gZmFsc2UsXG4gICAgICBhdXRoVXNlcklkXG4gICAgfSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCBjYWxsICR7YWN0aW9uTmFtZX0gYWN0aW9uIHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgIGlmKHJlcXVpcmVzQXV0aCAmJiBhdXRoVXNlcklkKSB7XG4gICAgICAgICAgKG1vY2tDb250ZXh0LnNlc3Npb24gYXMge3VzZXJJZDogc3RyaW5nfSkudXNlcklkID0gYXV0aFVzZXJJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKG1vY2tSZXR1cm5WYWx1ZSkpO1xuICAgICAgICBhY3Rpb25zW2FjdGlvbk5hbWVdID0gbW9ja0ZuO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tGbihtb2NrQ29udGV4dCwgYXJncyk7XG4gICAgICAgIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tDb250ZXh0LCBleHBlY3RlZENhbGwobW9ja0NvbnRleHQsIGFyZ3MpKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChtb2NrUmV0dXJuVmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLy8gVXRpbGl0eSB0byBjcmVhdGUgaW50ZWdyYXRpb24gdGVzdCBzdWl0ZVxuZXhwb3J0IGNvbnN0IGNyZWF0ZUludGVncmF0aW9uVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIG9iamVjdFR5cGVQYXRoOiBzdHJpbmcsXG4gIHR5cGVOYW1lOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRDYWxsOiAoY29udGV4dDogVGVzdENvbnRleHQsIGFyZ3M6IFRlc3RBcmdzKSA9PiBUZXN0QXJncztcbiAgICBzdWNjZXNzUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICBlcnJvclJldHVyblZhbHVlOiBUZXN0UmV0dXJuVmFsdWU7XG4gICAgdGVzdEVycm9yQ2FzZTogYm9vbGVhbjtcbiAgfT5cbikgPT4ge1xuICBkZXNjcmliZShgJHtuYW1lfSBJbnRlZ3JhdGlvbmAsICgpID0+IHtcbiAgICBsZXQgYWN0aW9uczogYW55O1xuXG4gICAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICAgIGFjdGlvbnMgPSB7fTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7XG4gICAgICBuYW1lOiB0ZXN0TmFtZSxcbiAgICAgIGFjdGlvbk5hbWUsXG4gICAgICBhcmdzLFxuICAgICAgZXhwZWN0ZWRDYWxsLFxuICAgICAgc3VjY2Vzc1JldHVyblZhbHVlLFxuICAgICAgZXJyb3JSZXR1cm5WYWx1ZSxcbiAgICAgIHRlc3RFcnJvckNhc2VcbiAgICB9KSA9PiB7XG4gICAgICBkZXNjcmliZSh0ZXN0TmFtZSwgKCkgPT4ge1xuICAgICAgICBpdChgc2hvdWxkIHJldHVybiBkYXRhIHdoZW4gJHthY3Rpb25OYW1lfSBzdWNjZWVkc2AsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgICAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUoc3VjY2Vzc1JldHVyblZhbHVlKSk7XG4gICAgICAgICAgYWN0aW9uc1thY3Rpb25OYW1lXSA9IG1vY2tGbjtcblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tGbihtb2NrQ29udGV4dCwgYXJncyk7XG5cbiAgICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChzdWNjZXNzUmV0dXJuVmFsdWUgfHwge30pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZih0ZXN0RXJyb3JDYXNlKSB7XG4gICAgICAgICAgaXQoYHNob3VsZCBoYW5kbGUgJHthY3Rpb25OYW1lfSB3aGVuIG5vIGRhdGEgZm91bmRgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZShlcnJvclJldHVyblZhbHVlKSk7XG4gICAgICAgICAgICBhY3Rpb25zW2FjdGlvbk5hbWVdID0gbW9ja0ZuO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuXG4gICAgICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGVycm9yUmV0dXJuVmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vLyBDb21tb24gbW9jayBkYXRhIGdlbmVyYXRvcnNcbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrVXNlciA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgZW1haWw6ICd0ZXN0QGV4YW1wbGUuY29tJyxcbiAgZmlyc3ROYW1lOiAnVGVzdCcsXG4gIGxhc3ROYW1lOiAnVXNlcicsXG4gIHVzZXJJZDogJ3VzZXIxJyxcbiAgdXNlcm5hbWU6ICd0ZXN0dXNlcicsXG4gIC4uLm92ZXJyaWRlc1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUG9zdCA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgY29udGVudDogJ1Rlc3QgcG9zdCBjb250ZW50JyxcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIHBvc3RJZDogJ3Bvc3QxJyxcbiAgdXNlcklkOiAndXNlcjEnLFxuICAuLi5vdmVycmlkZXNcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9ja01lc3NhZ2UgPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGNvbnRlbnQ6ICdUZXN0IG1lc3NhZ2UnLFxuICBjb252ZXJzYXRpb25JZDogJ2NvbnYxJyxcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIG1lc3NhZ2VJZDogJ21zZzEnLFxuICB1c2VySWQ6ICd1c2VyMScsXG4gIC4uLm92ZXJyaWRlc1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUmVhY3Rpb24gPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICBwb3N0SWQ6ICdwb3N0MScsXG4gIHJlYWN0aW9uSWQ6ICdyZWFjdDEnLFxuICB0eXBlOiAnbGlrZScsXG4gIHVzZXJJZDogJ3VzZXIxJyxcbiAgLi4ub3ZlcnJpZGVzXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1vY2tUYWcgPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB0YWcgZGVzY3JpcHRpb24nLFxuICBuYW1lOiAndGVzdC10YWcnLFxuICB0YWdJZDogJ3RhZzEnLFxuICAuLi5vdmVycmlkZXNcbn0pO1xuXG4vLyBVdGlsaXR5IHRvIHNldCB1cCBjb21tb24gbW9ja3NcbmV4cG9ydCBjb25zdCBzZXR1cENvbW1vbk1vY2tzID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCBtb2NrID0ge1xuICAgIF9fZXNNb2R1bGU6IHRydWUsXG4gICAgdXNlRGI6IGplc3QuZm4oKSxcbiAgICBnZXRMaW1pdDogamVzdC5mbigpLFxuICAgIGdldERvY0lkOiBqZXN0LmZuKCksXG4gICAgc29ydElkczogamVzdC5mbigpLFxuICAgIGdldEdxbEZpZWxkczogamVzdC5mbigpLFxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHVzZURiOiBqZXN0LmZuKCksXG4gICAgICBnZXRMaW1pdDogamVzdC5mbigpLFxuICAgICAgZ2V0RG9jSWQ6IGplc3QuZm4oKSxcbiAgICAgIHNvcnRJZHM6IGplc3QuZm4oKSxcbiAgICAgIGdldEdxbEZpZWxkczogamVzdC5mbigpXG4gICAgfVxuICB9O1xuICBhd2FpdCBqZXN0Lmlzb2xhdGVNb2R1bGVzQXN5bmMoYXN5bmMgKCkgPT4ge1xuICAgIGplc3QudW5zdGFibGVfbW9ja01vZHVsZSgnLi9hcmFuZ29kYlV0aWxzLmpzJywgKCkgPT4gbW9jayk7XG4gIH0pO1xufTtcblxuLy8gVXRpbGl0eSB0byBjbGVhciBhbGwgbW9ja3NcbmV4cG9ydCBjb25zdCBjbGVhckFsbE1vY2tzID0gKCkgPT4ge1xuICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbn07XG5cbi8vIFV0aWxpdHkgdG8gY3JlYXRlIGEgdGVzdCBzdWl0ZSBmb3IgYWN0aW9uIGZ1bmN0aW9uc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGlvblRlc3RTdWl0ZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhY3Rpb25zUGF0aDogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIGFyZ3M6IFRlc3RBcmdzO1xuICAgIG1vY2tRdWVyeTogamVzdC5Nb2NrO1xuICAgIGV4cGVjdGVkUmVzdWx0OiBUZXN0UmV0dXJuVmFsdWU7XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUoYCR7bmFtZX0gYWN0aW9uc2AsICgpID0+IHtcbiAgICBsZXQgYWN0aW9uczogYW55O1xuXG4gICAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICAgIGFjdGlvbnMgPSBhd2FpdCBpbXBvcnQoYWN0aW9uc1BhdGgpO1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtuYW1lOiB0ZXN0TmFtZSwgYWN0aW9uTmFtZSwgYXJncywgbW9ja1F1ZXJ5LCBleHBlY3RlZFJlc3VsdH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgZXhlY3V0ZSAke2FjdGlvbk5hbWV9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IG1vY2tEYiA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuICAgICAgICAgIHF1ZXJ5OiBtb2NrUXVlcnlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGFjdHVhbCA9IGplc3QucmVxdWlyZUFjdHVhbCgnLi9hcmFuZ29kYlV0aWxzLmpzJykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGplc3QuZG9Nb2NrKCcuL2FyYW5nb2RiVXRpbHMuanMnLCAoKSA9PiAoe1xuICAgICAgICAgIHVzZURiOiBtb2NrRGIsXG4gICAgICAgICAgLi4uYWN0dWFsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoYWN0aW9uc1thY3Rpb25OYW1lXSBhcyBqZXN0Lk1vY2spKG1vY2tDb250ZXh0LCBhcmdzKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQWRhcHRlclRlc3RTdWl0ZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhZGFwdGVyUGF0aDogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IGFueVtdXG4pID0+IHtcbiAgZGVzY3JpYmUobmFtZSwgKCkgPT4ge1xuICAgIGxldCBhZGFwdGVyOiBhbnk7XG5cbiAgICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgYWRhcHRlciA9IGF3YWl0IGltcG9ydChhZGFwdGVyUGF0aCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe25hbWU6IHRlc3ROYW1lLCBpbnB1dCwgZXhwZWN0ZWRPdXRwdXR9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkICR7dGVzdE5hbWV9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSAoYWRhcHRlciBhcyB7cGFyc2VUYWc6IChpbnB1dDogVGVzdEFyZ3MpID0+IFRlc3RSZXR1cm5WYWx1ZX0pLnBhcnNlVGFnKGlucHV0KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVXRpbHNUZXN0U3VpdGUgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgdXRpbHNQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRPdXRwdXQ6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgfT5cbikgPT4ge1xuICBkZXNjcmliZShuYW1lLCAoKSA9PiB7XG4gICAgbGV0IHV0aWxzOiBhbnk7XG5cbiAgICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgdXRpbHMgPSBhd2FpdCBpbXBvcnQodXRpbHNQYXRoKTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7bmFtZTogdGVzdE5hbWUsIGlucHV0LCBleHBlY3RlZE91dHB1dH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgJHt0ZXN0TmFtZX1gLCAoKSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmKCh1dGlscyBhcyB7bG9nSW5mbz86IChpbnB1dDogVGVzdEFyZ3MpID0+IFRlc3RSZXR1cm5WYWx1ZX0pLmxvZ0luZm8pIHtcbiAgICAgICAgICByZXN1bHQgPSAodXRpbHMgYXMge2xvZ0luZm86IChpbnB1dDogVGVzdEFyZ3MpID0+IFRlc3RSZXR1cm5WYWx1ZX0pLmxvZ0luZm8oaW5wdXQpO1xuICAgICAgICB9IGVsc2UgaWYoKHV0aWxzIGFzIHtyZW1vdmVFbXB0eUtleXM/OiAoaW5wdXQ6IFRlc3RBcmdzKSA9PiBUZXN0UmV0dXJuVmFsdWV9KS5yZW1vdmVFbXB0eUtleXMpIHtcbiAgICAgICAgICByZXN1bHQgPSAodXRpbHMgYXMge3JlbW92ZUVtcHR5S2V5czogKGlucHV0OiBUZXN0QXJncykgPT4gVGVzdFJldHVyblZhbHVlfSkucmVtb3ZlRW1wdHlLZXlzKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1aXRhYmxlIGZ1bmN0aW9uIGZvdW5kIGluICR7dXRpbHNQYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTsiXSwibmFtZXMiOlsiamVzdCIsImNyZWF0ZU1vY2tDb250ZXh0Iiwib3ZlcnJpZGVzIiwiZGVmYXVsdFNlc3Npb24iLCJ1c2VyQWNjZXNzIiwidXNlcklkIiwidXNlcm5hbWUiLCJvdmVycmlkZVNlc3Npb24iLCJzZXNzaW9uIiwiY29udGV4dCIsImRhdGFiYXNlTmFtZSIsInVuZGVmaW5lZCIsImNyZWF0ZU1vY2tSZXNvbHZlSW5mbyIsImZpZWxkTmFtZSIsIm9wZXJhdGlvbiIsInBhcmVudFR5cGUiLCJyZXR1cm5UeXBlIiwic2NoZW1hIiwiZmllbGROb2RlcyIsImZyYWdtZW50cyIsInBhdGgiLCJrZXkiLCJwcmV2IiwidHlwZW5hbWUiLCJyb290VmFsdWUiLCJ2YXJpYWJsZVZhbHVlcyIsIm1vY2tBY3Rpb25zTW9kdWxlIiwibW9kdWxlUGF0aCIsIm1vY2tBY3Rpb25zIiwibW9ja3MiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJmbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImlzb2xhdGVNb2R1bGVzQXN5bmMiLCJ1bnN0YWJsZV9tb2NrTW9kdWxlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJtb2NrT2JqZWN0VHlwZSIsInR5cGVOYW1lIiwibW9jayIsImdldEZpZWxkIiwicmVzb2x2ZSIsImdldEZpZWxkcyIsImNyZWF0ZVF1ZXJ5VGVzdFN1aXRlIiwibmFtZSIsImFjdGlvbnNQYXRoIiwidGVzdENhc2VzIiwiZGVzY3JpYmUiLCJhY3Rpb25zIiwibW9ja0NvbnRleHQiLCJiZWZvcmVBbGwiLCJmb3JFYWNoIiwidGVzdE5hbWUiLCJhY3Rpb25OYW1lIiwiYXJncyIsImV4cGVjdGVkQ2FsbCIsIm1vY2tSZXR1cm5WYWx1ZSIsImVycm9yQ2FzZSIsIml0IiwibW9ja0ZuIiwiUHJvbWlzZSIsInJlc3VsdCIsImV4cGVjdCIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwidG9FcXVhbCIsInRvQmVOdWxsIiwiY3JlYXRlTXV0YXRpb25UZXN0U3VpdGUiLCJyZXF1aXJlc0F1dGgiLCJhdXRoVXNlcklkIiwiY3JlYXRlSW50ZWdyYXRpb25UZXN0U3VpdGUiLCJvYmplY3RUeXBlUGF0aCIsInN1Y2Nlc3NSZXR1cm5WYWx1ZSIsImVycm9yUmV0dXJuVmFsdWUiLCJ0ZXN0RXJyb3JDYXNlIiwiY3JlYXRlTW9ja1VzZXIiLCJlbWFpbCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY3JlYXRlTW9ja1Bvc3QiLCJjb250ZW50IiwiY3JlYXRlZEF0IiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwicG9zdElkIiwiY3JlYXRlTW9ja01lc3NhZ2UiLCJjb252ZXJzYXRpb25JZCIsIm1lc3NhZ2VJZCIsImNyZWF0ZU1vY2tSZWFjdGlvbiIsInJlYWN0aW9uSWQiLCJ0eXBlIiwiY3JlYXRlTW9ja1RhZyIsImRlc2NyaXB0aW9uIiwidGFnSWQiLCJzZXR1cENvbW1vbk1vY2tzIiwidXNlRGIiLCJnZXRMaW1pdCIsImdldERvY0lkIiwic29ydElkcyIsImdldEdxbEZpZWxkcyIsImNsZWFyQWxsTW9ja3MiLCJjcmVhdGVBY3Rpb25UZXN0U3VpdGUiLCJtb2NrUXVlcnkiLCJleHBlY3RlZFJlc3VsdCIsIm1vY2tEYiIsInF1ZXJ5IiwiYWN0dWFsIiwicmVxdWlyZUFjdHVhbCIsImRvTW9jayIsImNyZWF0ZUFkYXB0ZXJUZXN0U3VpdGUiLCJhZGFwdGVyUGF0aCIsImFkYXB0ZXIiLCJpbnB1dCIsImV4cGVjdGVkT3V0cHV0IiwicGFyc2VUYWciLCJjcmVhdGVVdGlsc1Rlc3RTdWl0ZSIsInV0aWxzUGF0aCIsInV0aWxzIiwibG9nSW5mbyIsInJlbW92ZUVtcHR5S2V5cyIsIkVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxJQUFJLFFBQU8sZ0JBQWdCO0FBWW5DLE9BQU8sTUFBTUMsb0JBQW9CLENBQUNDLFlBQTJCLENBQUMsQ0FBQztJ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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translationQueue.d.ts","sourceRoot":"","sources":["../../src/utils/translationQueue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAiBtD,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED,cAAM,gBAAgB;IACpB,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,YAAY,CAAM;IAEpB,SAAS,CACb,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,iBAAiB,EAAE,EACjC,MAAM,GAAE,MAAa,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAmBpB,cAAc;IAiCtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,KAAK,IAAI,IAAI;IAUb,OAAO,CAAC,WAAW;YAIL,YAAY;IAuC1B,OAAO,CAAC,WAAW;CAGpB;AAED,QAAA,MAAM,gBAAgB,kBAAyB,CAAC;AAEhD,eAAO,MAAM,IAAI,GACf,SAAS,UAAU,EACnB,cAAc,iBAAiB,EAAE,EACjC,SAAS,MAAM,KACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAA8D,CAAC;AAEhG,eAAO,MAAM,KAAK,QAAO,OAAO,CAAC,IAAI,CAA6B,CAAC;AACnE,eAAO,MAAM,KAAK,QAAO,IAAgC,CAAC;AAE1D,YAAY,EAAC,iBAAiB,EAAC,CAAC;AAE9B,OAAO,EAAC,gBAAgB,EAAC,CAAC"}
|
|
@@ -31,3 +31,4 @@ export declare function getNotificationMessages(context: ApiContext, locale?: Lo
|
|
|
31
31
|
export declare function performanceComparison(context: ApiContext): Promise<Record<string, string>>;
|
|
32
32
|
export declare function getUserGreeting(context: ApiContext, userLocale?: string, username?: string): Promise<string>;
|
|
33
33
|
export declare function ensureAllTranslationsProcessed(): Promise<void>;
|
|
34
|
+
//# sourceMappingURL=translationQueue.example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translationQueue.example.d.ts","sourceRoot":"","sources":["../../src/utils/translationQueue.example.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAGtD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAE,MAAa,mCA6BlF;AAGD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAa,mCA2BzG;AAGD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,UAAU,mDA0BhE;AAGD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAE,MAAa,mCA2BrF;AAGD,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAE,MAAa,mCAmB5F;AAGD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAa,mCAuBnG;AAGD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE;IACR,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,EACD,MAAM,GAAE,MAAa;;;;;GAoCtB;AAGD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAE,MAAa,mCA4BvF;AAGD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,UAAU,mCAgB9D;AAGD,wBAAsB,eAAe,CACnC,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,mBAiClB;AAGD,wBAAsB,8BAA8B,kBAInD"}
|