@nlabs/reaktor 0.10.2 → 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/coverage/block-navigation.js +1 -1
- package/coverage/index.html +23 -23
- package/coverage/sorter.js +21 -7
- package/lib/actions/apps.d.ts +1 -0
- package/lib/actions/apps.d.ts.map +1 -0
- package/lib/actions/apps.js +218 -17
- package/lib/actions/connections.d.ts +1 -0
- package/lib/actions/connections.d.ts.map +1 -0
- package/lib/actions/connections.js +61 -6
- package/lib/actions/content.d.ts +1 -0
- package/lib/actions/content.d.ts.map +1 -0
- package/lib/actions/content.js +232 -9
- package/lib/actions/conversations.d.ts +1 -0
- package/lib/actions/conversations.d.ts.map +1 -0
- package/lib/actions/conversations.js +321 -19
- package/lib/actions/dynamodb.d.ts +1 -0
- package/lib/actions/dynamodb.d.ts.map +1 -0
- package/lib/actions/dynamodb.js +119 -2
- package/lib/actions/email.d.ts +1 -0
- package/lib/actions/email.d.ts.map +1 -0
- package/lib/actions/email.js +56 -2
- package/lib/actions/files.d.ts +1 -0
- package/lib/actions/files.d.ts.map +1 -0
- package/lib/actions/files.js +226 -5
- package/lib/actions/groups.d.ts +1 -0
- package/lib/actions/groups.d.ts.map +1 -0
- package/lib/actions/groups.js +234 -19
- package/lib/actions/images.d.ts +1 -0
- package/lib/actions/images.d.ts.map +1 -0
- package/lib/actions/images.js +688 -31
- package/lib/actions/index.d.ts +2 -0
- package/lib/actions/index.d.ts.map +1 -0
- package/lib/actions/index.js +29 -2
- package/lib/actions/ios.d.ts +1 -0
- package/lib/actions/ios.d.ts.map +1 -0
- package/lib/actions/ios.js +228 -9
- package/lib/actions/locations.d.ts +1 -0
- package/lib/actions/locations.d.ts.map +1 -0
- package/lib/actions/locations.js +111 -7
- package/lib/actions/messages.d.ts +1 -0
- package/lib/actions/messages.d.ts.map +1 -0
- package/lib/actions/messages.js +155 -21
- package/lib/actions/notifications.d.ts +1 -0
- package/lib/actions/notifications.d.ts.map +1 -0
- package/lib/actions/notifications.js +37 -2
- package/lib/actions/payments.d.ts +1 -0
- package/lib/actions/payments.d.ts.map +1 -0
- package/lib/actions/payments.js +428 -11
- package/lib/actions/posts.d.ts +1 -0
- package/lib/actions/posts.d.ts.map +1 -0
- package/lib/actions/posts.js +540 -75
- package/lib/actions/profiles.d.ts +1 -0
- package/lib/actions/profiles.d.ts.map +1 -0
- package/lib/actions/profiles.js +58 -8
- package/lib/actions/reactions.d.ts +1 -0
- package/lib/actions/reactions.d.ts.map +1 -0
- package/lib/actions/reactions.js +276 -25
- package/lib/actions/s3.d.ts +1 -0
- package/lib/actions/s3.d.ts.map +1 -0
- package/lib/actions/s3.js +102 -2
- package/lib/actions/search.d.ts +1 -0
- package/lib/actions/search.d.ts.map +1 -0
- package/lib/actions/search.js +81 -5
- package/lib/actions/sms.d.ts +1 -0
- package/lib/actions/sms.d.ts.map +1 -0
- package/lib/actions/sms.js +52 -2
- package/lib/actions/statistics.d.ts +1 -0
- package/lib/actions/statistics.d.ts.map +1 -0
- package/lib/actions/statistics.js +41 -6
- package/lib/actions/subscriptions.d.ts +1 -0
- package/lib/actions/subscriptions.d.ts.map +1 -0
- package/lib/actions/subscriptions.js +196 -6
- package/lib/actions/tags.d.ts +1 -0
- package/lib/actions/tags.d.ts.map +1 -0
- package/lib/actions/tags.js +258 -19
- package/lib/actions/users.d.ts +1 -0
- package/lib/actions/users.d.ts.map +1 -0
- package/lib/actions/users.js +781 -66
- package/lib/actions/videos.d.ts +26 -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 +148 -14
- package/lib/adapters/arangoAdapter.d.ts +1 -0
- package/lib/adapters/arangoAdapter.d.ts.map +1 -0
- package/lib/adapters/arangoAdapter.js +70 -2
- package/lib/adapters/contentAdapter.d.ts +1 -0
- package/lib/adapters/contentAdapter.d.ts.map +1 -0
- package/lib/adapters/contentAdapter.js +108 -2
- package/lib/adapters/fileAdapter.d.ts +1 -0
- package/lib/adapters/fileAdapter.d.ts.map +1 -0
- package/lib/adapters/fileAdapter.js +119 -2
- package/lib/adapters/imageAdapter.d.ts +1 -0
- package/lib/adapters/imageAdapter.d.ts.map +1 -0
- package/lib/adapters/imageAdapter.js +112 -2
- package/lib/adapters/index.d.ts +1 -0
- package/lib/adapters/index.d.ts.map +1 -0
- package/lib/adapters/index.js +11 -2
- package/lib/adapters/messageAdapter.d.ts +1 -0
- package/lib/adapters/messageAdapter.d.ts.map +1 -0
- package/lib/adapters/messageAdapter.js +82 -2
- package/lib/adapters/postAdapter.d.ts +1 -0
- package/lib/adapters/postAdapter.d.ts.map +1 -0
- package/lib/adapters/postAdapter.js +117 -2
- package/lib/adapters/reaktorAdapter.d.ts +1 -0
- package/lib/adapters/reaktorAdapter.d.ts.map +1 -0
- package/lib/adapters/reaktorAdapter.js +59 -2
- package/lib/adapters/tagAdapter.d.ts +1 -0
- package/lib/adapters/tagAdapter.d.ts.map +1 -0
- package/lib/adapters/tagAdapter.js +99 -2
- package/lib/adapters/userAdapter.d.ts +1 -0
- package/lib/adapters/userAdapter.d.ts.map +1 -0
- package/lib/adapters/userAdapter.js +264 -2
- package/lib/config.d.ts +1 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +161 -2
- package/lib/handlers/graphqlHandler.d.ts +1 -0
- package/lib/handlers/graphqlHandler.d.ts.map +1 -0
- package/lib/handlers/graphqlHandler.js +118 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +18 -2
- 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 +89 -14
- package/lib/lambdas/authorizer.d.ts +1 -0
- package/lib/lambdas/authorizer.d.ts.map +1 -0
- package/lib/lambdas/authorizer.js +41 -2
- package/lib/lambdas/connection.d.ts +1 -0
- package/lib/lambdas/connection.d.ts.map +1 -0
- package/lib/lambdas/connection.js +85 -2
- 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 -2
- 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 -2
- package/lib/mocks/conversation.d.ts +1 -0
- package/lib/mocks/conversation.d.ts.map +1 -0
- package/lib/mocks/conversation.js +10 -2
- package/lib/mocks/file.d.ts +1 -0
- package/lib/mocks/file.d.ts.map +1 -0
- package/lib/mocks/file.js +13 -2
- package/lib/mocks/group.d.ts +1 -0
- package/lib/mocks/group.d.ts.map +1 -0
- package/lib/mocks/group.js +20 -2
- package/lib/mocks/image.d.ts +1 -0
- package/lib/mocks/image.d.ts.map +1 -0
- package/lib/mocks/image.js +17 -2
- package/lib/mocks/post.d.ts +1 -0
- package/lib/mocks/post.d.ts.map +1 -0
- package/lib/mocks/post.js +28 -2
- package/lib/mocks/tag.d.ts +1 -0
- package/lib/mocks/tag.d.ts.map +1 -0
- package/lib/mocks/tag.js +12 -2
- package/lib/mocks/user.d.ts +1 -0
- package/lib/mocks/user.d.ts.map +1 -0
- package/lib/mocks/user.js +61 -2
- package/lib/mocks/video.d.ts +4 -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 -2
- package/lib/mutations/index.d.ts +1 -0
- package/lib/mutations/index.d.ts.map +1 -0
- package/lib/mutations/index.js +29 -2
- package/lib/mutations/locations.d.ts +1 -0
- package/lib/mutations/locations.d.ts.map +1 -0
- package/lib/mutations/locations.js +22 -2
- package/lib/mutations/messages.d.ts +1 -0
- package/lib/mutations/messages.d.ts.map +1 -0
- package/lib/mutations/messages.js +75 -2
- package/lib/mutations/posts.d.ts +1 -0
- package/lib/mutations/posts.d.ts.map +1 -0
- package/lib/mutations/posts.js +31 -2
- package/lib/mutations/profiles.d.ts +1 -0
- package/lib/mutations/profiles.d.ts.map +1 -0
- package/lib/mutations/profiles.js +78 -2
- package/lib/mutations/reactions.d.ts +1 -0
- package/lib/mutations/reactions.d.ts.map +1 -0
- package/lib/mutations/reactions.js +29 -2
- package/lib/mutations/statistics.d.ts +1 -0
- package/lib/mutations/statistics.d.ts.map +1 -0
- package/lib/mutations/statistics.js +17 -2
- package/lib/mutations/subscriptions.d.ts +1 -0
- package/lib/mutations/subscriptions.d.ts.map +1 -0
- package/lib/mutations/subscriptions.js +38 -2
- package/lib/mutations/tags.d.ts +1 -0
- package/lib/mutations/tags.d.ts.map +1 -0
- package/lib/mutations/tags.js +109 -2
- package/lib/mutations/users.d.ts +1 -0
- package/lib/mutations/users.d.ts.map +1 -0
- package/lib/mutations/users.js +129 -2
- package/lib/objectTypes/app.d.ts +1 -0
- package/lib/objectTypes/app.d.ts.map +1 -0
- package/lib/objectTypes/app.js +147 -2
- package/lib/objectTypes/bankAccount.d.ts +1 -0
- package/lib/objectTypes/bankAccount.d.ts.map +1 -0
- package/lib/objectTypes/bankAccount.js +54 -2
- package/lib/objectTypes/connection.d.ts +1 -0
- package/lib/objectTypes/connection.d.ts.map +1 -0
- package/lib/objectTypes/connection.js +26 -2
- package/lib/objectTypes/content.d.ts +1 -0
- package/lib/objectTypes/content.d.ts.map +1 -0
- package/lib/objectTypes/content.js +79 -2
- package/lib/objectTypes/conversation.d.ts +1 -0
- package/lib/objectTypes/conversation.d.ts.map +1 -0
- package/lib/objectTypes/conversation.js +53 -2
- package/lib/objectTypes/creditCard.d.ts +1 -0
- package/lib/objectTypes/creditCard.d.ts.map +1 -0
- package/lib/objectTypes/creditCard.js +64 -2
- package/lib/objectTypes/document.d.ts +1 -0
- package/lib/objectTypes/document.d.ts.map +1 -0
- package/lib/objectTypes/document.js +21 -2
- package/lib/objectTypes/error.d.ts +1 -0
- package/lib/objectTypes/error.d.ts.map +1 -0
- package/lib/objectTypes/error.js +24 -2
- package/lib/objectTypes/external.d.ts +1 -0
- package/lib/objectTypes/external.d.ts.map +1 -0
- package/lib/objectTypes/external.js +52 -2
- package/lib/objectTypes/file.d.ts +1 -0
- package/lib/objectTypes/file.d.ts.map +1 -0
- package/lib/objectTypes/file.js +76 -2
- package/lib/objectTypes/filter.d.ts +1 -0
- package/lib/objectTypes/filter.d.ts.map +1 -0
- package/lib/objectTypes/filter.js +21 -2
- package/lib/objectTypes/group.d.ts +1 -0
- package/lib/objectTypes/group.d.ts.map +1 -0
- package/lib/objectTypes/group.js +97 -2
- package/lib/objectTypes/iapSubscription.d.ts +1 -0
- package/lib/objectTypes/iapSubscription.d.ts.map +1 -0
- package/lib/objectTypes/iapSubscription.js +18 -2
- package/lib/objectTypes/image.d.ts +1 -0
- package/lib/objectTypes/image.d.ts.map +1 -0
- package/lib/objectTypes/image.js +105 -2
- package/lib/objectTypes/index.d.ts +1 -0
- package/lib/objectTypes/index.d.ts.map +1 -0
- package/lib/objectTypes/index.js +28 -2
- package/lib/objectTypes/location.d.ts +1 -0
- package/lib/objectTypes/location.d.ts.map +1 -0
- package/lib/objectTypes/location.js +85 -2
- package/lib/objectTypes/message.d.ts +1 -0
- package/lib/objectTypes/message.d.ts.map +1 -0
- package/lib/objectTypes/message.js +72 -2
- package/lib/objectTypes/passcode.d.ts +1 -0
- package/lib/objectTypes/passcode.d.ts.map +1 -0
- package/lib/objectTypes/passcode.js +20 -2
- package/lib/objectTypes/plan.d.ts +1 -0
- package/lib/objectTypes/plan.d.ts.map +1 -0
- package/lib/objectTypes/plan.js +71 -2
- package/lib/objectTypes/post.d.ts +1 -0
- package/lib/objectTypes/post.d.ts.map +1 -0
- package/lib/objectTypes/post.js +101 -2
- package/lib/objectTypes/profile.d.ts +1 -0
- package/lib/objectTypes/profile.d.ts.map +1 -0
- package/lib/objectTypes/profile.js +68 -2
- package/lib/objectTypes/reaction.d.ts +1 -0
- package/lib/objectTypes/reaction.d.ts.map +1 -0
- package/lib/objectTypes/reaction.js +37 -2
- package/lib/objectTypes/relation.d.ts +1 -0
- package/lib/objectTypes/relation.d.ts.map +1 -0
- package/lib/objectTypes/relation.js +27 -2
- package/lib/objectTypes/search.d.ts +1 -0
- package/lib/objectTypes/search.d.ts.map +1 -0
- package/lib/objectTypes/search.js +50 -2
- package/lib/objectTypes/statistics.d.ts +1 -0
- package/lib/objectTypes/statistics.d.ts.map +1 -0
- package/lib/objectTypes/statistics.js +17 -2
- package/lib/objectTypes/subscription.d.ts +1 -0
- package/lib/objectTypes/subscription.d.ts.map +1 -0
- package/lib/objectTypes/subscription.js +102 -2
- package/lib/objectTypes/tag.d.ts +1 -0
- package/lib/objectTypes/tag.d.ts.map +1 -0
- package/lib/objectTypes/tag.js +41 -2
- package/lib/objectTypes/user.d.ts +1 -0
- package/lib/objectTypes/user.d.ts.map +1 -0
- package/lib/objectTypes/user.js +111 -2
- package/lib/queries/content.d.ts +1 -0
- package/lib/queries/content.d.ts.map +1 -0
- package/lib/queries/content.js +50 -2
- package/lib/queries/index.d.ts +1 -0
- package/lib/queries/index.d.ts.map +1 -0
- package/lib/queries/index.js +27 -2
- package/lib/queries/locations.d.ts +1 -0
- package/lib/queries/locations.d.ts.map +1 -0
- package/lib/queries/locations.js +23 -2
- package/lib/queries/messages.d.ts +1 -0
- package/lib/queries/messages.d.ts.map +1 -0
- package/lib/queries/messages.js +35 -2
- package/lib/queries/posts.d.ts +1 -0
- package/lib/queries/posts.d.ts.map +1 -0
- package/lib/queries/posts.js +154 -2
- package/lib/queries/reactions.d.ts +1 -0
- package/lib/queries/reactions.d.ts.map +1 -0
- package/lib/queries/reactions.js +34 -2
- package/lib/queries/statistics.d.ts +1 -0
- package/lib/queries/statistics.d.ts.map +1 -0
- package/lib/queries/statistics.js +17 -2
- package/lib/queries/subscriptions.d.ts +1 -0
- package/lib/queries/subscriptions.d.ts.map +1 -0
- package/lib/queries/subscriptions.js +21 -2
- package/lib/queries/tags.d.ts +1 -0
- package/lib/queries/tags.d.ts.map +1 -0
- package/lib/queries/tags.js +56 -2
- package/lib/queries/users.d.ts +1 -0
- package/lib/queries/users.d.ts.map +1 -0
- package/lib/queries/users.js +39 -2
- 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 +4 -3
- 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 +4 -3
- 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 +4 -3
- 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 +4 -3
- 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 +4 -3
- 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 -2
- 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 -2
- 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 -2
- 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 -2
- 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 -2
- 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 -2
- package/lib/types/arangodb.types.d.ts +2 -1
- package/lib/types/arangodb.types.d.ts.map +1 -0
- package/lib/types/arangodb.types.js +6 -1
- 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 -1
- 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 -1
- 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 -1
- 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 -1
- 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 -1
- 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 -2
- 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 -1
- 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 -1
- 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 -1
- 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 -1
- package/lib/types/index.d.ts +2 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +28 -2
- 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 -1
- 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 -1
- 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 -1
- 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 -1
- 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 -1
- 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 -1
- 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 -1
- 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 -1
- 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 -1
- package/lib/types/videos.types.d.ts +47 -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 -1
- package/lib/utils/adapterUtils.d.ts +1 -0
- package/lib/utils/adapterUtils.d.ts.map +1 -0
- package/lib/utils/adapterUtils.js +23 -2
- package/lib/utils/analyticsUtils.d.ts +1 -0
- package/lib/utils/analyticsUtils.d.ts.map +1 -0
- package/lib/utils/analyticsUtils.js +45 -2
- package/lib/utils/arangodbUtils.d.ts +1 -0
- package/lib/utils/arangodbUtils.d.ts.map +1 -0
- package/lib/utils/arangodbUtils.js +128 -5
- package/lib/utils/authUtils.d.ts +1 -0
- package/lib/utils/authUtils.d.ts.map +1 -0
- package/lib/utils/authUtils.js +54 -2
- package/lib/utils/contextUtils.d.ts +1 -0
- package/lib/utils/contextUtils.d.ts.map +1 -0
- package/lib/utils/contextUtils.js +10 -2
- 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 +92 -5
- package/lib/utils/dbI18n.js +28 -2
- package/lib/utils/googleTranslate.d.ts +1 -0
- package/lib/utils/googleTranslate.d.ts.map +1 -0
- package/lib/utils/googleTranslate.js +70 -2
- package/lib/utils/graphqlUtils.d.ts +1 -0
- package/lib/utils/graphqlUtils.d.ts.map +1 -0
- package/lib/utils/graphqlUtils.js +11 -2
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +19 -2
- package/lib/utils/languageDetection.d.ts +1 -0
- package/lib/utils/languageDetection.d.ts.map +1 -0
- package/lib/utils/languageDetection.js +120 -2
- 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 -2
- package/lib/utils/localeUtils.js +71 -2
- package/lib/utils/middlewareUtils.d.ts +1 -0
- package/lib/utils/middlewareUtils.d.ts.map +1 -0
- package/lib/utils/middlewareUtils.js +10 -2
- package/lib/utils/sessionUtils.d.ts +1 -0
- package/lib/utils/sessionUtils.d.ts.map +1 -0
- package/lib/utils/sessionUtils.js +26 -2
- package/lib/utils/stripeUtils.d.ts +2 -1
- package/lib/utils/stripeUtils.d.ts.map +1 -0
- package/lib/utils/stripeUtils.js +12 -2
- package/lib/utils/templateUtils.d.ts +1 -0
- package/lib/utils/templateUtils.d.ts.map +1 -0
- package/lib/utils/templateUtils.js +11 -2
- package/lib/utils/testUtils.d.ts +1 -0
- package/lib/utils/testUtils.d.ts.map +1 -0
- package/lib/utils/testUtils.js +292 -2
- 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 -2
- package/lib/utils/translationQueue.js +113 -2
- package/package.json +47 -29
|
@@ -1,2 +1,340 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3RyYW5zbGF0aW9uUXVldWUuZXhhbXBsZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKlxuICogRXhhbXBsZSB1c2FnZSBvZiB0aGUgdHJhbnNsYXRpb24gcXVldWUgc3lzdGVtIHdpdGggR29vZ2xlIFRyYW5zbGF0ZSBpbnRlZ3JhdGlvblxuICpcbiAqIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byB1c2UgdGhlIG5ldyB0cmFuc2xhdGlvbiBxdWV1ZSB0aGF0IGF1dG9tYXRpY2FsbHlcbiAqIHRyYW5zbGF0ZXMgY29udGVudCB1c2luZyBHb29nbGUgVHJhbnNsYXRlIEFQSSB3aGVuIG5lZWRlZC5cbiAqL1xuXG5pbXBvcnQge2ZsdXNoLCBpMThuLCB0eXBlIFRyYW5zbGF0aW9uT2JqZWN0fSBmcm9tICcuL3RyYW5zbGF0aW9uUXVldWUuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7TG9jYWxlfSBmcm9tICcuLi90eXBlcy9jb250ZW50LnR5cGVzLmpzJztcblxuLy8gRXhhbXBsZSAxOiBCYXNpYyB0cmFuc2xhdGlvbnMgLSB3aWxsIHVzZSBkYXRhYmFzZSBvciB0cmFuc2xhdGUgYXMgbmVlZGVkXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V2VsY29tZU1lc3NhZ2VzKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2FsZTogTG9jYWxlID0gJ2VuJykge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnd2VsY29tZS50aXRsZScsXG4gICAgICBmYWxsYmFjazogJ1dlbGNvbWUgdG8gVG9yY2hPbmUhJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnd2VsY29tZS5zdWJ0aXRsZScsXG4gICAgICBmYWxsYmFjazogJ1lvdXIgcGVyc29uYWwgQUkgYXNzaXN0YW50J1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnd2VsY29tZS5kZXNjcmlwdGlvbicsXG4gICAgICBmYWxsYmFjazogJ0dldCBzdGFydGVkIGJ5IGV4cGxvcmluZyBvdXIgZmVhdHVyZXMnXG4gICAgfVxuICBdO1xuXG4gIC8vIFRoaXMgd2lsbDpcbiAgLy8gMS4gQ2hlY2sgZGF0YWJhc2UgZm9yIGV4aXN0aW5nIHRyYW5zbGF0aW9uc1xuICAvLyAyLiBJZiBub3QgZm91bmQgYW5kIGxvY2FsZSBpcyBkZWZhdWx0IChlbiksIHNhdmUgZmFsbGJhY2sgdG8gREJcbiAgLy8gMy4gSWYgbm90IGZvdW5kIGFuZCBsb2NhbGUgaXMgZGlmZmVyZW50LCB0cmFuc2xhdGUgZnJvbSBkZWZhdWx0IGxvY2FsZVxuICAvLyA0LiBTYXZlIHRyYW5zbGF0ZWQgY29udGVudCB0byBEQiBmb3IgZnV0dXJlIHVzZVxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuIChjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbiAgLy8gUmV0dXJuczoge1xuICAvLyAgICd3ZWxjb21lLnRpdGxlJzogJ1dlbGNvbWUgdG8gVG9yY2hPbmUhJyAob3IgdHJhbnNsYXRlZCB2ZXJzaW9uKSxcbiAgLy8gICAnd2VsY29tZS5zdWJ0aXRsZSc6ICdZb3VyIHBlcnNvbmFsIEFJIGFzc2lzdGFudCcgKG9yIHRyYW5zbGF0ZWQgdmVyc2lvbiksXG4gIC8vICAgJ3dlbGNvbWUuZGVzY3JpcHRpb24nOiAnR2V0IHN0YXJ0ZWQgYnkgZXhwbG9yaW5nIG91ciBmZWF0dXJlcycgKG9yIHRyYW5zbGF0ZWQgdmVyc2lvbilcbiAgLy8gfVxufVxuXG4vLyBFeGFtcGxlIDI6IFRyYW5zbGF0aW9ucyB3aXRoIGludGVycG9sYXRpb25cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQZXJzb25hbGl6ZWRNZXNzYWdlcyhjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VybmFtZTogc3RyaW5nLCBsb2NhbGU6IExvY2FsZSA9ICdlbicpIHtcbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgIHtcbiAgICAgIGtleTogJ3VzZXIud2VsY29tZScsXG4gICAgICBmYWxsYmFjazogJ1dlbGNvbWUgYmFjaywge3t1c2VybmFtZX19IScsXG4gICAgICBwYXJhbXM6IHt1c2VybmFtZX1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ3VzZXIubm90aWZpY2F0aW9ucycsXG4gICAgICBmYWxsYmFjazogJ1lvdSBoYXZlIHt7Y291bnR9fSBuZXcgbm90aWZpY2F0aW9ucycsXG4gICAgICBwYXJhbXM6IHtjb3VudDogNX1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ3VzZXIubGFzdExvZ2luJyxcbiAgICAgIGZhbGxiYWNrOiAnTGFzdCBsb2dpbjoge3tkYXRlfX0nLFxuICAgICAgcGFyYW1zOiB7ZGF0ZTogbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoKX1cbiAgICB9XG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbiAgLy8gUmV0dXJuczoge1xuICAvLyAgICd1c2VyLndlbGNvbWUnOiAnV2VsY29tZSBiYWNrLCBBbGljZSEnIChvciB0cmFuc2xhdGVkIHdpdGggaW50ZXJwb2xhdGlvbiksXG4gIC8vICAgJ3VzZXIubm90aWZpY2F0aW9ucyc6ICdZb3UgaGF2ZSA1IG5ldyBub3RpZmljYXRpb25zJyAob3IgdHJhbnNsYXRlZCB3aXRoIGludGVycG9sYXRpb24pLFxuICAvLyAgICd1c2VyLmxhc3RMb2dpbic6ICdMYXN0IGxvZ2luOiAxLzE1LzIwMjUnIChvciB0cmFuc2xhdGVkIHdpdGggaW50ZXJwb2xhdGlvbilcbiAgLy8gfVxufVxuXG4vLyBFeGFtcGxlIDM6IE11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNdWx0aUxhbmd1YWdlQ29udGVudChjb250ZXh0OiBBcGlDb250ZXh0KSB7XG4gIC8vIEdldCBjb250ZW50IGluIG11bHRpcGxlIGxhbmd1YWdlc1xuICBjb25zdCBsYW5ndWFnZXM6IExvY2FsZVtdID0gWydlbicsICdlcycsICdmciddO1xuICBjb25zdCByZXN1bHRzOiBSZWNvcmQ8TG9jYWxlLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9IGFzIGFueTtcblxuICBmb3IoY29uc3QgbG9jYWxlIG9mIGxhbmd1YWdlcykge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSA9IFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAnYXBwLm5hbWUnLFxuICAgICAgICBmYWxsYmFjazogJ1RvcmNoT25lJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnYXBwLnRhZ2xpbmUnLFxuICAgICAgICBmYWxsYmFjazogJ1lvdXIgQUkgQXNzaXN0YW50J1xuICAgICAgfVxuICAgIF07XG5cbiAgICByZXN1bHRzW2xvY2FsZV0gPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xuICAvLyBSZXR1cm5zOiB7XG4gIC8vICAgZW46IHsgJ2FwcC5uYW1lJzogJ1RvcmNoT25lJywgJ2FwcC50YWdsaW5lJzogJ1lvdXIgQUkgQXNzaXN0YW50JyB9LFxuICAvLyAgIGVzOiB7ICdhcHAubmFtZSc6ICdUb3JjaE9uZScsICdhcHAudGFnbGluZSc6ICdUdSBBc2lzdGVudGUgZGUgSUEnIH0sXG4gIC8vICAgZnI6IHsgJ2FwcC5uYW1lJzogJ1RvcmNoT25lJywgJ2FwcC50YWdsaW5lJzogJ1ZvdHJlIEFzc2lzdGFudCBJQScgfVxuICAvLyB9XG59XG5cbi8vIEV4YW1wbGUgNDogRXJyb3IgaGFuZGxpbmcgYW5kIGZhbGxiYWNrc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJvYnVzdFRyYW5zbGF0aW9ucyhjb250ZXh0OiBBcGlDb250ZXh0LCBsb2NhbGU6IExvY2FsZSA9ICdlbicpIHtcbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgIHtcbiAgICAgIGtleTogJ2Vycm9yLm5vdEZvdW5kJyxcbiAgICAgIGZhbGxiYWNrOiAnQ29udGVudCBub3QgZm91bmQnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdlcnJvci5zZXJ2ZXJFcnJvcicsXG4gICAgICBmYWxsYmFjazogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ3N1Y2Nlc3Muc2F2ZWQnLFxuICAgICAgZmFsbGJhY2s6ICdDb250ZW50IHNhdmVkIHN1Y2Nlc3NmdWxseSdcbiAgICB9XG4gIF07XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignVHJhbnNsYXRpb24gZXJyb3I6JywgZXJyb3IpO1xuICAgIC8vIFJldHVybiBmYWxsYmFja3MgaWYgdHJhbnNsYXRpb24gZmFpbHNcbiAgICByZXR1cm4gdHJhbnNsYXRpb25zLnJlZHVjZSgoYWNjLCB0KSA9PiB7XG4gICAgICBhY2NbdC5rZXldID0gdC5mYWxsYmFjayB8fCAnJztcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG4gIH1cbn1cblxuLy8gRXhhbXBsZSA1OiBCYXRjaCBwcm9jZXNzaW5nIHdpdGggZmx1c2hcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzTGFyZ2VUcmFuc2xhdGlvbkJhdGNoKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2FsZTogTG9jYWxlID0gJ2VuJykge1xuICAvLyBDcmVhdGUgYSBsYXJnZSBiYXRjaCBvZiB0cmFuc2xhdGlvbnNcbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW107XG5cbiAgZm9yKGxldCBpID0gMTsgaSA8PSAxMDA7IGkrKykge1xuICAgIHRyYW5zbGF0aW9ucy5wdXNoKHtcbiAgICAgIGtleTogYGl0ZW0uJHtpfS50aXRsZWAsXG4gICAgICBmYWxsYmFjazogYEl0ZW0gJHtpfSBUaXRsZWAsXG4gICAgICBwYXJhbXM6IHtudW1iZXI6IGl9XG4gICAgfSk7XG4gIH1cblxuICAvLyBQcm9jZXNzIHRoZSBiYXRjaFxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICAvLyBFbnN1cmUgYWxsIHBlbmRpbmcgdHJhbnNsYXRpb25zIGFyZSBwcm9jZXNzZWRcbiAgYXdhaXQgZmx1c2goKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBFeGFtcGxlIDY6IEVycm9yIGhhbmRsaW5nIHdpdGggZmFsbGJhY2tzXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlcyhjb250ZXh0OiBBcGlDb250ZXh0LCBlcnJvckNvZGU6IHN0cmluZywgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6IGBlcnJvci4ke2Vycm9yQ29kZX1gLFxuICAgICAgZmFsbGJhY2s6IGBBbiBlcnJvciBvY2N1cnJlZDogJHtlcnJvckNvZGV9YCxcbiAgICAgIHBhcmFtczoge2Vycm9yQ29kZX1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2Vycm9yLmNvbnRhY3RTdXBwb3J0JyxcbiAgICAgIGZhbGxiYWNrOiAnUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBpZiB0aGlzIHByb2JsZW0gcGVyc2lzdHMuJyxcbiAgICAgIHBhcmFtczoge31cbiAgICB9XG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgLy8gSWYgZGF0YWJhc2UgaXMgdW5hdmFpbGFibGUsIHdpbGwgcmV0dXJuIGZhbGxiYWNrczpcbiAgLy8ge1xuICAvLyAgICdlcnJvci5JTlZBTElEX0VNQUlMJzogJ0FuIGVycm9yIG9jY3VycmVkOiBJTlZBTElEX0VNQUlMJyxcbiAgLy8gICAnZXJyb3IuY29udGFjdFN1cHBvcnQnOiAnUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBpZiB0aGlzIHByb2JsZW0gcGVyc2lzdHMuJ1xuICAvLyB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gRXhhbXBsZSA3OiBDb21wbGV4IGVtYWlsIHRlbXBsYXRlIHdpdGggbXVsdGlwbGUgaW50ZXJwb2xhdGlvbnNcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUVtYWlsVGVtcGxhdGUoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJEYXRhOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgb3JkZXJJZDogc3RyaW5nO1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgaXRlbXM6IG51bWJlcjtcbiAgfSxcbiAgbG9jYWxlOiBMb2NhbGUgPSAnZW4nXG4pIHtcbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgIHtcbiAgICAgIGtleTogJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLnN1YmplY3QnLFxuICAgICAgZmFsbGJhY2s6ICdPcmRlciB7e29yZGVySWR9fSBDb25maXJtZWQnLFxuICAgICAgcGFyYW1zOiB7b3JkZXJJZDogdXNlckRhdGEub3JkZXJJZH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmdyZWV0aW5nJyxcbiAgICAgIGZhbGxiYWNrOiAnSGVsbG8ge3tuYW1lfX0sJyxcbiAgICAgIHBhcmFtczoge25hbWU6IHVzZXJEYXRhLm5hbWV9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdlbWFpbC5vcmRlckNvbmZpcm1hdGlvbi5ib2R5JyxcbiAgICAgIGZhbGxiYWNrOiAnWW91ciBvcmRlciB7e29yZGVySWR9fSBoYXMgYmVlbiBjb25maXJtZWQuIFRvdGFsOiAke3t0b3RhbH19IGZvciB7e2l0ZW1zfX0gaXRlbXMuJyxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBvcmRlcklkOiB1c2VyRGF0YS5vcmRlcklkLFxuICAgICAgICB0b3RhbDogdXNlckRhdGEudG90YWwsXG4gICAgICAgIGl0ZW1zOiB1c2VyRGF0YS5pdGVtc1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZW1haWwub3JkZXJDb25maXJtYXRpb24uZm9vdGVyJyxcbiAgICAgIGZhbGxiYWNrOiAnVGhhbmsgeW91IGZvciB5b3VyIHB1cmNoYXNlISdcbiAgICB9XG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdWJqZWN0OiByZXN1bHRbJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLnN1YmplY3QnXSxcbiAgICBncmVldGluZzogcmVzdWx0WydlbWFpbC5vcmRlckNvbmZpcm1hdGlvbi5ncmVldGluZyddLFxuICAgIGJvZHk6IHJlc3VsdFsnZW1haWwub3JkZXJDb25maXJtYXRpb24uYm9keSddLFxuICAgIGZvb3RlcjogcmVzdWx0WydlbWFpbC5vcmRlckNvbmZpcm1hdGlvbi5mb290ZXInXVxuICB9O1xufVxuXG4vLyBFeGFtcGxlIDg6IE5vdGlmaWNhdGlvbiBtZXNzYWdlcyBmb3IgZGlmZmVyZW50IHNjZW5hcmlvc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbk1lc3NhZ2VzKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2FsZTogTG9jYWxlID0gJ2VuJykge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnbm90aWZpY2F0aW9uLndlbGNvbWUnLFxuICAgICAgZmFsbGJhY2s6ICdXZWxjb21lIHRvIFRvcmNoT25lISdcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ25vdGlmaWNhdGlvbi52ZXJpZmljYXRpb24nLFxuICAgICAgZmFsbGJhY2s6ICdQbGVhc2UgdmVyaWZ5IHlvdXIgYWNjb3VudC4nXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdub3RpZmljYXRpb24ucGFzc3dvcmRSZXNldCcsXG4gICAgICBmYWxsYmFjazogJ1lvdXIgcGFzc3dvcmQgaGFzIGJlZW4gcmVzZXQuJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnbm90aWZpY2F0aW9uLnByb2ZpbGVVcGRhdGUnLFxuICAgICAgZmFsbGJhY2s6ICdZb3VyIHByb2ZpbGUgaGFzIGJlZW4gdXBkYXRlZC4nXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdub3RpZmljYXRpb24ubmV3TWVzc2FnZScsXG4gICAgICBmYWxsYmFjazogJ1lvdSBoYXZlIGEgbmV3IG1lc3NhZ2UgZnJvbSB7e3NlbmRlcn19LicsXG4gICAgICBwYXJhbXM6IHtzZW5kZXI6ICdKb2huIERvZSd9XG4gICAgfVxuICBdO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEV4YW1wbGUgOTogUGVyZm9ybWFuY2UgY29tcGFyaXNvblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1hbmNlQ29tcGFyaXNvbihjb250ZXh0OiBBcGlDb250ZXh0KSB7XG4gIGNvbnN0IGtleXMgPSBbXG4gICAgJ3dlbGNvbWUnLCAndmVyaWZpY2F0aW9uJywgJ3Bhc3N3b3JkUmVzZXQnLCAncHJvZmlsZVVwZGF0ZScsXG4gICAgJ2VtYWlsLnN1YmplY3QnLCAnZW1haWwuYm9keScsICdzbXMud2VsY29tZScsICdzbXMudmVyaWZpY2F0aW9uJ1xuICBdO1xuXG4gIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSA9IGtleXMubWFwKChrZXkpID0+ICh7XG4gICAga2V5LFxuICAgIGZhbGxiYWNrOiBgRmFsbGJhY2sgZm9yICR7a2V5fWBcbiAgfSkpO1xuXG4gIGNvbnNvbGUudGltZSgnQmF0Y2ggdHJhbnNsYXRpb24nKTtcbiAgY29uc3QgYmF0Y2hSZXN1bHRzID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsICdlbicpO1xuICBjb25zb2xlLnRpbWVFbmQoJ0JhdGNoIHRyYW5zbGF0aW9uJyk7XG5cbiAgcmV0dXJuIGJhdGNoUmVzdWx0cztcbn1cblxuLy8gRXhhbXBsZSAxMDogRHluYW1pYyBjb250ZW50IGJhc2VkIG9uIHVzZXIgcHJlZmVyZW5jZXNcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRVc2VyR3JlZXRpbmcoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJMb2NhbGU/OiBzdHJpbmcsXG4gIHVzZXJuYW1lPzogc3RyaW5nXG4pIHtcbiAgY29uc3QgbG9jYWxlOiBMb2NhbGUgPSAodXNlckxvY2FsZSBhcyBMb2NhbGUpIHx8ICdlbic7XG5cbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgIHtcbiAgICAgIGtleTogJ2dyZWV0aW5nLm1vcm5pbmcnLFxuICAgICAgZmFsbGJhY2s6ICdHb29kIG1vcm5pbmchJyxcbiAgICAgIHBhcmFtczogdXNlcm5hbWUgPyB7dXNlcm5hbWV9IDoge31cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2dyZWV0aW5nLmFmdGVybm9vbicsXG4gICAgICBmYWxsYmFjazogJ0dvb2QgYWZ0ZXJub29uIScsXG4gICAgICBwYXJhbXM6IHVzZXJuYW1lID8ge3VzZXJuYW1lfSA6IHt9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdncmVldGluZy5ldmVuaW5nJyxcbiAgICAgIGZhbGxiYWNrOiAnR29vZCBldmVuaW5nIScsXG4gICAgICBwYXJhbXM6IHVzZXJuYW1lID8ge3VzZXJuYW1lfSA6IHt9XG4gICAgfVxuICBdO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuXG4gIC8vIFJldHVybiBhcHByb3ByaWF0ZSBncmVldGluZyBiYXNlZCBvbiB0aW1lIG9mIGRheVxuICBjb25zdCBob3VyID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xuICBpZihob3VyIDwgMTIpIHtcbiAgICByZXR1cm4gcmVzdWx0WydncmVldGluZy5tb3JuaW5nJ107XG4gIH1cbiAgaWYoaG91ciA8IDE4KSB7XG4gICAgcmV0dXJuIHJlc3VsdFsnZ3JlZXRpbmcuYWZ0ZXJub29uJ107XG4gIH1cbiAgcmV0dXJuIHJlc3VsdFsnZ3JlZXRpbmcuZXZlbmluZyddO1xufVxuXG4vLyBFeGFtcGxlIDExOiBGb3JjZSBmbHVzaCBwZW5kaW5nIHRyYW5zbGF0aW9uc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUFsbFRyYW5zbGF0aW9uc1Byb2Nlc3NlZCgpIHtcbiAgLy8gRm9yY2UgcHJvY2VzcyBhbnkgcGVuZGluZyB0cmFuc2xhdGlvbiBiYXRjaGVzXG4gIGF3YWl0IGZsdXNoKCk7XG4gIGNvbnNvbGUubG9nKCdBbGwgdHJhbnNsYXRpb24gYmF0Y2hlcyBwcm9jZXNzZWQnKTtcbn1cblxuLy8gVXNhZ2UgZXhhbXBsZXM6XG4vLyBjb25zdCBjb250ZXh0ID0geyBkYXRhYmFzZU5hbWU6ICd0b3JjaG9uZS1kZXYnLCBzZXNzaW9uOiB7IHVzZXJJZDogJ3VzZXIxMjMnIH0gfTtcbi8vXG4vLyAvLyBCYXNpYyB1c2FnZVxuLy8gY29uc3Qgd2VsY29tZU1lc3NhZ2VzID0gYXdhaXQgZ2V0V2VsY29tZU1lc3NhZ2VzKGNvbnRleHQsICdlbicpO1xuLy9cbi8vIC8vIFdpdGggaW50ZXJwb2xhdGlvblxuLy8gY29uc3QgcGVyc29uYWxpemVkTWVzc2FnZXMgPSBhd2FpdCBnZXRQZXJzb25hbGl6ZWRNZXNzYWdlcyhjb250ZXh0LCAnSm9obicsICdlcycpO1xuLy9cbi8vIC8vIE11bHRpLWxhbmd1YWdlIGNvbnRlbnRcbi8vIGNvbnN0IG11bHRpTGFuZ3VhZ2VDb250ZW50ID0gYXdhaXQgZ2V0TXVsdGlMYW5ndWFnZUNvbnRlbnQoY29udGV4dCk7XG4vL1xuLy8gLy8gRXJyb3IgaGFuZGxpbmdcbi8vIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBhd2FpdCBnZXRSb2J1c3RUcmFuc2xhdGlvbnMoY29udGV4dCwgJ2RlJyk7XG4vL1xuLy8gLy8gQ29tcGxleCB0ZW1wbGF0ZVxuLy8gY29uc3QgZW1haWxUZW1wbGF0ZSA9IGF3YWl0IGdlbmVyYXRlRW1haWxUZW1wbGF0ZShjb250ZXh0LCB7XG4vLyAgIG5hbWU6ICdNYXJpYScsXG4vLyAgIGVtYWlsOiAnbWFyaWFAZXhhbXBsZS5jb20nLFxuLy8gICBvcmRlcklkOiAnT1JELTEyMycsXG4vLyAgIHRvdGFsOiA5OS45OSxcbi8vICAgaXRlbXM6IDNcbi8vIH0sICdwdCcpO1xuLy9cbi8vIC8vIE5vdGlmaWNhdGlvbnNcbi8vIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBhd2FpdCBnZXROb3RpZmljYXRpb25NZXNzYWdlcyhjb250ZXh0LCAnZnInKTtcbi8vXG4vLyAvLyBQZXJmb3JtYW5jZSB0ZXN0XG4vLyBjb25zdCBwZXJmID0gYXdhaXQgcGVyZm9ybWFuY2VDb21wYXJpc29uKGNvbnRleHQpO1xuLy9cbi8vIC8vIER5bmFtaWMgZ3JlZXRpbmdcbi8vIGNvbnN0IGdyZWV0aW5nID0gYXdhaXQgZ2V0VXNlckdyZWV0aW5nKGNvbnRleHQsICdlbicsICdKb2huJyk7XG4vL1xuLy8gLy8gRm9yY2UgZmx1c2hcbi8vIGF3YWl0IGVuc3VyZUFsbFRyYW5zbGF0aW9uc1Byb2Nlc3NlZCgpOyJdLAogICJtYXBwaW5ncyI6ICJBQVVBLE9BQVEsU0FBQUEsRUFBTyxRQUFBQyxNQUFtQyx3QkFNbEQsZUFBc0JDLEVBQW1CQyxFQUFxQkMsRUFBaUIsS0FBTSxDQXVCbkYsT0FGZSxNQUFNSCxFQUFNRSxFQXBCZSxDQUN4QyxDQUNFLElBQUssZ0JBQ0wsU0FBVSxzQkFDWixFQUNBLENBQ0UsSUFBSyxtQkFDTCxTQUFVLDRCQUNaLEVBQ0EsQ0FDRSxJQUFLLHNCQUNMLFNBQVUsdUNBQ1osQ0FDRixFQU9rREMsQ0FBTSxDQVExRCxDQUdBLGVBQXNCQyxFQUF3QkYsRUFBcUJHLEVBQWtCRixFQUFpQixLQUFNLENBQzFHLE1BQU1HLEVBQW9DLENBQ3hDLENBQ0UsSUFBSyxlQUNMLFNBQVUsOEJBQ1YsT0FBUSxDQUFDLFNBQUFELENBQVEsQ0FDbkIsRUFDQSxDQUNFLElBQUsscUJBQ0wsU0FBVSx1Q0FDVixPQUFRLENBQUMsTUFBTyxDQUFDLENBQ25CLEVBQ0EsQ0FDRSxJQUFLLGlCQUNMLFNBQVUsdUJBQ1YsT0FBUSxDQUFDLEtBQU0sSUFBSSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FDaEQsQ0FDRixFQUlBLE9BRmUsTUFBTUwsRUFBS0UsRUFBU0ksRUFBY0gsQ0FBTSxDQVF6RCxDQUdBLGVBQXNCSSxFQUF3QkwsRUFBcUIsQ0FFakUsTUFBTU0sRUFBc0IsQ0FBQyxLQUFNLEtBQU0sSUFBSSxFQUN2Q0MsRUFBa0QsQ0FBQyxFQUV6RCxVQUFVTixLQUFVSyxFQUFXLENBQzdCLE1BQU1GLEVBQW9DLENBQ3hDLENBQ0UsSUFBSyxXQUNMLFNBQVUsVUFDWixFQUNBLENBQ0UsSUFBSyxjQUNMLFNBQVUsbUJBQ1osQ0FDRixFQUVBRyxFQUFRTixDQUFNLEVBQUksTUFBTUgsRUFBS0UsRUFBU0ksRUFBY0gsQ0FBTSxDQUM1RCxDQUVBLE9BQU9NLENBTVQsQ0FHQSxlQUFzQkMsRUFBc0JSLEVBQXFCQyxFQUFpQixLQUFNLENBQ3RGLE1BQU1HLEVBQW9DLENBQ3hDLENBQ0UsSUFBSyxpQkFDTCxTQUFVLG1CQUNaLEVBQ0EsQ0FDRSxJQUFLLG9CQUNMLFNBQVUsdUJBQ1osRUFDQSxDQUNFLElBQUssZ0JBQ0wsU0FBVSw0QkFDWixDQUNGLEVBRUEsR0FBSSxDQUVGLE9BRGUsTUFBTU4sRUFBS0UsRUFBU0ksRUFBY0gsQ0FBTSxDQUV6RCxNQUFlLENBR2IsT0FBT0csRUFBYSxPQUFPLENBQUNLLEVBQUtDLEtBQy9CRCxFQUFJQyxFQUFFLEdBQUcsRUFBSUEsRUFBRSxVQUFZLEdBQ3BCRCxHQUNOLENBQUMsQ0FBMkIsQ0FDakMsQ0FDRixDQUdBLGVBQXNCRSxFQUE2QlgsRUFBcUJDLEVBQWlCLEtBQU0sQ0FFN0YsTUFBTUcsRUFBb0MsQ0FBQyxFQUUzQyxRQUFRUSxFQUFJLEVBQUdBLEdBQUssSUFBS0EsSUFDdkJSLEVBQWEsS0FBSyxDQUNoQixJQUFLLFFBQVFRLENBQUMsU0FDZCxTQUFVLFFBQVFBLENBQUMsU0FDbkIsT0FBUSxDQUFDLE9BQVFBLENBQUMsQ0FDcEIsQ0FBQyxFQUlILE1BQU1DLEVBQVMsTUFBTWYsRUFBS0UsRUFBU0ksRUFBY0gsQ0FBTSxFQUd2RCxhQUFNSixFQUFNLEVBRUxnQixDQUNULENBR0EsZUFBc0JDLEVBQWlCZCxFQUFxQmUsRUFBbUJkLEVBQWlCLEtBQU0sQ0FDcEcsTUFBTUcsRUFBb0MsQ0FDeEMsQ0FDRSxJQUFLLFNBQVNXLENBQVMsR0FDdkIsU0FBVSxzQkFBc0JBLENBQVMsR0FDekMsT0FBUSxDQUFDLFVBQUFBLENBQVMsQ0FDcEIsRUFDQSxDQUNFLElBQUssdUJBQ0wsU0FBVSxtREFDVixPQUFRLENBQUMsQ0FDWCxDQUNGLEVBVUEsT0FSZSxNQUFNakIsRUFBS0UsRUFBU0ksRUFBY0gsQ0FBTSxDQVN6RCxDQUdBLGVBQXNCZSxFQUNwQmhCLEVBQ0FpQixFQU9BaEIsRUFBaUIsS0FDakIsQ0FDQSxNQUFNRyxFQUFvQyxDQUN4QyxDQUNFLElBQUssa0NBQ0wsU0FBVSw4QkFDVixPQUFRLENBQUMsUUFBU2EsRUFBUyxPQUFPLENBQ3BDLEVBQ0EsQ0FDRSxJQUFLLG1DQUNMLFNBQVUsa0JBQ1YsT0FBUSxDQUFDLEtBQU1BLEVBQVMsSUFBSSxDQUM5QixFQUNBLENBQ0UsSUFBSywrQkFDTCxTQUFVLG9GQUNWLE9BQVEsQ0FDTixRQUFTQSxFQUFTLFFBQ2xCLE1BQU9BLEVBQVMsTUFDaEIsTUFBT0EsRUFBUyxLQUNsQixDQUNGLEVBQ0EsQ0FDRSxJQUFLLGlDQUNMLFNBQVUsOEJBQ1osQ0FDRixFQUVNSixFQUFTLE1BQU1mLEVBQUtFLEVBQVNJLEVBQWNILENBQU0sRUFFdkQsTUFBTyxDQUNMLFFBQVNZLEVBQU8saUNBQWlDLEVBQ2pELFNBQVVBLEVBQU8sa0NBQWtDLEVBQ25ELEtBQU1BLEVBQU8sOEJBQThCLEVBQzNDLE9BQVFBLEVBQU8sZ0NBQWdDLENBQ2pELENBQ0YsQ0FHQSxlQUFzQkssRUFBd0JsQixFQUFxQkMsRUFBaUIsS0FBTSxDQTJCeEYsT0FGZSxNQUFNSCxFQUFLRSxFQXhCZ0IsQ0FDeEMsQ0FDRSxJQUFLLHVCQUNMLFNBQVUsc0JBQ1osRUFDQSxDQUNFLElBQUssNEJBQ0wsU0FBVSw2QkFDWixFQUNBLENBQ0UsSUFBSyw2QkFDTCxTQUFVLCtCQUNaLEVBQ0EsQ0FDRSxJQUFLLDZCQUNMLFNBQVUsZ0NBQ1osRUFDQSxDQUNFLElBQUssMEJBQ0wsU0FBVSwwQ0FDVixPQUFRLENBQUMsT0FBUSxVQUFVLENBQzdCLENBQ0YsRUFFaURDLENBQU0sQ0FHekQsQ0FHQSxlQUFzQmtCLEVBQXNCbkIsRUFBcUIsQ0FNL0QsTUFBTUksRUFMTyxDQUNYLFVBQVcsZUFBZ0IsZ0JBQWlCLGdCQUM1QyxnQkFBaUIsYUFBYyxjQUFlLGtCQUNoRCxFQUUrQyxJQUFLZ0IsSUFBUyxDQUMzRCxJQUFBQSxFQUNBLFNBQVUsZ0JBQWdCQSxDQUFHLEVBQy9CLEVBQUUsRUFNRixPQUhxQixNQUFNdEIsRUFBS0UsRUFBU0ksRUFBYyxJQUFJLENBSTdELENBR0EsZUFBc0JpQixFQUNwQnJCLEVBQ0FzQixFQUNBbkIsRUFDQSxDQXFCQSxNQUFNVSxFQUFTLE1BQU1mLEVBQUtFLEVBbEJnQixDQUN4QyxDQUNFLElBQUssbUJBQ0wsU0FBVSxnQkFDVixPQUFRRyxFQUFXLENBQUMsU0FBQUEsQ0FBUSxFQUFJLENBQUMsQ0FDbkMsRUFDQSxDQUNFLElBQUsscUJBQ0wsU0FBVSxrQkFDVixPQUFRQSxFQUFXLENBQUMsU0FBQUEsQ0FBUSxFQUFJLENBQUMsQ0FDbkMsRUFDQSxDQUNFLElBQUssbUJBQ0wsU0FBVSxnQkFDVixPQUFRQSxFQUFXLENBQUMsU0FBQUEsQ0FBUSxFQUFJLENBQUMsQ0FDbkMsQ0FDRixFQWxCd0JtQixHQUF5QixJQW9CTSxFQUdqREMsRUFBTyxJQUFJLEtBQUssRUFBRSxTQUFTLEVBQ2pDLE9BQUdBLEVBQU8sR0FDRFYsRUFBTyxrQkFBa0IsRUFFL0JVLEVBQU8sR0FDRFYsRUFBTyxvQkFBb0IsRUFFN0JBLEVBQU8sa0JBQWtCLENBQ2xDLENBR0EsZUFBc0JXLEdBQWlDLENBRXJELE1BQU0zQixFQUFNLENBRWQiLAogICJuYW1lcyI6IFsiZmx1c2giLCAiaTE4biIsICJnZXRXZWxjb21lTWVzc2FnZXMiLCAiY29udGV4dCIsICJsb2NhbGUiLCAiZ2V0UGVyc29uYWxpemVkTWVzc2FnZXMiLCAidXNlcm5hbWUiLCAidHJhbnNsYXRpb25zIiwgImdldE11bHRpTGFuZ3VhZ2VDb250ZW50IiwgImxhbmd1YWdlcyIsICJyZXN1bHRzIiwgImdldFJvYnVzdFRyYW5zbGF0aW9ucyIsICJhY2MiLCAidCIsICJwcm9jZXNzTGFyZ2VUcmFuc2xhdGlvbkJhdGNoIiwgImkiLCAicmVzdWx0IiwgImdldEVycm9yTWVzc2FnZXMiLCAiZXJyb3JDb2RlIiwgImdlbmVyYXRlRW1haWxUZW1wbGF0ZSIsICJ1c2VyRGF0YSIsICJnZXROb3RpZmljYXRpb25NZXNzYWdlcyIsICJwZXJmb3JtYW5jZUNvbXBhcmlzb24iLCAia2V5IiwgImdldFVzZXJHcmVldGluZyIsICJ1c2VyTG9jYWxlIiwgImhvdXIiLCAiZW5zdXJlQWxsVHJhbnNsYXRpb25zUHJvY2Vzc2VkIl0KfQo=
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*
|
|
5
|
+
* Example usage of the translation queue system with Google Translate integration
|
|
6
|
+
*
|
|
7
|
+
* This demonstrates how to use the new translation queue that automatically
|
|
8
|
+
* translates content using Google Translate API when needed.
|
|
9
|
+
*/ import { flush, i18n } from './translationQueue.js';
|
|
10
|
+
// Example 1: Basic translations - will use database or translate as needed
|
|
11
|
+
export async function getWelcomeMessages(context, locale = 'en') {
|
|
12
|
+
const translations = [
|
|
13
|
+
{
|
|
14
|
+
key: 'welcome.title',
|
|
15
|
+
fallback: 'Welcome to TorchOne!'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
key: 'welcome.subtitle',
|
|
19
|
+
fallback: 'Your personal AI assistant'
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
key: 'welcome.description',
|
|
23
|
+
fallback: 'Get started by exploring our features'
|
|
24
|
+
}
|
|
25
|
+
];
|
|
26
|
+
// This will:
|
|
27
|
+
// 1. Check database for existing translations
|
|
28
|
+
// 2. If not found and locale is default (en), save fallback to DB
|
|
29
|
+
// 3. If not found and locale is different, translate from default locale
|
|
30
|
+
// 4. Save translated content to DB for future use
|
|
31
|
+
const result = await i18n(context, translations, locale);
|
|
32
|
+
return result;
|
|
33
|
+
// Returns: {
|
|
34
|
+
// 'welcome.title': 'Welcome to TorchOne!' (or translated version),
|
|
35
|
+
// 'welcome.subtitle': 'Your personal AI assistant' (or translated version),
|
|
36
|
+
// 'welcome.description': 'Get started by exploring our features' (or translated version)
|
|
37
|
+
// }
|
|
38
|
+
}
|
|
39
|
+
// Example 2: Translations with interpolation
|
|
40
|
+
export async function getPersonalizedMessages(context, username, locale = 'en') {
|
|
41
|
+
const translations = [
|
|
42
|
+
{
|
|
43
|
+
key: 'user.welcome',
|
|
44
|
+
fallback: 'Welcome back, {{username}}!',
|
|
45
|
+
params: {
|
|
46
|
+
username
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
key: 'user.notifications',
|
|
51
|
+
fallback: 'You have {{count}} new notifications',
|
|
52
|
+
params: {
|
|
53
|
+
count: 5
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
key: 'user.lastLogin',
|
|
58
|
+
fallback: 'Last login: {{date}}',
|
|
59
|
+
params: {
|
|
60
|
+
date: new Date().toLocaleDateString()
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
];
|
|
64
|
+
const result = await i18n(context, translations, locale);
|
|
65
|
+
return result;
|
|
66
|
+
// Returns: {
|
|
67
|
+
// 'user.welcome': 'Welcome back, Alice!' (or translated with interpolation),
|
|
68
|
+
// 'user.notifications': 'You have 5 new notifications' (or translated with interpolation),
|
|
69
|
+
// 'user.lastLogin': 'Last login: 1/15/2025' (or translated with interpolation)
|
|
70
|
+
// }
|
|
71
|
+
}
|
|
72
|
+
// Example 3: Multi-language support
|
|
73
|
+
export async function getMultiLanguageContent(context) {
|
|
74
|
+
// Get content in multiple languages
|
|
75
|
+
const languages = [
|
|
76
|
+
'en',
|
|
77
|
+
'es',
|
|
78
|
+
'fr'
|
|
79
|
+
];
|
|
80
|
+
const results = {};
|
|
81
|
+
for (const locale of languages){
|
|
82
|
+
const translations = [
|
|
83
|
+
{
|
|
84
|
+
key: 'app.name',
|
|
85
|
+
fallback: 'TorchOne'
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
key: 'app.tagline',
|
|
89
|
+
fallback: 'Your AI Assistant'
|
|
90
|
+
}
|
|
91
|
+
];
|
|
92
|
+
results[locale] = await i18n(context, translations, locale);
|
|
93
|
+
}
|
|
94
|
+
return results;
|
|
95
|
+
// Returns: {
|
|
96
|
+
// en: { 'app.name': 'TorchOne', 'app.tagline': 'Your AI Assistant' },
|
|
97
|
+
// es: { 'app.name': 'TorchOne', 'app.tagline': 'Tu Asistente de IA' },
|
|
98
|
+
// fr: { 'app.name': 'TorchOne', 'app.tagline': 'Votre Assistant IA' }
|
|
99
|
+
// }
|
|
100
|
+
}
|
|
101
|
+
// Example 4: Error handling and fallbacks
|
|
102
|
+
export async function getRobustTranslations(context, locale = 'en') {
|
|
103
|
+
const translations = [
|
|
104
|
+
{
|
|
105
|
+
key: 'error.notFound',
|
|
106
|
+
fallback: 'Content not found'
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
key: 'error.serverError',
|
|
110
|
+
fallback: 'Server error occurred'
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
key: 'success.saved',
|
|
114
|
+
fallback: 'Content saved successfully'
|
|
115
|
+
}
|
|
116
|
+
];
|
|
117
|
+
try {
|
|
118
|
+
const result = await i18n(context, translations, locale);
|
|
119
|
+
return result;
|
|
120
|
+
} catch (error) {
|
|
121
|
+
console.error('Translation error:', error);
|
|
122
|
+
// Return fallbacks if translation fails
|
|
123
|
+
return translations.reduce((acc, t)=>{
|
|
124
|
+
acc[t.key] = t.fallback || '';
|
|
125
|
+
return acc;
|
|
126
|
+
}, {});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Example 5: Batch processing with flush
|
|
130
|
+
export async function processLargeTranslationBatch(context, locale = 'en') {
|
|
131
|
+
// Create a large batch of translations
|
|
132
|
+
const translations = [];
|
|
133
|
+
for(let i = 1; i <= 100; i++){
|
|
134
|
+
translations.push({
|
|
135
|
+
key: `item.${i}.title`,
|
|
136
|
+
fallback: `Item ${i} Title`,
|
|
137
|
+
params: {
|
|
138
|
+
number: i
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Process the batch
|
|
143
|
+
const result = await i18n(context, translations, locale);
|
|
144
|
+
// Ensure all pending translations are processed
|
|
145
|
+
await flush();
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
// Example 6: Error handling with fallbacks
|
|
149
|
+
export async function getErrorMessages(context, errorCode, locale = 'en') {
|
|
150
|
+
const translations = [
|
|
151
|
+
{
|
|
152
|
+
key: `error.${errorCode}`,
|
|
153
|
+
fallback: `An error occurred: ${errorCode}`,
|
|
154
|
+
params: {
|
|
155
|
+
errorCode
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
key: 'error.contactSupport',
|
|
160
|
+
fallback: 'Please contact support if this problem persists.',
|
|
161
|
+
params: {}
|
|
162
|
+
}
|
|
163
|
+
];
|
|
164
|
+
const result = await i18n(context, translations, locale);
|
|
165
|
+
// If database is unavailable, will return fallbacks:
|
|
166
|
+
// {
|
|
167
|
+
// 'error.INVALID_EMAIL': 'An error occurred: INVALID_EMAIL',
|
|
168
|
+
// 'error.contactSupport': 'Please contact support if this problem persists.'
|
|
169
|
+
// }
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
// Example 7: Complex email template with multiple interpolations
|
|
173
|
+
export async function generateEmailTemplate(context, userData, locale = 'en') {
|
|
174
|
+
const translations = [
|
|
175
|
+
{
|
|
176
|
+
key: 'email.orderConfirmation.subject',
|
|
177
|
+
fallback: 'Order {{orderId}} Confirmed',
|
|
178
|
+
params: {
|
|
179
|
+
orderId: userData.orderId
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
key: 'email.orderConfirmation.greeting',
|
|
184
|
+
fallback: 'Hello {{name}},',
|
|
185
|
+
params: {
|
|
186
|
+
name: userData.name
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
key: 'email.orderConfirmation.body',
|
|
191
|
+
fallback: 'Your order {{orderId}} has been confirmed. Total: ${{total}} for {{items}} items.',
|
|
192
|
+
params: {
|
|
193
|
+
orderId: userData.orderId,
|
|
194
|
+
total: userData.total,
|
|
195
|
+
items: userData.items
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
key: 'email.orderConfirmation.footer',
|
|
200
|
+
fallback: 'Thank you for your purchase!'
|
|
201
|
+
}
|
|
202
|
+
];
|
|
203
|
+
const result = await i18n(context, translations, locale);
|
|
204
|
+
return {
|
|
205
|
+
subject: result['email.orderConfirmation.subject'],
|
|
206
|
+
greeting: result['email.orderConfirmation.greeting'],
|
|
207
|
+
body: result['email.orderConfirmation.body'],
|
|
208
|
+
footer: result['email.orderConfirmation.footer']
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
// Example 8: Notification messages for different scenarios
|
|
212
|
+
export async function getNotificationMessages(context, locale = 'en') {
|
|
213
|
+
const translations = [
|
|
214
|
+
{
|
|
215
|
+
key: 'notification.welcome',
|
|
216
|
+
fallback: 'Welcome to TorchOne!'
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
key: 'notification.verification',
|
|
220
|
+
fallback: 'Please verify your account.'
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
key: 'notification.passwordReset',
|
|
224
|
+
fallback: 'Your password has been reset.'
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
key: 'notification.profileUpdate',
|
|
228
|
+
fallback: 'Your profile has been updated.'
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
key: 'notification.newMessage',
|
|
232
|
+
fallback: 'You have a new message from {{sender}}.',
|
|
233
|
+
params: {
|
|
234
|
+
sender: 'John Doe'
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
];
|
|
238
|
+
const result = await i18n(context, translations, locale);
|
|
239
|
+
return result;
|
|
240
|
+
}
|
|
241
|
+
// Example 9: Performance comparison
|
|
242
|
+
export async function performanceComparison(context) {
|
|
243
|
+
const keys = [
|
|
244
|
+
'welcome',
|
|
245
|
+
'verification',
|
|
246
|
+
'passwordReset',
|
|
247
|
+
'profileUpdate',
|
|
248
|
+
'email.subject',
|
|
249
|
+
'email.body',
|
|
250
|
+
'sms.welcome',
|
|
251
|
+
'sms.verification'
|
|
252
|
+
];
|
|
253
|
+
const translations = keys.map((key)=>({
|
|
254
|
+
key,
|
|
255
|
+
fallback: `Fallback for ${key}`
|
|
256
|
+
}));
|
|
257
|
+
console.time('Batch translation');
|
|
258
|
+
const batchResults = await i18n(context, translations, 'en');
|
|
259
|
+
console.timeEnd('Batch translation');
|
|
260
|
+
return batchResults;
|
|
261
|
+
}
|
|
262
|
+
// Example 10: Dynamic content based on user preferences
|
|
263
|
+
export async function getUserGreeting(context, userLocale, username) {
|
|
264
|
+
const locale = userLocale || 'en';
|
|
265
|
+
const translations = [
|
|
266
|
+
{
|
|
267
|
+
key: 'greeting.morning',
|
|
268
|
+
fallback: 'Good morning!',
|
|
269
|
+
params: username ? {
|
|
270
|
+
username
|
|
271
|
+
} : {}
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
key: 'greeting.afternoon',
|
|
275
|
+
fallback: 'Good afternoon!',
|
|
276
|
+
params: username ? {
|
|
277
|
+
username
|
|
278
|
+
} : {}
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
key: 'greeting.evening',
|
|
282
|
+
fallback: 'Good evening!',
|
|
283
|
+
params: username ? {
|
|
284
|
+
username
|
|
285
|
+
} : {}
|
|
286
|
+
}
|
|
287
|
+
];
|
|
288
|
+
const result = await i18n(context, translations, locale);
|
|
289
|
+
// Return appropriate greeting based on time of day
|
|
290
|
+
const hour = new Date().getHours();
|
|
291
|
+
if (hour < 12) {
|
|
292
|
+
return result['greeting.morning'];
|
|
293
|
+
}
|
|
294
|
+
if (hour < 18) {
|
|
295
|
+
return result['greeting.afternoon'];
|
|
296
|
+
}
|
|
297
|
+
return result['greeting.evening'];
|
|
298
|
+
}
|
|
299
|
+
// Example 11: Force flush pending translations
|
|
300
|
+
export async function ensureAllTranslationsProcessed() {
|
|
301
|
+
// Force process any pending translation batches
|
|
302
|
+
await flush();
|
|
303
|
+
console.log('All translation batches processed');
|
|
304
|
+
} // Usage examples:
|
|
305
|
+
// const context = { databaseName: 'torchone-dev', session: { userId: 'user123' } };
|
|
306
|
+
//
|
|
307
|
+
// // Basic usage
|
|
308
|
+
// const welcomeMessages = await getWelcomeMessages(context, 'en');
|
|
309
|
+
//
|
|
310
|
+
// // With interpolation
|
|
311
|
+
// const personalizedMessages = await getPersonalizedMessages(context, 'John', 'es');
|
|
312
|
+
//
|
|
313
|
+
// // Multi-language content
|
|
314
|
+
// const multiLanguageContent = await getMultiLanguageContent(context);
|
|
315
|
+
//
|
|
316
|
+
// // Error handling
|
|
317
|
+
// const errorMessages = await getRobustTranslations(context, 'de');
|
|
318
|
+
//
|
|
319
|
+
// // Complex template
|
|
320
|
+
// const emailTemplate = await generateEmailTemplate(context, {
|
|
321
|
+
// name: 'Maria',
|
|
322
|
+
// email: 'maria@example.com',
|
|
323
|
+
// orderId: 'ORD-123',
|
|
324
|
+
// total: 99.99,
|
|
325
|
+
// items: 3
|
|
326
|
+
// }, 'pt');
|
|
327
|
+
//
|
|
328
|
+
// // Notifications
|
|
329
|
+
// const notifications = await getNotificationMessages(context, 'fr');
|
|
330
|
+
//
|
|
331
|
+
// // Performance test
|
|
332
|
+
// const perf = await performanceComparison(context);
|
|
333
|
+
//
|
|
334
|
+
// // Dynamic greeting
|
|
335
|
+
// const greeting = await getUserGreeting(context, 'en', 'John');
|
|
336
|
+
//
|
|
337
|
+
// // Force flush
|
|
338
|
+
// await ensureAllTranslationsProcessed();
|
|
339
|
+
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL3V0aWxzL3RyYW5zbGF0aW9uUXVldWUuZXhhbXBsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlIG9mIHRoZSB0cmFuc2xhdGlvbiBxdWV1ZSBzeXN0ZW0gd2l0aCBHb29nbGUgVHJhbnNsYXRlIGludGVncmF0aW9uXG4gKlxuICogVGhpcyBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgbmV3IHRyYW5zbGF0aW9uIHF1ZXVlIHRoYXQgYXV0b21hdGljYWxseVxuICogdHJhbnNsYXRlcyBjb250ZW50IHVzaW5nIEdvb2dsZSBUcmFuc2xhdGUgQVBJIHdoZW4gbmVlZGVkLlxuICovXG5cbmltcG9ydCB7Zmx1c2gsIGkxOG4sIHR5cGUgVHJhbnNsYXRpb25PYmplY3R9IGZyb20gJy4vdHJhbnNsYXRpb25RdWV1ZS5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtMb2NhbGV9IGZyb20gJy4uL3R5cGVzL2NvbnRlbnQudHlwZXMuanMnO1xuXG4vLyBFeGFtcGxlIDE6IEJhc2ljIHRyYW5zbGF0aW9ucyAtIHdpbGwgdXNlIGRhdGFiYXNlIG9yIHRyYW5zbGF0ZSBhcyBuZWVkZWRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXZWxjb21lTWVzc2FnZXMoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICd3ZWxjb21lLnRpdGxlJyxcbiAgICAgIGZhbGxiYWNrOiAnV2VsY29tZSB0byBUb3JjaE9uZSEnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICd3ZWxjb21lLnN1YnRpdGxlJyxcbiAgICAgIGZhbGxiYWNrOiAnWW91ciBwZXJzb25hbCBBSSBhc3Npc3RhbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICd3ZWxjb21lLmRlc2NyaXB0aW9uJyxcbiAgICAgIGZhbGxiYWNrOiAnR2V0IHN0YXJ0ZWQgYnkgZXhwbG9yaW5nIG91ciBmZWF0dXJlcydcbiAgICB9XG4gIF07XG5cbiAgLy8gVGhpcyB3aWxsOlxuICAvLyAxLiBDaGVjayBkYXRhYmFzZSBmb3IgZXhpc3RpbmcgdHJhbnNsYXRpb25zXG4gIC8vIDIuIElmIG5vdCBmb3VuZCBhbmQgbG9jYWxlIGlzIGRlZmF1bHQgKGVuKSwgc2F2ZSBmYWxsYmFjayB0byBEQlxuICAvLyAzLiBJZiBub3QgZm91bmQgYW5kIGxvY2FsZSBpcyBkaWZmZXJlbnQsIHRyYW5zbGF0ZSBmcm9tIGRlZmF1bHQgbG9jYWxlXG4gIC8vIDQuIFNhdmUgdHJhbnNsYXRlZCBjb250ZW50IHRvIERCIGZvciBmdXR1cmUgdXNlXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4gKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICByZXR1cm4gcmVzdWx0O1xuICAvLyBSZXR1cm5zOiB7XG4gIC8vICAgJ3dlbGNvbWUudGl0bGUnOiAnV2VsY29tZSB0byBUb3JjaE9uZSEnIChvciB0cmFuc2xhdGVkIHZlcnNpb24pLFxuICAvLyAgICd3ZWxjb21lLnN1YnRpdGxlJzogJ1lvdXIgcGVyc29uYWwgQUkgYXNzaXN0YW50JyAob3IgdHJhbnNsYXRlZCB2ZXJzaW9uKSxcbiAgLy8gICAnd2VsY29tZS5kZXNjcmlwdGlvbic6ICdHZXQgc3RhcnRlZCBieSBleHBsb3Jpbmcgb3VyIGZlYXR1cmVzJyAob3IgdHJhbnNsYXRlZCB2ZXJzaW9uKVxuICAvLyB9XG59XG5cbi8vIEV4YW1wbGUgMjogVHJhbnNsYXRpb25zIHdpdGggaW50ZXJwb2xhdGlvblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBlcnNvbmFsaXplZE1lc3NhZ2VzKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJuYW1lOiBzdHJpbmcsIGxvY2FsZTogTG9jYWxlID0gJ2VuJykge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAndXNlci53ZWxjb21lJyxcbiAgICAgIGZhbGxiYWNrOiAnV2VsY29tZSBiYWNrLCB7e3VzZXJuYW1lfX0hJyxcbiAgICAgIHBhcmFtczoge3VzZXJuYW1lfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndXNlci5ub3RpZmljYXRpb25zJyxcbiAgICAgIGZhbGxiYWNrOiAnWW91IGhhdmUge3tjb3VudH19IG5ldyBub3RpZmljYXRpb25zJyxcbiAgICAgIHBhcmFtczoge2NvdW50OiA1fVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndXNlci5sYXN0TG9naW4nLFxuICAgICAgZmFsbGJhY2s6ICdMYXN0IGxvZ2luOiB7e2RhdGV9fScsXG4gICAgICBwYXJhbXM6IHtkYXRlOiBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuICAgIH1cbiAgXTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICByZXR1cm4gcmVzdWx0O1xuICAvLyBSZXR1cm5zOiB7XG4gIC8vICAgJ3VzZXIud2VsY29tZSc6ICdXZWxjb21lIGJhY2ssIEFsaWNlIScgKG9yIHRyYW5zbGF0ZWQgd2l0aCBpbnRlcnBvbGF0aW9uKSxcbiAgLy8gICAndXNlci5ub3RpZmljYXRpb25zJzogJ1lvdSBoYXZlIDUgbmV3IG5vdGlmaWNhdGlvbnMnIChvciB0cmFuc2xhdGVkIHdpdGggaW50ZXJwb2xhdGlvbiksXG4gIC8vICAgJ3VzZXIubGFzdExvZ2luJzogJ0xhc3QgbG9naW46IDEvMTUvMjAyNScgKG9yIHRyYW5zbGF0ZWQgd2l0aCBpbnRlcnBvbGF0aW9uKVxuICAvLyB9XG59XG5cbi8vIEV4YW1wbGUgMzogTXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE11bHRpTGFuZ3VhZ2VDb250ZW50KGNvbnRleHQ6IEFwaUNvbnRleHQpIHtcbiAgLy8gR2V0IGNvbnRlbnQgaW4gbXVsdGlwbGUgbGFuZ3VhZ2VzXG4gIGNvbnN0IGxhbmd1YWdlczogTG9jYWxlW10gPSBbJ2VuJywgJ2VzJywgJ2ZyJ107XG4gIGNvbnN0IHJlc3VsdHM6IFJlY29yZDxMb2NhbGUsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge30gYXMgYW55O1xuXG4gIGZvcihjb25zdCBsb2NhbGUgb2YgbGFuZ3VhZ2VzKSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgICAge1xuICAgICAgICBrZXk6ICdhcHAubmFtZScsXG4gICAgICAgIGZhbGxiYWNrOiAnVG9yY2hPbmUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdhcHAudGFnbGluZScsXG4gICAgICAgIGZhbGxiYWNrOiAnWW91ciBBSSBBc3Npc3RhbnQnXG4gICAgICB9XG4gICAgXTtcblxuICAgIHJlc3VsdHNbbG9jYWxlXSA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG4gIC8vIFJldHVybnM6IHtcbiAgLy8gICBlbjogeyAnYXBwLm5hbWUnOiAnVG9yY2hPbmUnLCAnYXBwLnRhZ2xpbmUnOiAnWW91ciBBSSBBc3Npc3RhbnQnIH0sXG4gIC8vICAgZXM6IHsgJ2FwcC5uYW1lJzogJ1RvcmNoT25lJywgJ2FwcC50YWdsaW5lJzogJ1R1IEFzaXN0ZW50ZSBkZSBJQScgfSxcbiAgLy8gICBmcjogeyAnYXBwLm5hbWUnOiAnVG9yY2hPbmUnLCAnYXBwLnRhZ2xpbmUnOiAnVm90cmUgQXNzaXN0YW50IElBJyB9XG4gIC8vIH1cbn1cblxuLy8gRXhhbXBsZSA0OiBFcnJvciBoYW5kbGluZyBhbmQgZmFsbGJhY2tzXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Um9idXN0VHJhbnNsYXRpb25zKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2FsZTogTG9jYWxlID0gJ2VuJykge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnZXJyb3Iubm90Rm91bmQnLFxuICAgICAgZmFsbGJhY2s6ICdDb250ZW50IG5vdCBmb3VuZCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2Vycm9yLnNlcnZlckVycm9yJyxcbiAgICAgIGZhbGxiYWNrOiAnU2VydmVyIGVycm9yIG9jY3VycmVkJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnc3VjY2Vzcy5zYXZlZCcsXG4gICAgICBmYWxsYmFjazogJ0NvbnRlbnQgc2F2ZWQgc3VjY2Vzc2Z1bGx5J1xuICAgIH1cbiAgXTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdUcmFuc2xhdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgLy8gUmV0dXJuIGZhbGxiYWNrcyBpZiB0cmFuc2xhdGlvbiBmYWlsc1xuICAgIHJldHVybiB0cmFuc2xhdGlvbnMucmVkdWNlKChhY2MsIHQpID0+IHtcbiAgICAgIGFjY1t0LmtleV0gPSB0LmZhbGxiYWNrIHx8ICcnO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcbiAgfVxufVxuXG4vLyBFeGFtcGxlIDU6IEJhdGNoIHByb2Nlc3Npbmcgd2l0aCBmbHVzaFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NMYXJnZVRyYW5zbGF0aW9uQmF0Y2goY29udGV4dDogQXBpQ29udGV4dCwgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIC8vIENyZWF0ZSBhIGxhcmdlIGJhdGNoIG9mIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXTtcblxuICBmb3IobGV0IGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7XG4gICAgdHJhbnNsYXRpb25zLnB1c2goe1xuICAgICAga2V5OiBgaXRlbS4ke2l9LnRpdGxlYCxcbiAgICAgIGZhbGxiYWNrOiBgSXRlbSAke2l9IFRpdGxlYCxcbiAgICAgIHBhcmFtczoge251bWJlcjogaX1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgdGhlIGJhdGNoXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuXG4gIC8vIEVuc3VyZSBhbGwgcGVuZGluZyB0cmFuc2xhdGlvbnMgYXJlIHByb2Nlc3NlZFxuICBhd2FpdCBmbHVzaCgpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEV4YW1wbGUgNjogRXJyb3IgaGFuZGxpbmcgd2l0aCBmYWxsYmFja3NcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VzKGNvbnRleHQ6IEFwaUNvbnRleHQsIGVycm9yQ29kZTogc3RyaW5nLCBsb2NhbGU6IExvY2FsZSA9ICdlbicpIHtcbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgIHtcbiAgICAgIGtleTogYGVycm9yLiR7ZXJyb3JDb2RlfWAsXG4gICAgICBmYWxsYmFjazogYEFuIGVycm9yIG9jY3VycmVkOiAke2Vycm9yQ29kZX1gLFxuICAgICAgcGFyYW1zOiB7ZXJyb3JDb2RlfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZXJyb3IuY29udGFjdFN1cHBvcnQnLFxuICAgICAgZmFsbGJhY2s6ICdQbGVhc2UgY29udGFjdCBzdXBwb3J0IGlmIHRoaXMgcHJvYmxlbSBwZXJzaXN0cy4nLFxuICAgICAgcGFyYW1zOiB7fVxuICAgIH1cbiAgXTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICAvLyBJZiBkYXRhYmFzZSBpcyB1bmF2YWlsYWJsZSwgd2lsbCByZXR1cm4gZmFsbGJhY2tzOlxuICAvLyB7XG4gIC8vICAgJ2Vycm9yLklOVkFMSURfRU1BSUwnOiAnQW4gZXJyb3Igb2NjdXJyZWQ6IElOVkFMSURfRU1BSUwnLFxuICAvLyAgICdlcnJvci5jb250YWN0U3VwcG9ydCc6ICdQbGVhc2UgY29udGFjdCBzdXBwb3J0IGlmIHRoaXMgcHJvYmxlbSBwZXJzaXN0cy4nXG4gIC8vIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBFeGFtcGxlIDc6IENvbXBsZXggZW1haWwgdGVtcGxhdGUgd2l0aCBtdWx0aXBsZSBpbnRlcnBvbGF0aW9uc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWxUZW1wbGF0ZShcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlckRhdGE6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBvcmRlcklkOiBzdHJpbmc7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBpdGVtczogbnVtYmVyO1xuICB9LFxuICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbikge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnZW1haWwub3JkZXJDb25maXJtYXRpb24uc3ViamVjdCcsXG4gICAgICBmYWxsYmFjazogJ09yZGVyIHt7b3JkZXJJZH19IENvbmZpcm1lZCcsXG4gICAgICBwYXJhbXM6IHtvcmRlcklkOiB1c2VyRGF0YS5vcmRlcklkfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZW1haWwub3JkZXJDb25maXJtYXRpb24uZ3JlZXRpbmcnLFxuICAgICAgZmFsbGJhY2s6ICdIZWxsbyB7e25hbWV9fSwnLFxuICAgICAgcGFyYW1zOiB7bmFtZTogdXNlckRhdGEubmFtZX1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmJvZHknLFxuICAgICAgZmFsbGJhY2s6ICdZb3VyIG9yZGVyIHt7b3JkZXJJZH19IGhhcyBiZWVuIGNvbmZpcm1lZC4gVG90YWw6ICR7e3RvdGFsfX0gZm9yIHt7aXRlbXN9fSBpdGVtcy4nLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG9yZGVySWQ6IHVzZXJEYXRhLm9yZGVySWQsXG4gICAgICAgIHRvdGFsOiB1c2VyRGF0YS50b3RhbCxcbiAgICAgICAgaXRlbXM6IHVzZXJEYXRhLml0ZW1zXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdlbWFpbC5vcmRlckNvbmZpcm1hdGlvbi5mb290ZXInLFxuICAgICAgZmFsbGJhY2s6ICdUaGFuayB5b3UgZm9yIHlvdXIgcHVyY2hhc2UhJ1xuICAgIH1cbiAgXTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICByZXR1cm4ge1xuICAgIHN1YmplY3Q6IHJlc3VsdFsnZW1haWwub3JkZXJDb25maXJtYXRpb24uc3ViamVjdCddLFxuICAgIGdyZWV0aW5nOiByZXN1bHRbJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmdyZWV0aW5nJ10sXG4gICAgYm9keTogcmVzdWx0WydlbWFpbC5vcmRlckNvbmZpcm1hdGlvbi5ib2R5J10sXG4gICAgZm9vdGVyOiByZXN1bHRbJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmZvb3RlciddXG4gIH07XG59XG5cbi8vIEV4YW1wbGUgODogTm90aWZpY2F0aW9uIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgc2NlbmFyaW9zXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uTWVzc2FnZXMoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdub3RpZmljYXRpb24ud2VsY29tZScsXG4gICAgICBmYWxsYmFjazogJ1dlbGNvbWUgdG8gVG9yY2hPbmUhJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnbm90aWZpY2F0aW9uLnZlcmlmaWNhdGlvbicsXG4gICAgICBmYWxsYmFjazogJ1BsZWFzZSB2ZXJpZnkgeW91ciBhY2NvdW50LidcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ25vdGlmaWNhdGlvbi5wYXNzd29yZFJlc2V0JyxcbiAgICAgIGZhbGxiYWNrOiAnWW91ciBwYXNzd29yZCBoYXMgYmVlbiByZXNldC4nXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdub3RpZmljYXRpb24ucHJvZmlsZVVwZGF0ZScsXG4gICAgICBmYWxsYmFjazogJ1lvdXIgcHJvZmlsZSBoYXMgYmVlbiB1cGRhdGVkLidcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ25vdGlmaWNhdGlvbi5uZXdNZXNzYWdlJyxcbiAgICAgIGZhbGxiYWNrOiAnWW91IGhhdmUgYSBuZXcgbWVzc2FnZSBmcm9tIHt7c2VuZGVyfX0uJyxcbiAgICAgIHBhcmFtczoge3NlbmRlcjogJ0pvaG4gRG9lJ31cbiAgICB9XG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gRXhhbXBsZSA5OiBQZXJmb3JtYW5jZSBjb21wYXJpc29uXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybWFuY2VDb21wYXJpc29uKGNvbnRleHQ6IEFwaUNvbnRleHQpIHtcbiAgY29uc3Qga2V5cyA9IFtcbiAgICAnd2VsY29tZScsICd2ZXJpZmljYXRpb24nLCAncGFzc3dvcmRSZXNldCcsICdwcm9maWxlVXBkYXRlJyxcbiAgICAnZW1haWwuc3ViamVjdCcsICdlbWFpbC5ib2R5JywgJ3Ntcy53ZWxjb21lJywgJ3Ntcy52ZXJpZmljYXRpb24nXG4gIF07XG5cbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0ga2V5cy5tYXAoKGtleSkgPT4gKHtcbiAgICBrZXksXG4gICAgZmFsbGJhY2s6IGBGYWxsYmFjayBmb3IgJHtrZXl9YFxuICB9KSk7XG5cbiAgY29uc29sZS50aW1lKCdCYXRjaCB0cmFuc2xhdGlvbicpO1xuICBjb25zdCBiYXRjaFJlc3VsdHMgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgJ2VuJyk7XG4gIGNvbnNvbGUudGltZUVuZCgnQmF0Y2ggdHJhbnNsYXRpb24nKTtcblxuICByZXR1cm4gYmF0Y2hSZXN1bHRzO1xufVxuXG4vLyBFeGFtcGxlIDEwOiBEeW5hbWljIGNvbnRlbnQgYmFzZWQgb24gdXNlciBwcmVmZXJlbmNlc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFVzZXJHcmVldGluZyhcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlckxvY2FsZT86IHN0cmluZyxcbiAgdXNlcm5hbWU/OiBzdHJpbmdcbikge1xuICBjb25zdCBsb2NhbGU6IExvY2FsZSA9ICh1c2VyTG9jYWxlIGFzIExvY2FsZSkgfHwgJ2VuJztcblxuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnZ3JlZXRpbmcubW9ybmluZycsXG4gICAgICBmYWxsYmFjazogJ0dvb2QgbW9ybmluZyEnLFxuICAgICAgcGFyYW1zOiB1c2VybmFtZSA/IHt1c2VybmFtZX0gOiB7fVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZ3JlZXRpbmcuYWZ0ZXJub29uJyxcbiAgICAgIGZhbGxiYWNrOiAnR29vZCBhZnRlcm5vb24hJyxcbiAgICAgIHBhcmFtczogdXNlcm5hbWUgPyB7dXNlcm5hbWV9IDoge31cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2dyZWV0aW5nLmV2ZW5pbmcnLFxuICAgICAgZmFsbGJhY2s6ICdHb29kIGV2ZW5pbmchJyxcbiAgICAgIHBhcmFtczogdXNlcm5hbWUgPyB7dXNlcm5hbWV9IDoge31cbiAgICB9XG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgLy8gUmV0dXJuIGFwcHJvcHJpYXRlIGdyZWV0aW5nIGJhc2VkIG9uIHRpbWUgb2YgZGF5XG4gIGNvbnN0IGhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gIGlmKGhvdXIgPCAxMikge1xuICAgIHJldHVybiByZXN1bHRbJ2dyZWV0aW5nLm1vcm5pbmcnXTtcbiAgfVxuICBpZihob3VyIDwgMTgpIHtcbiAgICByZXR1cm4gcmVzdWx0WydncmVldGluZy5hZnRlcm5vb24nXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0WydncmVldGluZy5ldmVuaW5nJ107XG59XG5cbi8vIEV4YW1wbGUgMTE6IEZvcmNlIGZsdXNoIHBlbmRpbmcgdHJhbnNsYXRpb25zXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQWxsVHJhbnNsYXRpb25zUHJvY2Vzc2VkKCkge1xuICAvLyBGb3JjZSBwcm9jZXNzIGFueSBwZW5kaW5nIHRyYW5zbGF0aW9uIGJhdGNoZXNcbiAgYXdhaXQgZmx1c2goKTtcbiAgY29uc29sZS5sb2coJ0FsbCB0cmFuc2xhdGlvbiBiYXRjaGVzIHByb2Nlc3NlZCcpO1xufVxuXG4vLyBVc2FnZSBleGFtcGxlczpcbi8vIGNvbnN0IGNvbnRleHQgPSB7IGRhdGFiYXNlTmFtZTogJ3RvcmNob25lLWRldicsIHNlc3Npb246IHsgdXNlcklkOiAndXNlcjEyMycgfSB9O1xuLy9cbi8vIC8vIEJhc2ljIHVzYWdlXG4vLyBjb25zdCB3ZWxjb21lTWVzc2FnZXMgPSBhd2FpdCBnZXRXZWxjb21lTWVzc2FnZXMoY29udGV4dCwgJ2VuJyk7XG4vL1xuLy8gLy8gV2l0aCBpbnRlcnBvbGF0aW9uXG4vLyBjb25zdCBwZXJzb25hbGl6ZWRNZXNzYWdlcyA9IGF3YWl0IGdldFBlcnNvbmFsaXplZE1lc3NhZ2VzKGNvbnRleHQsICdKb2huJywgJ2VzJyk7XG4vL1xuLy8gLy8gTXVsdGktbGFuZ3VhZ2UgY29udGVudFxuLy8gY29uc3QgbXVsdGlMYW5ndWFnZUNvbnRlbnQgPSBhd2FpdCBnZXRNdWx0aUxhbmd1YWdlQ29udGVudChjb250ZXh0KTtcbi8vXG4vLyAvLyBFcnJvciBoYW5kbGluZ1xuLy8gY29uc3QgZXJyb3JNZXNzYWdlcyA9IGF3YWl0IGdldFJvYnVzdFRyYW5zbGF0aW9ucyhjb250ZXh0LCAnZGUnKTtcbi8vXG4vLyAvLyBDb21wbGV4IHRlbXBsYXRlXG4vLyBjb25zdCBlbWFpbFRlbXBsYXRlID0gYXdhaXQgZ2VuZXJhdGVFbWFpbFRlbXBsYXRlKGNvbnRleHQsIHtcbi8vICAgbmFtZTogJ01hcmlhJyxcbi8vICAgZW1haWw6ICdtYXJpYUBleGFtcGxlLmNvbScsXG4vLyAgIG9yZGVySWQ6ICdPUkQtMTIzJyxcbi8vICAgdG90YWw6IDk5Ljk5LFxuLy8gICBpdGVtczogM1xuLy8gfSwgJ3B0Jyk7XG4vL1xuLy8gLy8gTm90aWZpY2F0aW9uc1xuLy8gY29uc3Qgbm90aWZpY2F0aW9ucyA9IGF3YWl0IGdldE5vdGlmaWNhdGlvbk1lc3NhZ2VzKGNvbnRleHQsICdmcicpO1xuLy9cbi8vIC8vIFBlcmZvcm1hbmNlIHRlc3Rcbi8vIGNvbnN0IHBlcmYgPSBhd2FpdCBwZXJmb3JtYW5jZUNvbXBhcmlzb24oY29udGV4dCk7XG4vL1xuLy8gLy8gRHluYW1pYyBncmVldGluZ1xuLy8gY29uc3QgZ3JlZXRpbmcgPSBhd2FpdCBnZXRVc2VyR3JlZXRpbmcoY29udGV4dCwgJ2VuJywgJ0pvaG4nKTtcbi8vXG4vLyAvLyBGb3JjZSBmbHVzaFxuLy8gYXdhaXQgZW5zdXJlQWxsVHJhbnNsYXRpb25zUHJvY2Vzc2VkKCk7Il0sIm5hbWVzIjpbImZsdXNoIiwiaTE4biIsImdldFdlbGNvbWVNZXNzYWdlcyIsImNvbnRleHQiLCJsb2NhbGUiLCJ0cmFuc2xhdGlvbnMiLCJrZXkiLCJmYWxsYmFjayIsInJlc3VsdCIsImdldFBlcnNvbmFsaXplZE1lc3NhZ2VzIiwidXNlcm5hbWUiLCJwYXJhbXMiLCJjb3VudCIsImRhdGUiLCJEYXRlIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwiZ2V0TXVsdGlMYW5ndWFnZUNvbnRlbnQiLCJsYW5ndWFnZXMiLCJyZXN1bHRzIiwiZ2V0Um9idXN0VHJhbnNsYXRpb25zIiwiZXJyb3IiLCJjb25zb2xlIiwicmVkdWNlIiwiYWNjIiwidCIsInByb2Nlc3NMYXJnZVRyYW5zbGF0aW9uQmF0Y2giLCJpIiwicHVzaCIsIm51bWJlciIsImdldEVycm9yTWVzc2FnZXMiLCJlcnJvckNvZGUiLCJnZW5lcmF0ZUVtYWlsVGVtcGxhdGUiLCJ1c2VyRGF0YSIsIm9yZGVySWQiLCJuYW1lIiwidG90YWwiLCJpdGVtcyIsInN1YmplY3QiLCJncmVldGluZyIsImJvZHkiLCJmb290ZXIiLCJnZXROb3RpZmljYXRpb25NZXNzYWdlcyIsInNlbmRlciIsInBlcmZvcm1hbmNlQ29tcGFyaXNvbiIsImtleXMiLCJtYXAiLCJ0aW1lIiwiYmF0Y2hSZXN1bHRzIiwidGltZUVuZCIsImdldFVzZXJHcmVldGluZyIsInVzZXJMb2NhbGUiLCJob3VyIiwiZ2V0SG91cnMiLCJlbnN1cmVBbGxUcmFuc2xhdGlvbnNQcm9jZXNzZWQiLCJsb2ciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztDQVFDLEdBRUQsU0FBUUEsS0FBSyxFQUFFQyxJQUFJLFFBQStCLHdCQUF3QjtBQUsxRSwyRUFBMkU7QUFDM0UsT0FBTyxlQUFlQyxtQkFBbUJDLE9BQW1CLEVBQUVDLFNBQWlCLElBQUk7SUFDakYsTUFBTUMsZUFBb0M7UUFDeEM7WUFDRUMsS0FBSztZQUNMQyxVQUFVO1FBQ1o7UUFDQTtZQUNFRCxLQUFLO1lBQ0xDLFVBQVU7UUFDWjtRQUNBO1lBQ0VELEtBQUs7WUFDTEMsVUFBVTtRQUNaO0tBQ0Q7SUFFRCxhQUFhO0lBQ2IsOENBQThDO0lBQzlDLGtFQUFrRTtJQUNsRSx5RUFBeUU7SUFDekUsa0RBQWtEO0lBQ2xELE1BQU1DLFNBQVMsTUFBTVAsS0FBTUUsU0FBU0UsY0FBY0Q7SUFFbEQsT0FBT0k7QUFDUCxhQUFhO0FBQ2IscUVBQXFFO0FBQ3JFLDhFQUE4RTtBQUM5RSwyRkFBMkY7QUFDM0YsSUFBSTtBQUNOO0FBRUEsNkNBQTZDO0FBQzdDLE9BQU8sZUFBZUMsd0JBQXdCTixPQUFtQixFQUFFTyxRQUFnQixFQUFFTixTQUFpQixJQUFJO0lBQ3hHLE1BQU1DLGVBQW9DO1FBQ3hDO1lBQ0VDLEtBQUs7WUFDTEMsVUFBVTtZQUNWSSxRQUFRO2dCQUFDRDtZQUFRO1FBQ25CO1FBQ0E7WUFDRUosS0FBSztZQUNMQyxVQUFVO1lBQ1ZJLFFBQVE7Z0JBQUNDLE9BQU87WUFBQztRQUNuQjtRQUNBO1lBQ0VOLEtBQUs7WUFDTEMsVUFBVTtZQUNWSSxRQUFRO2dCQUFDRSxNQUFNLElBQUlDLE9BQU9DLGtCQUFrQjtZQUFFO1FBQ2hEO0tBQ0Q7SUFFRCxNQUFNUCxTQUFTLE1BQU1QLEtBQUtFLFNBQVNFLGNBQWNEO0lBRWpELE9BQU9JO0FBQ1AsYUFBYTtBQUNiLCtFQUErRTtBQUMvRSw2RkFBNkY7QUFDN0YsaUZBQWlGO0FBQ2pGLElBQUk7QUFDTjtBQUVBLG9DQUFvQztBQUNwQyxPQUFPLGVBQWVRLHdCQUF3QmIsT0FBbUI7SUFDL0Qsb0NBQW9DO0lBQ3BDLE1BQU1jLFlBQXNCO1FBQUM7UUFBTTtRQUFNO0tBQUs7SUFDOUMsTUFBTUMsVUFBa0QsQ0FBQztJQUV6RCxLQUFJLE1BQU1kLFVBQVVhLFVBQVc7UUFDN0IsTUFBTVosZUFBb0M7WUFDeEM7Z0JBQ0VDLEtBQUs7Z0JBQ0xDLFVBQVU7WUFDWjtZQUNBO2dCQUNFRCxLQUFLO2dCQUNMQyxVQUFVO1lBQ1o7U0FDRDtRQUVEVyxPQUFPLENBQUNkLE9BQU8sR0FBRyxNQUFNSCxLQUFLRSxTQUFTRSxjQUFjRDtJQUN0RDtJQUVBLE9BQU9jO0FBQ1AsYUFBYTtBQUNiLHdFQUF3RTtBQUN4RSx5RUFBeUU7QUFDekUsd0VBQXdFO0FBQ3hFLElBQUk7QUFDTjtBQUVBLDBDQUEwQztBQUMxQyxPQUFPLGVBQWVDLHNCQUFzQmhCLE9BQW1CLEVBQUVDLFNBQWlCLElBQUk7SUFDcEYsTUFBTUMsZUFBb0M7UUFDeEM7WUFDRUMsS0FBSztZQUNMQyxVQUFVO1FBQ1o7UUFDQTtZQUNFRCxLQUFLO1lBQ0xDLFVBQVU7UUFDWjtRQUNBO1lBQ0VELEtBQUs7WUFDTEMsVUFBVTtRQUNaO0tBQ0Q7SUFFRCxJQUFJO1FBQ0YsTUFBTUMsU0FBUyxNQUFNUCxLQUFLRSxTQUFTRSxjQUFjRDtRQUNqRCxPQUFPSTtJQUNULEVBQUUsT0FBTVksT0FBTztRQUNiQyxRQUFRRCxLQUFLLENBQUMsc0JBQXNCQTtRQUNwQyx3Q0FBd0M7UUFDeEMsT0FBT2YsYUFBYWlCLE1BQU0sQ0FBQyxDQUFDQyxLQUFLQztZQUMvQkQsR0FBRyxDQUFDQyxFQUFFbEIsR0FBRyxDQUFDLEdBQUdrQixFQUFFakIsUUFBUSxJQUFJO1lBQzNCLE9BQU9nQjtRQUNULEdBQUcsQ0FBQztJQUNOO0FBQ0Y7QUFFQSx5Q0FBeUM7QUFDekMsT0FBTyxlQUFlRSw2QkFBNkJ0QixPQUFtQixFQUFFQyxTQUFpQixJQUFJO0lBQzNGLHVDQUF1QztJQUN2QyxNQUFNQyxlQUFvQyxFQUFFO0lBRTVDLElBQUksSUFBSXFCLElBQUksR0FBR0EsS0FBSyxLQUFLQSxJQUFLO1FBQzVCckIsYUFBYXNCLElBQUksQ0FBQztZQUNoQnJCLEtBQUssQ0FBQyxLQUFLLEVBQUVvQixFQUFFLE1BQU0sQ0FBQztZQUN0Qm5CLFVBQVUsQ0FBQyxLQUFLLEVBQUVtQixFQUFFLE1BQU0sQ0FBQztZQUMzQmYsUUFBUTtnQkFBQ2lCLFFBQVFGO1lBQUM7UUFDcEI7SUFDRjtJQUVBLG9CQUFvQjtJQUNwQixNQUFNbEIsU0FBUyxNQUFNUCxLQUFLRSxTQUFTRSxjQUFjRDtJQUVqRCxnREFBZ0Q7SUFDaEQsTUFBTUo7SUFFTixPQUFPUTtBQUNUO0FBRUEsMkNBQTJDO0FBQzNDLE9BQU8sZUFBZXFCLGlCQUFpQjFCLE9BQW1CLEVBQUUyQixTQUFpQixFQUFFMUIsU0FBaUIsSUFBSTtJQUNsRyxNQUFNQyxlQUFvQztRQUN4QztZQUNFQyxLQUFLLENBQUMsTUFBTSxFQUFFd0IsV0FBVztZQUN6QnZCLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRXVCLFdBQVc7WUFDM0NuQixRQUFRO2dCQUFDbUI7WUFBUztRQUNwQjtRQUNBO1lBQ0V4QixLQUFLO1lBQ0xDLFVBQVU7WUFDVkksUUFBUSxDQUFDO1FBQ1g7S0FDRDtJQUVELE1BQU1ILFNBQVMsTUFBTVAsS0FBS0UsU0FBU0UsY0FBY0Q7SUFFakQscURBQXFEO0lBQ3JELElBQUk7SUFDSiwrREFBK0Q7SUFDL0QsK0VBQStFO0lBQy9FLElBQUk7SUFFSixPQUFPSTtBQUNUO0FBRUEsaUVBQWlFO0FBQ2pFLE9BQU8sZUFBZXVCLHNCQUNwQjVCLE9BQW1CLEVBQ25CNkIsUUFNQyxFQUNENUIsU0FBaUIsSUFBSTtJQUVyQixNQUFNQyxlQUFvQztRQUN4QztZQUNFQyxLQUFLO1lBQ0xDLFVBQVU7WUFDVkksUUFBUTtnQkFBQ3NCLFNBQVNELFNBQVNDLE9BQU87WUFBQTtRQUNwQztRQUNBO1lBQ0UzQixLQUFLO1lBQ0xDLFVBQVU7WUFDVkksUUFBUTtnQkFBQ3VCLE1BQU1GLFNBQVNFLElBQUk7WUFBQTtRQUM5QjtRQUNBO1lBQ0U1QixLQUFLO1lBQ0xDLFVBQVU7WUFDVkksUUFBUTtnQkFDTnNCLFNBQVNELFNBQVNDLE9BQU87Z0JBQ3pCRSxPQUFPSCxTQUFTRyxLQUFLO2dCQUNyQkMsT0FBT0osU0FBU0ksS0FBSztZQUN2QjtRQUNGO1FBQ0E7WUFDRTlCLEtBQUs7WUFDTEMsVUFBVTtRQUNaO0tBQ0Q7SUFFRCxNQUFNQyxTQUFTLE1BQU1QLEtBQUtFLFNBQVNFLGNBQWNEO0lBRWpELE9BQU87UUFDTGlDLFNBQVM3QixNQUFNLENBQUMsa0NBQWtDO1FBQ2xEOEIsVUFBVTlCLE1BQU0sQ0FBQyxtQ0FBbUM7UUFDcEQrQixNQUFNL0IsTUFBTSxDQUFDLCtCQUErQjtRQUM1Q2dDLFFBQVFoQyxNQUFNLENBQUMsaUNBQWlDO0lBQ2xEO0FBQ0Y7QUFFQSwyREFBMkQ7QUFDM0QsT0FBTyxlQUFlaUMsd0JBQXdCdEMsT0FBbUIsRUFBRUMsU0FBaUIsSUFBSTtJQUN0RixNQUFNQyxlQUFvQztRQUN4QztZQUNFQyxLQUFLO1lBQ0xDLFVBQVU7UUFDWjtRQUNBO1lBQ0VELEtBQUs7WUFDTEMsVUFBVTtRQUNaO1FBQ0E7WUFDRUQsS0FBSztZQUNMQyxVQUFVO1FBQ1o7UUFDQTtZQUNFRCxLQUFLO1lBQ0xDLFVBQVU7UUFDWjtRQUNBO1lBQ0VELEtBQUs7WUFDTEMsVUFBVTtZQUNWSSxRQUFRO2dCQUFDK0IsUUFBUTtZQUFVO1FBQzdCO0tBQ0Q7SUFFRCxNQUFNbEMsU0FBUyxNQUFNUCxLQUFLRSxTQUFTRSxjQUFjRDtJQUVqRCxPQUFPSTtBQUNUO0FBRUEsb0NBQW9DO0FBQ3BDLE9BQU8sZUFBZW1DLHNCQUFzQnhDLE9BQW1CO0lBQzdELE1BQU15QyxPQUFPO1FBQ1g7UUFBVztRQUFnQjtRQUFpQjtRQUM1QztRQUFpQjtRQUFjO1FBQWU7S0FDL0M7SUFFRCxNQUFNdkMsZUFBb0N1QyxLQUFLQyxHQUFHLENBQUMsQ0FBQ3ZDLE1BQVMsQ0FBQTtZQUMzREE7WUFDQUMsVUFBVSxDQUFDLGFBQWEsRUFBRUQsS0FBSztRQUNqQyxDQUFBO0lBRUFlLFFBQVF5QixJQUFJLENBQUM7SUFDYixNQUFNQyxlQUFlLE1BQU05QyxLQUFLRSxTQUFTRSxjQUFjO0lBQ3ZEZ0IsUUFBUTJCLE9BQU8sQ0FBQztJQUVoQixPQUFPRDtBQUNUO0FBRUEsd0RBQXdEO0FBQ3hELE9BQU8sZUFBZUUsZ0JBQ3BCOUMsT0FBbUIsRUFDbkIrQyxVQUFtQixFQUNuQnhDLFFBQWlCO0lBRWpCLE1BQU1OLFNBQWlCLEFBQUM4QyxjQUF5QjtJQUVqRCxNQUFNN0MsZUFBb0M7UUFDeEM7WUFDRUMsS0FBSztZQUNMQyxVQUFVO1lBQ1ZJLFFBQVFELFdBQVc7Z0JBQUNBO1lBQVEsSUFBSSxDQUFDO1FBQ25DO1FBQ0E7WUFDRUosS0FBSztZQUNMQyxVQUFVO1lBQ1ZJLFFBQVFELFdBQVc7Z0JBQUNBO1lBQVEsSUFBSSxDQUFDO1FBQ25DO1FBQ0E7WUFDRUosS0FBSztZQUNMQyxVQUFVO1lBQ1ZJLFFBQVFELFdBQVc7Z0JBQUNBO1lBQVEsSUFBSSxDQUFDO1FBQ25DO0tBQ0Q7SUFFRCxNQUFNRixTQUFTLE1BQU1QLEtBQUtFLFNBQVNFLGNBQWNEO0lBRWpELG1EQUFtRDtJQUNuRCxNQUFNK0MsT0FBTyxJQUFJckMsT0FBT3NDLFFBQVE7SUFDaEMsSUFBR0QsT0FBTyxJQUFJO1FBQ1osT0FBTzNDLE1BQU0sQ0FBQyxtQkFBbUI7SUFDbkM7SUFDQSxJQUFHMkMsT0FBTyxJQUFJO1FBQ1osT0FBTzNDLE1BQU0sQ0FBQyxxQkFBcUI7SUFDckM7SUFDQSxPQUFPQSxNQUFNLENBQUMsbUJBQW1CO0FBQ25DO0FBRUEsK0NBQStDO0FBQy9DLE9BQU8sZUFBZTZDO0lBQ3BCLGdEQUFnRDtJQUNoRCxNQUFNckQ7SUFDTnFCLFFBQVFpQyxHQUFHLENBQUM7QUFDZCxFQUVBLGtCQUFrQjtDQUNsQixvRkFBb0Y7Q0FDcEYsRUFBRTtDQUNGLGlCQUFpQjtDQUNqQixtRUFBbUU7Q0FDbkUsRUFBRTtDQUNGLHdCQUF3QjtDQUN4QixxRkFBcUY7Q0FDckYsRUFBRTtDQUNGLDRCQUE0QjtDQUM1Qix1RUFBdUU7Q0FDdkUsRUFBRTtDQUNGLG9CQUFvQjtDQUNwQixvRUFBb0U7Q0FDcEUsRUFBRTtDQUNGLHNCQUFzQjtDQUN0QiwrREFBK0Q7Q0FDL0QsbUJBQW1CO0NBQ25CLGdDQUFnQztDQUNoQyx3QkFBd0I7Q0FDeEIsa0JBQWtCO0NBQ2xCLGFBQWE7Q0FDYixZQUFZO0NBQ1osRUFBRTtDQUNGLG1CQUFtQjtDQUNuQixzRUFBc0U7Q0FDdEUsRUFBRTtDQUNGLHNCQUFzQjtDQUN0QixxREFBcUQ7Q0FDckQsRUFBRTtDQUNGLHNCQUFzQjtDQUN0QixpRUFBaUU7Q0FDakUsRUFBRTtDQUNGLGlCQUFpQjtDQUNqQiwwQ0FBMEMifQ==
|
|
@@ -1,2 +1,113 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3RyYW5zbGF0aW9uUXVldWUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cbmltcG9ydCB7Z2V0Q29udGVudFdpdGhGYWxsYmFja30gZnJvbSAnLi4vYWN0aW9ucy9jb250ZW50LmpzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0xvY2FsZX0gZnJvbSAnLi4vdHlwZXMvY29udGVudC50eXBlcy5qcyc7XG5cbmludGVyZmFjZSBUcmFuc2xhdGlvblJlcXVlc3Qge1xuICBrZXk6IHN0cmluZztcbiAgZmFsbGJhY2s6IHN0cmluZztcbiAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgbG9jYWxlOiBMb2NhbGU7XG4gIHJlc29sdmU6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICByZWplY3Q6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBUcmFuc2xhdGlvbkJhdGNoIHtcbiAgY29udGV4dDogQXBpQ29udGV4dDtcbiAgcmVxdWVzdHM6IFRyYW5zbGF0aW9uUmVxdWVzdFtdO1xuICB0aW1lb3V0OiBOb2RlSlMuVGltZW91dDtcbn1cblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uT2JqZWN0IHtcbiAga2V5OiBzdHJpbmc7XG4gIGZhbGxiYWNrPzogc3RyaW5nO1xuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG5jbGFzcyBUcmFuc2xhdGlvblF1ZXVlIHtcbiAgcHJpdmF0ZSBiYXRjaGVzOiBNYXA8c3RyaW5nLCBUcmFuc2xhdGlvbkJhdGNoPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBiYXRjaFRpbWVvdXQgPSA1MDtcbiAgcHJpdmF0ZSBtYXhCYXRjaFNpemUgPSAyMDtcblxuICBhc3luYyB0cmFuc2xhdGUoXG4gICAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgICB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10sXG4gICAgbG9jYWxlOiBMb2NhbGUgPSAnZW4nXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGlmKHRyYW5zbGF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9taXNlcyA9IHRyYW5zbGF0aW9ucy5tYXAoKHtrZXksIGZhbGxiYWNrID0gJycsIHBhcmFtcyA9IHt9fSkgPT5cbiAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oY29udGV4dCwga2V5LCBmYWxsYmFjaywgcGFyYW1zLCBsb2NhbGUpXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICBjb25zdCByZXN1bHRNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICB0cmFuc2xhdGlvbnMuZm9yRWFjaCgoe2tleX0sIGluZGV4KSA9PiB7XG4gICAgICByZXN1bHRNYXBba2V5XSA9IHJlc3VsdHNbaW5kZXhdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdE1hcDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0VHJhbnNsYXRpb24oXG4gICAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBmYWxsYmFjazogc3RyaW5nLFxuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuICAgIGxvY2FsZTogTG9jYWxlID0gJ2VuJ1xuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYXRjaEtleSA9IHRoaXMuZ2V0QmF0Y2hLZXkoY29udGV4dCwgbG9jYWxlKTtcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IFRyYW5zbGF0aW9uUmVxdWVzdCA9IHtrZXksIGZhbGxiYWNrLCBwYXJhbXMsIGxvY2FsZSwgcmVzb2x2ZSwgcmVqZWN0fTtcblxuICAgICAgaWYoIXRoaXMuYmF0Y2hlcy5oYXMoYmF0Y2hLZXkpKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NCYXRjaChiYXRjaEtleSk7XG4gICAgICAgIH0sIHRoaXMuYmF0Y2hUaW1lb3V0KTtcblxuICAgICAgICB0aGlzLmJhdGNoZXMuc2V0KGJhdGNoS2V5LCB7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICByZXF1ZXN0czogW3JlcXVlc3RdLFxuICAgICAgICAgIHRpbWVvdXRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBiYXRjaCA9IHRoaXMuYmF0Y2hlcy5nZXQoYmF0Y2hLZXkpITtcbiAgICAgICAgYmF0Y2gucmVxdWVzdHMucHVzaChyZXF1ZXN0KTtcblxuICAgICAgICBpZihiYXRjaC5yZXF1ZXN0cy5sZW5ndGggPj0gdGhpcy5tYXhCYXRjaFNpemUpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoYmF0Y2gudGltZW91dCk7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzQmF0Y2goYmF0Y2hLZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBiYXRjaEtleXMgPSBBcnJheS5mcm9tKHRoaXMuYmF0Y2hlcy5rZXlzKCkpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKGJhdGNoS2V5cy5tYXAoKGtleSkgPT4gdGhpcy5wcm9jZXNzQmF0Y2goa2V5KSkpO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5iYXRjaGVzLmZvckVhY2goKGJhdGNoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoYmF0Y2gudGltZW91dCk7XG4gICAgICBiYXRjaC5yZXF1ZXN0cy5mb3JFYWNoKChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJlcXVlc3QucmVqZWN0KG5ldyBFcnJvcignVHJhbnNsYXRpb24gcXVldWUgY2xlYXJlZCcpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuYmF0Y2hlcy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCYXRjaEtleShjb250ZXh0OiBBcGlDb250ZXh0LCBsb2NhbGU6IExvY2FsZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NvbnRleHQuZGF0YWJhc2VOYW1lfToke2xvY2FsZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzQmF0Y2goYmF0Y2hLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5iYXRjaGVzLmdldChiYXRjaEtleSk7XG4gICAgaWYoIWJhdGNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iYXRjaGVzLmRlbGV0ZShiYXRjaEtleSk7XG4gICAgY2xlYXJUaW1lb3V0KGJhdGNoLnRpbWVvdXQpO1xuXG4gICAgY29uc3QgcHJvbWlzZXMgPSBiYXRjaC5yZXF1ZXN0cy5tYXAoYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBnZXRDb250ZW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGJhdGNoLmNvbnRleHQsXG4gICAgICAgICAgcmVxdWVzdC5rZXksXG4gICAgICAgICAgcmVxdWVzdC5mYWxsYmFjayxcbiAgICAgICAgICByZXF1ZXN0LmxvY2FsZVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGludGVycG9sYXRlZENvbnRlbnQgPSB0aGlzLmludGVycG9sYXRlKGNvbnRlbnQsIHJlcXVlc3QucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHtyZXF1ZXN0LCByZXN1bHQ6IGludGVycG9sYXRlZENvbnRlbnR9O1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBjb25zdCBpbnRlcnBvbGF0ZWRGYWxsYmFjayA9IHRoaXMuaW50ZXJwb2xhdGUocmVxdWVzdC5mYWxsYmFjaywgcmVxdWVzdC5wYXJhbXMpO1xuICAgICAgICByZXR1cm4ge3JlcXVlc3QsIHJlc3VsdDogaW50ZXJwb2xhdGVkRmFsbGJhY2t9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgICAgaWYocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgICAgcmVzdWx0LnZhbHVlLnJlcXVlc3QucmVzb2x2ZShyZXN1bHQudmFsdWUucmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHtyZXF1ZXN0fSA9IHJlc3VsdC5yZWFzb247XG4gICAgICAgIGNvbnN0IGludGVycG9sYXRlZEZhbGxiYWNrID0gdGhpcy5pbnRlcnBvbGF0ZShyZXF1ZXN0LmZhbGxiYWNrLCByZXF1ZXN0LnBhcmFtcyk7XG4gICAgICAgIHJlcXVlc3QucmVzb2x2ZShpbnRlcnBvbGF0ZWRGYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGludGVycG9sYXRlKGNvbnRlbnQ6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBzdHJpbmcge1xuICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UoL1xce1xceyhcXHcrKVxcfVxcfS9nLCAobWF0Y2gsIGtleSkgPT4gKHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQgPyBTdHJpbmcocGFyYW1zW2tleV0pIDogbWF0Y2gpKTtcbiAgfVxufVxuXG5jb25zdCB0cmFuc2xhdGlvblF1ZXVlID0gbmV3IFRyYW5zbGF0aW9uUXVldWUoKTtcblxuZXhwb3J0IGNvbnN0IGkxOG4gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSxcbiAgbG9jYWxlPzogTG9jYWxlXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0+IHRyYW5zbGF0aW9uUXVldWUudHJhbnNsYXRlKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuZXhwb3J0IGNvbnN0IGZsdXNoID0gKCk6IFByb21pc2U8dm9pZD4gPT4gdHJhbnNsYXRpb25RdWV1ZS5mbHVzaCgpO1xuZXhwb3J0IGNvbnN0IGNsZWFyID0gKCk6IHZvaWQgPT4gdHJhbnNsYXRpb25RdWV1ZS5jbGVhcigpO1xuXG5leHBvcnQgdHlwZSB7VHJhbnNsYXRpb25PYmplY3R9O1xuXG4gIGV4cG9ydCB7dHJhbnNsYXRpb25RdWV1ZX07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFLQSxPQUFRLDBCQUFBQSxNQUE2Qix3QkEwQnJDLE1BQU1DLENBQWlCLENBQ2IsUUFBeUMsSUFBSSxJQUM3QyxhQUFlLEdBQ2YsYUFBZSxHQUV2QixNQUFNLFVBQ0pDLEVBQ0FDLEVBQ0FDLEVBQWlCLEtBQ2dCLENBQ2pDLEdBQUdELEVBQWEsU0FBVyxFQUN6QixNQUFPLENBQUMsRUFHVixNQUFNRSxFQUFXRixFQUFhLElBQUksQ0FBQyxDQUFDLElBQUFHLEVBQUssU0FBQUMsRUFBVyxHQUFJLE9BQUFDLEVBQVMsQ0FBQyxDQUFDLElBQ2pFLEtBQUssZUFBZU4sRUFBU0ksRUFBS0MsRUFBVUMsRUFBUUosQ0FBTSxDQUM1RCxFQUVNSyxFQUFVLE1BQU0sUUFBUSxJQUFJSixDQUFRLEVBRXBDSyxFQUFvQyxDQUFDLEVBQzNDLE9BQUFQLEVBQWEsUUFBUSxDQUFDLENBQUMsSUFBQUcsQ0FBRyxFQUFHSyxJQUFVLENBQ3JDRCxFQUFVSixDQUFHLEVBQUlHLEVBQVFFLENBQUssQ0FDaEMsQ0FBQyxFQUVNRCxDQUNULENBRUEsTUFBYyxlQUNaUixFQUNBSSxFQUNBQyxFQUNBQyxFQUE4QixDQUFDLEVBQy9CSixFQUFpQixLQUNBLENBQ2pCLE9BQU8sSUFBSSxRQUFRLENBQUNRLEVBQVNDLElBQVcsQ0FDdEMsTUFBTUMsRUFBVyxLQUFLLFlBQVlaLEVBQVNFLENBQU0sRUFDM0NXLEVBQThCLENBQUMsSUFBQVQsRUFBSyxTQUFBQyxFQUFVLE9BQUFDLEVBQVEsT0FBQUosRUFBUSxRQUFBUSxFQUFTLE9BQUFDLENBQU0sRUFFbkYsR0FBSSxLQUFLLFFBQVEsSUFBSUMsQ0FBUSxFQVV0QixDQUNMLE1BQU1FLEVBQVEsS0FBSyxRQUFRLElBQUlGLENBQVEsRUFDdkNFLEVBQU0sU0FBUyxLQUFLRCxDQUFPLEVBRXhCQyxFQUFNLFNBQVMsUUFBVSxLQUFLLGVBQy9CLGFBQWFBLEVBQU0sT0FBTyxFQUMxQixLQUFLLGFBQWFGLENBQVEsRUFFOUIsS0FsQmdDLENBQzlCLE1BQU1HLEVBQVUsV0FBVyxJQUFNLENBQy9CLEtBQUssYUFBYUgsQ0FBUSxDQUM1QixFQUFHLEtBQUssWUFBWSxFQUVwQixLQUFLLFFBQVEsSUFBSUEsRUFBVSxDQUN6QixRQUFBWixFQUNBLFNBQVUsQ0FBQ2EsQ0FBTyxFQUNsQixRQUFBRSxDQUNGLENBQUMsQ0FDSCxDQVNGLENBQUMsQ0FDSCxDQUVBLE1BQU0sT0FBdUIsQ0FDM0IsTUFBTUMsRUFBWSxNQUFNLEtBQUssS0FBSyxRQUFRLEtBQUssQ0FBQyxFQUNoRCxNQUFNLFFBQVEsSUFBSUEsRUFBVSxJQUFLWixHQUFRLEtBQUssYUFBYUEsQ0FBRyxDQUFDLENBQUMsQ0FDbEUsQ0FFQSxPQUFjLENBQ1osS0FBSyxRQUFRLFFBQVNVLEdBQVUsQ0FDOUIsYUFBYUEsRUFBTSxPQUFPLEVBQzFCQSxFQUFNLFNBQVMsUUFBU0QsR0FBWSxDQUNsQ0EsRUFBUSxPQUFPLElBQUksTUFBTSwyQkFBMkIsQ0FBQyxDQUN2RCxDQUFDLENBQ0gsQ0FBQyxFQUNELEtBQUssUUFBUSxNQUFNLENBQ3JCLENBRVEsWUFBWWIsRUFBcUJFLEVBQXdCLENBQy9ELE1BQU8sR0FBR0YsRUFBUSxZQUFZLElBQUlFLENBQU0sRUFDMUMsQ0FFQSxNQUFjLGFBQWFVLEVBQWlDLENBQzFELE1BQU1FLEVBQVEsS0FBSyxRQUFRLElBQUlGLENBQVEsRUFDdkMsR0FBRyxDQUFDRSxFQUNGLE9BR0YsS0FBSyxRQUFRLE9BQU9GLENBQVEsRUFDNUIsYUFBYUUsRUFBTSxPQUFPLEVBRTFCLE1BQU1YLEVBQVdXLEVBQU0sU0FBUyxJQUFJLE1BQU9ELEdBQVksQ0FDckQsR0FBSSxDQUNGLE1BQU1JLEVBQVUsTUFBTW5CLEVBQ3BCZ0IsRUFBTSxRQUNORCxFQUFRLElBQ1JBLEVBQVEsU0FDUkEsRUFBUSxNQUNWLEVBRU1LLEVBQXNCLEtBQUssWUFBWUQsRUFBU0osRUFBUSxNQUFNLEVBQ3BFLE1BQU8sQ0FBQyxRQUFBQSxFQUFTLE9BQVFLLENBQW1CLENBQzlDLE1BQWUsQ0FDYixNQUFNQyxFQUF1QixLQUFLLFlBQVlOLEVBQVEsU0FBVUEsRUFBUSxNQUFNLEVBQzlFLE1BQU8sQ0FBQyxRQUFBQSxFQUFTLE9BQVFNLENBQW9CLENBQy9DLENBQ0YsQ0FBQyxHQUVlLE1BQU0sUUFBUSxXQUFXaEIsQ0FBUSxHQUV6QyxRQUFTaUIsR0FBVyxDQUMxQixHQUFHQSxFQUFPLFNBQVcsWUFDbkJBLEVBQU8sTUFBTSxRQUFRLFFBQVFBLEVBQU8sTUFBTSxNQUFNLE1BQzNDLENBQ0wsS0FBTSxDQUFDLFFBQUFQLENBQU8sRUFBSU8sRUFBTyxPQUNuQkQsRUFBdUIsS0FBSyxZQUFZTixFQUFRLFNBQVVBLEVBQVEsTUFBTSxFQUM5RUEsRUFBUSxRQUFRTSxDQUFvQixDQUN0QyxDQUNGLENBQUMsQ0FDSCxDQUVRLFlBQVlGLEVBQWlCWCxFQUE4QixDQUFDLEVBQVcsQ0FDN0UsT0FBT1csRUFBUSxRQUFRLGlCQUFrQixDQUFDSSxFQUFPakIsSUFBU0UsRUFBT0YsQ0FBRyxJQUFNLE9BQVksT0FBT0UsRUFBT0YsQ0FBRyxDQUFDLEVBQUlpQixDQUFNLENBQ3BILENBQ0YsQ0FFQSxNQUFNQyxFQUFtQixJQUFJdkIsRUFFaEJ3QixFQUFPLENBQ2xCdkIsRUFDQUMsRUFDQUMsSUFDb0NvQixFQUFpQixVQUFVdEIsRUFBU0MsRUFBY0MsQ0FBTSxFQUVqRnNCLEVBQVEsSUFBcUJGLEVBQWlCLE1BQU0sRUFDcERHLEVBQVEsSUFBWUgsRUFBaUIsTUFBTSIsCiAgIm5hbWVzIjogWyJnZXRDb250ZW50V2l0aEZhbGxiYWNrIiwgIlRyYW5zbGF0aW9uUXVldWUiLCAiY29udGV4dCIsICJ0cmFuc2xhdGlvbnMiLCAibG9jYWxlIiwgInByb21pc2VzIiwgImtleSIsICJmYWxsYmFjayIsICJwYXJhbXMiLCAicmVzdWx0cyIsICJyZXN1bHRNYXAiLCAiaW5kZXgiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYmF0Y2hLZXkiLCAicmVxdWVzdCIsICJiYXRjaCIsICJ0aW1lb3V0IiwgImJhdGNoS2V5cyIsICJjb250ZW50IiwgImludGVycG9sYXRlZENvbnRlbnQiLCAiaW50ZXJwb2xhdGVkRmFsbGJhY2siLCAicmVzdWx0IiwgIm1hdGNoIiwgInRyYW5zbGF0aW9uUXVldWUiLCAiaTE4biIsICJmbHVzaCIsICJjbGVhciJdCn0K
|
|
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 { getContentWithFallback } from '../actions/content.js';
|
|
5
|
+
class TranslationQueue {
|
|
6
|
+
batches = new Map();
|
|
7
|
+
batchTimeout = 50;
|
|
8
|
+
maxBatchSize = 20;
|
|
9
|
+
async translate(context, translations, locale = 'en') {
|
|
10
|
+
if (translations.length === 0) {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
const promises = translations.map(({ key, fallback = '', params = {} })=>this.getTranslation(context, key, fallback, params, locale));
|
|
14
|
+
const results = await Promise.all(promises);
|
|
15
|
+
const resultMap = {};
|
|
16
|
+
translations.forEach(({ key }, index)=>{
|
|
17
|
+
resultMap[key] = results[index];
|
|
18
|
+
});
|
|
19
|
+
return resultMap;
|
|
20
|
+
}
|
|
21
|
+
async getTranslation(context, key, fallback, params = {}, locale = 'en') {
|
|
22
|
+
return new Promise((resolve, reject)=>{
|
|
23
|
+
const batchKey = this.getBatchKey(context, locale);
|
|
24
|
+
const request = {
|
|
25
|
+
key,
|
|
26
|
+
fallback,
|
|
27
|
+
params,
|
|
28
|
+
locale,
|
|
29
|
+
resolve,
|
|
30
|
+
reject
|
|
31
|
+
};
|
|
32
|
+
if (!this.batches.has(batchKey)) {
|
|
33
|
+
const timeout = setTimeout(()=>{
|
|
34
|
+
this.processBatch(batchKey);
|
|
35
|
+
}, this.batchTimeout);
|
|
36
|
+
this.batches.set(batchKey, {
|
|
37
|
+
context,
|
|
38
|
+
requests: [
|
|
39
|
+
request
|
|
40
|
+
],
|
|
41
|
+
timeout
|
|
42
|
+
});
|
|
43
|
+
} else {
|
|
44
|
+
const batch = this.batches.get(batchKey);
|
|
45
|
+
batch.requests.push(request);
|
|
46
|
+
if (batch.requests.length >= this.maxBatchSize) {
|
|
47
|
+
clearTimeout(batch.timeout);
|
|
48
|
+
this.processBatch(batchKey);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async flush() {
|
|
54
|
+
const batchKeys = Array.from(this.batches.keys());
|
|
55
|
+
await Promise.all(batchKeys.map((key)=>this.processBatch(key)));
|
|
56
|
+
}
|
|
57
|
+
clear() {
|
|
58
|
+
this.batches.forEach((batch)=>{
|
|
59
|
+
clearTimeout(batch.timeout);
|
|
60
|
+
batch.requests.forEach((request)=>{
|
|
61
|
+
request.reject(new Error('Translation queue cleared'));
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
this.batches.clear();
|
|
65
|
+
}
|
|
66
|
+
getBatchKey(context, locale) {
|
|
67
|
+
return `${context.databaseName}:${locale}`;
|
|
68
|
+
}
|
|
69
|
+
async processBatch(batchKey) {
|
|
70
|
+
const batch = this.batches.get(batchKey);
|
|
71
|
+
if (!batch) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this.batches.delete(batchKey);
|
|
75
|
+
clearTimeout(batch.timeout);
|
|
76
|
+
const promises = batch.requests.map(async (request)=>{
|
|
77
|
+
try {
|
|
78
|
+
const content = await getContentWithFallback(batch.context, request.key, request.fallback, request.locale);
|
|
79
|
+
const interpolatedContent = this.interpolate(content, request.params);
|
|
80
|
+
return {
|
|
81
|
+
request,
|
|
82
|
+
result: interpolatedContent
|
|
83
|
+
};
|
|
84
|
+
} catch (error) {
|
|
85
|
+
const interpolatedFallback = this.interpolate(request.fallback, request.params);
|
|
86
|
+
return {
|
|
87
|
+
request,
|
|
88
|
+
result: interpolatedFallback
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
const results = await Promise.allSettled(promises);
|
|
93
|
+
results.forEach((result)=>{
|
|
94
|
+
if (result.status === 'fulfilled') {
|
|
95
|
+
result.value.request.resolve(result.value.result);
|
|
96
|
+
} else {
|
|
97
|
+
const { request } = result.reason;
|
|
98
|
+
const interpolatedFallback = this.interpolate(request.fallback, request.params);
|
|
99
|
+
request.resolve(interpolatedFallback);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
interpolate(content, params = {}) {
|
|
104
|
+
return content.replace(/\{\{(\w+)\}\}/g, (match, key)=>params[key] !== undefined ? String(params[key]) : match);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const translationQueue = new TranslationQueue();
|
|
108
|
+
export const i18n = (context, translations, locale)=>translationQueue.translate(context, translations, locale);
|
|
109
|
+
export const flush = ()=>translationQueue.flush();
|
|
110
|
+
export const clear = ()=>translationQueue.clear();
|
|
111
|
+
export { translationQueue };
|
|
112
|
+
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL3V0aWxzL3RyYW5zbGF0aW9uUXVldWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuaW1wb3J0IHtnZXRDb250ZW50V2l0aEZhbGxiYWNrfSBmcm9tICcuLi9hY3Rpb25zL2NvbnRlbnQuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7TG9jYWxlfSBmcm9tICcuLi90eXBlcy9jb250ZW50LnR5cGVzLmpzJztcblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uUmVxdWVzdCB7XG4gIGtleTogc3RyaW5nO1xuICBmYWxsYmFjazogc3RyaW5nO1xuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBsb2NhbGU6IExvY2FsZTtcbiAgcmVzb2x2ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHJlamVjdDogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uQmF0Y2gge1xuICBjb250ZXh0OiBBcGlDb250ZXh0O1xuICByZXF1ZXN0czogVHJhbnNsYXRpb25SZXF1ZXN0W107XG4gIHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0O1xufVxuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25PYmplY3Qge1xuICBrZXk6IHN0cmluZztcbiAgZmFsbGJhY2s/OiBzdHJpbmc7XG4gIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmNsYXNzIFRyYW5zbGF0aW9uUXVldWUge1xuICBwcml2YXRlIGJhdGNoZXM6IE1hcDxzdHJpbmcsIFRyYW5zbGF0aW9uQmF0Y2g+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGJhdGNoVGltZW91dCA9IDUwO1xuICBwcml2YXRlIG1heEJhdGNoU2l6ZSA9IDIwO1xuXG4gIGFzeW5jIHRyYW5zbGF0ZShcbiAgICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICAgIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSxcbiAgICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgaWYodHJhbnNsYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2VzID0gdHJhbnNsYXRpb25zLm1hcCgoe2tleSwgZmFsbGJhY2sgPSAnJywgcGFyYW1zID0ge319KSA9PlxuICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbihjb250ZXh0LCBrZXksIGZhbGxiYWNrLCBwYXJhbXMsIGxvY2FsZSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgIGNvbnN0IHJlc3VsdE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIHRyYW5zbGF0aW9ucy5mb3JFYWNoKCh7a2V5fSwgaW5kZXgpID0+IHtcbiAgICAgIHJlc3VsdE1hcFtrZXldID0gcmVzdWx0c1tpbmRleF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0TWFwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRUcmFuc2xhdGlvbihcbiAgICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICAgIGtleTogc3RyaW5nLFxuICAgIGZhbGxiYWNrOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICAgbG9jYWxlOiBMb2NhbGUgPSAnZW4nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhdGNoS2V5ID0gdGhpcy5nZXRCYXRjaEtleShjb250ZXh0LCBsb2NhbGUpO1xuICAgICAgY29uc3QgcmVxdWVzdDogVHJhbnNsYXRpb25SZXF1ZXN0ID0ge2tleSwgZmFsbGJhY2ssIHBhcmFtcywgbG9jYWxlLCByZXNvbHZlLCByZWplY3R9O1xuXG4gICAgICBpZighdGhpcy5iYXRjaGVzLmhhcyhiYXRjaEtleSkpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc0JhdGNoKGJhdGNoS2V5KTtcbiAgICAgICAgfSwgdGhpcy5iYXRjaFRpbWVvdXQpO1xuXG4gICAgICAgIHRoaXMuYmF0Y2hlcy5zZXQoYmF0Y2hLZXksIHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHJlcXVlc3RzOiBbcmVxdWVzdF0sXG4gICAgICAgICAgdGltZW91dFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5iYXRjaGVzLmdldChiYXRjaEtleSkhO1xuICAgICAgICBiYXRjaC5yZXF1ZXN0cy5wdXNoKHJlcXVlc3QpO1xuXG4gICAgICAgIGlmKGJhdGNoLnJlcXVlc3RzLmxlbmd0aCA+PSB0aGlzLm1heEJhdGNoU2l6ZSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChiYXRjaC50aW1lb3V0KTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NCYXRjaChiYXRjaEtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhdGNoS2V5cyA9IEFycmF5LmZyb20odGhpcy5iYXRjaGVzLmtleXMoKSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoYmF0Y2hLZXlzLm1hcCgoa2V5KSA9PiB0aGlzLnByb2Nlc3NCYXRjaChrZXkpKSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmJhdGNoZXMuZm9yRWFjaCgoYmF0Y2gpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChiYXRjaC50aW1lb3V0KTtcbiAgICAgIGJhdGNoLnJlcXVlc3RzLmZvckVhY2goKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmVxdWVzdC5yZWplY3QobmV3IEVycm9yKCdUcmFuc2xhdGlvbiBxdWV1ZSBjbGVhcmVkJykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5iYXRjaGVzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEJhdGNoS2V5KGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2FsZTogTG9jYWxlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y29udGV4dC5kYXRhYmFzZU5hbWV9OiR7bG9jYWxlfWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NCYXRjaChiYXRjaEtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLmJhdGNoZXMuZ2V0KGJhdGNoS2V5KTtcbiAgICBpZighYmF0Y2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhdGNoZXMuZGVsZXRlKGJhdGNoS2V5KTtcbiAgICBjbGVhclRpbWVvdXQoYmF0Y2gudGltZW91dCk7XG5cbiAgICBjb25zdCBwcm9taXNlcyA9IGJhdGNoLnJlcXVlc3RzLm1hcChhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGdldENvbnRlbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYmF0Y2guY29udGV4dCxcbiAgICAgICAgICByZXF1ZXN0LmtleSxcbiAgICAgICAgICByZXF1ZXN0LmZhbGxiYWNrLFxuICAgICAgICAgIHJlcXVlc3QubG9jYWxlXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQ29udGVudCA9IHRoaXMuaW50ZXJwb2xhdGUoY29udGVudCwgcmVxdWVzdC5wYXJhbXMpO1xuICAgICAgICByZXR1cm4ge3JlcXVlc3QsIHJlc3VsdDogaW50ZXJwb2xhdGVkQ29udGVudH07XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGludGVycG9sYXRlZEZhbGxiYWNrID0gdGhpcy5pbnRlcnBvbGF0ZShyZXF1ZXN0LmZhbGxiYWNrLCByZXF1ZXN0LnBhcmFtcyk7XG4gICAgICAgIHJldHVybiB7cmVxdWVzdCwgcmVzdWx0OiBpbnRlcnBvbGF0ZWRGYWxsYmFja307XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKTtcblxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICBpZihyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgICByZXN1bHQudmFsdWUucmVxdWVzdC5yZXNvbHZlKHJlc3VsdC52YWx1ZS5yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge3JlcXVlc3R9ID0gcmVzdWx0LnJlYXNvbjtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkRmFsbGJhY2sgPSB0aGlzLmludGVycG9sYXRlKHJlcXVlc3QuZmFsbGJhY2ssIHJlcXVlc3QucGFyYW1zKTtcbiAgICAgICAgcmVxdWVzdC5yZXNvbHZlKGludGVycG9sYXRlZEZhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZXJwb2xhdGUoY29udGVudDogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXFx7XFx7KFxcdyspXFx9XFx9L2csIChtYXRjaCwga2V5KSA9PiAocGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCA/IFN0cmluZyhwYXJhbXNba2V5XSkgOiBtYXRjaCkpO1xuICB9XG59XG5cbmNvbnN0IHRyYW5zbGF0aW9uUXVldWUgPSBuZXcgVHJhbnNsYXRpb25RdWV1ZSgpO1xuXG5leHBvcnQgY29uc3QgaTE4biA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdLFxuICBsb2NhbGU/OiBMb2NhbGVcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPT4gdHJhbnNsYXRpb25RdWV1ZS50cmFuc2xhdGUoY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuXG5leHBvcnQgY29uc3QgZmx1c2ggPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0cmFuc2xhdGlvblF1ZXVlLmZsdXNoKCk7XG5leHBvcnQgY29uc3QgY2xlYXIgPSAoKTogdm9pZCA9PiB0cmFuc2xhdGlvblF1ZXVlLmNsZWFyKCk7XG5cbmV4cG9ydCB0eXBlIHtUcmFuc2xhdGlvbk9iamVjdH07XG5cbiAgZXhwb3J0IHt0cmFuc2xhdGlvblF1ZXVlfTtcbiJdLCJuYW1lcyI6WyJnZXRDb250ZW50V2l0aEZhbGxiYWNrIiwiVHJhbnNsYXRpb25RdWV1ZSIsImJhdGNoZXMiLCJNYXAiLCJiYXRjaFRpbWVvdXQiLCJtYXhCYXRjaFNpemUiLCJ0cmFuc2xhdGUiLCJjb250ZXh0IiwidHJhbnNsYXRpb25zIiwibG9jYWxlIiwibGVuZ3RoIiwicHJvbWlzZXMiLCJtYXAiLCJrZXkiLCJmYWxsYmFjayIsInBhcmFtcyIsImdldFRyYW5zbGF0aW9uIiwicmVzdWx0cyIsIlByb21pc2UiLCJhbGwiLCJyZXN1bHRNYXAiLCJmb3JFYWNoIiwiaW5kZXgiLCJyZXNvbHZlIiwicmVqZWN0IiwiYmF0Y2hLZXkiLCJnZXRCYXRjaEtleSIsInJlcXVlc3QiLCJoYXMiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsInByb2Nlc3NCYXRjaCIsInNldCIsInJlcXVlc3RzIiwiYmF0Y2giLCJnZXQiLCJwdXNoIiwiY2xlYXJUaW1lb3V0IiwiZmx1c2giLCJiYXRjaEtleXMiLCJBcnJheSIsImZyb20iLCJrZXlzIiwiY2xlYXIiLCJFcnJvciIsImRhdGFiYXNlTmFtZSIsImRlbGV0ZSIsImNvbnRlbnQiLCJpbnRlcnBvbGF0ZWRDb250ZW50IiwiaW50ZXJwb2xhdGUiLCJyZXN1bHQiLCJlcnJvciIsImludGVycG9sYXRlZEZhbGxiYWNrIiwiYWxsU2V0dGxlZCIsInN0YXR1cyIsInZhbHVlIiwicmVhc29uIiwicmVwbGFjZSIsIm1hdGNoIiwidW5kZWZpbmVkIiwiU3RyaW5nIiwidHJhbnNsYXRpb25RdWV1ZSIsImkxOG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUVELFNBQVFBLHNCQUFzQixRQUFPLHdCQUF3QjtBQTBCN0QsTUFBTUM7SUFDSUMsVUFBeUMsSUFBSUMsTUFBTTtJQUNuREMsZUFBZSxHQUFHO0lBQ2xCQyxlQUFlLEdBQUc7SUFFMUIsTUFBTUMsVUFDSkMsT0FBbUIsRUFDbkJDLFlBQWlDLEVBQ2pDQyxTQUFpQixJQUFJLEVBQ1k7UUFDakMsSUFBR0QsYUFBYUUsTUFBTSxLQUFLLEdBQUc7WUFDNUIsT0FBTyxDQUFDO1FBQ1Y7UUFFQSxNQUFNQyxXQUFXSCxhQUFhSSxHQUFHLENBQUMsQ0FBQyxFQUFDQyxHQUFHLEVBQUVDLFdBQVcsRUFBRSxFQUFFQyxTQUFTLENBQUMsQ0FBQyxFQUFDLEdBQ2xFLElBQUksQ0FBQ0MsY0FBYyxDQUFDVCxTQUFTTSxLQUFLQyxVQUFVQyxRQUFRTjtRQUd0RCxNQUFNUSxVQUFVLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ1I7UUFFbEMsTUFBTVMsWUFBb0MsQ0FBQztRQUMzQ1osYUFBYWEsT0FBTyxDQUFDLENBQUMsRUFBQ1IsR0FBRyxFQUFDLEVBQUVTO1lBQzNCRixTQUFTLENBQUNQLElBQUksR0FBR0ksT0FBTyxDQUFDSyxNQUFNO1FBQ2pDO1FBRUEsT0FBT0Y7SUFDVDtJQUVBLE1BQWNKLGVB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
|