@nice2dev/game-engine 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/LICENSE +21 -0
- package/README.md +105 -0
- package/dist/cjs/accessibility/Accessibility.js +162 -0
- package/dist/cjs/accessibility/Accessibility.js.map +1 -0
- package/dist/cjs/ai/AI.js +321 -0
- package/dist/cjs/ai/AI.js.map +1 -0
- package/dist/cjs/animation/Animation.js +233 -0
- package/dist/cjs/animation/Animation.js.map +1 -0
- package/dist/cjs/audio/AudioAdvanced.js +262 -0
- package/dist/cjs/audio/AudioAdvanced.js.map +1 -0
- package/dist/cjs/audio/AudioManager.js +248 -0
- package/dist/cjs/audio/AudioManager.js.map +1 -0
- package/dist/cjs/core/EventBus.js +63 -0
- package/dist/cjs/core/EventBus.js.map +1 -0
- package/dist/cjs/core/GameClock.js +70 -0
- package/dist/cjs/core/GameClock.js.map +1 -0
- package/dist/cjs/core/GameConfig.js +86 -0
- package/dist/cjs/core/GameConfig.js.map +1 -0
- package/dist/cjs/core/GameLoop.js +93 -0
- package/dist/cjs/core/GameLoop.js.map +1 -0
- package/dist/cjs/core/ServiceLocator.js +73 -0
- package/dist/cjs/core/ServiceLocator.js.map +1 -0
- package/dist/cjs/core/Validation.js +119 -0
- package/dist/cjs/core/Validation.js.map +1 -0
- package/dist/cjs/core/math.js +116 -0
- package/dist/cjs/core/math.js.map +1 -0
- package/dist/cjs/devtools/DevTools.js +560 -0
- package/dist/cjs/devtools/DevTools.js.map +1 -0
- package/dist/cjs/devtools/DeveloperExperience.js +562 -0
- package/dist/cjs/devtools/DeveloperExperience.js.map +1 -0
- package/dist/cjs/docs/DocGenerator.js +357 -0
- package/dist/cjs/docs/DocGenerator.js.map +1 -0
- package/dist/cjs/ecs/World.js +280 -0
- package/dist/cjs/ecs/World.js.map +1 -0
- package/dist/cjs/editor/AdvancedEditor.js +149 -0
- package/dist/cjs/editor/AdvancedEditor.js.map +1 -0
- package/dist/cjs/editor/AssetManager.js +190 -0
- package/dist/cjs/editor/AssetManager.js.map +1 -0
- package/dist/cjs/editor/DebugTools.js +187 -0
- package/dist/cjs/editor/DebugTools.js.map +1 -0
- package/dist/cjs/editor/NiceGameEditor.js +361 -0
- package/dist/cjs/editor/NiceGameEditor.js.map +1 -0
- package/dist/cjs/editor/SceneEditor.js +223 -0
- package/dist/cjs/editor/SceneEditor.js.map +1 -0
- package/dist/cjs/engine/NiceGameEngine.js +172 -0
- package/dist/cjs/engine/NiceGameEngine.js.map +1 -0
- package/dist/cjs/enterprise/Enterprise.js +258 -0
- package/dist/cjs/enterprise/Enterprise.js.map +1 -0
- package/dist/cjs/i18n/I18n.js +634 -0
- package/dist/cjs/i18n/I18n.js.map +1 -0
- package/dist/cjs/i18n/useTranslation.js +100 -0
- package/dist/cjs/i18n/useTranslation.js.map +1 -0
- package/dist/cjs/index.js +526 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/input/GamepadNavigation.js +181 -0
- package/dist/cjs/input/GamepadNavigation.js.map +1 -0
- package/dist/cjs/input/InputManager.js +404 -0
- package/dist/cjs/input/InputManager.js.map +1 -0
- package/dist/cjs/input/useGamepads.js +86 -0
- package/dist/cjs/input/useGamepads.js.map +1 -0
- package/dist/cjs/kids/KidMode.js +670 -0
- package/dist/cjs/kids/KidMode.js.map +1 -0
- package/dist/cjs/kids/KidTools.js +533 -0
- package/dist/cjs/kids/KidTools.js.map +1 -0
- package/dist/cjs/monetization/Monetization.js +197 -0
- package/dist/cjs/monetization/Monetization.js.map +1 -0
- package/dist/cjs/multiplayer/LocalMultiplayer.js +288 -0
- package/dist/cjs/multiplayer/LocalMultiplayer.js.map +1 -0
- package/dist/cjs/multiplayer/MiniGameTypes.js +70 -0
- package/dist/cjs/multiplayer/MiniGameTypes.js.map +1 -0
- package/dist/cjs/network/MultiplayerTransport.js +109 -0
- package/dist/cjs/network/MultiplayerTransport.js.map +1 -0
- package/dist/cjs/network/Networking.js +569 -0
- package/dist/cjs/network/Networking.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js +32 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js +51 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js +46 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js +18 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js +145 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js +161 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js +56 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js +11 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js +52 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js +576 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js +956 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js +149 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js +25 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js +27 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js +26 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js +124 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js +17 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js +188 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js +199 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js +108 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js +38 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js +24 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js +264 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js +160 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js +88 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/index.js +50 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/index.js.map +1 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js +6 -0
- package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -0
- package/dist/cjs/pathfinding/Pathfinding.js +255 -0
- package/dist/cjs/pathfinding/Pathfinding.js.map +1 -0
- package/dist/cjs/performance/BenchmarkSuite.js +318 -0
- package/dist/cjs/performance/BenchmarkSuite.js.map +1 -0
- package/dist/cjs/performance/Performance.js +180 -0
- package/dist/cjs/performance/Performance.js.map +1 -0
- package/dist/cjs/performance/PerformanceAdvanced.js +628 -0
- package/dist/cjs/performance/PerformanceAdvanced.js.map +1 -0
- package/dist/cjs/physics/PhysicsAdvanced.js +432 -0
- package/dist/cjs/physics/PhysicsAdvanced.js.map +1 -0
- package/dist/cjs/physics/PhysicsEngine2D.js +445 -0
- package/dist/cjs/physics/PhysicsEngine2D.js.map +1 -0
- package/dist/cjs/plugins/PluginSDK.js +488 -0
- package/dist/cjs/plugins/PluginSDK.js.map +1 -0
- package/dist/cjs/plugins/PluginTestKit.js +368 -0
- package/dist/cjs/plugins/PluginTestKit.js.map +1 -0
- package/dist/cjs/procedural/Procedural.js +288 -0
- package/dist/cjs/procedural/Procedural.js.map +1 -0
- package/dist/cjs/procedural/WorldBuilding.js +246 -0
- package/dist/cjs/procedural/WorldBuilding.js.map +1 -0
- package/dist/cjs/release/MobileExport.js +149 -0
- package/dist/cjs/release/MobileExport.js.map +1 -0
- package/dist/cjs/release/Release.js +151 -0
- package/dist/cjs/release/Release.js.map +1 -0
- package/dist/cjs/rendering/Camera2D.js +129 -0
- package/dist/cjs/rendering/Camera2D.js.map +1 -0
- package/dist/cjs/rendering/Renderer2D.js +337 -0
- package/dist/cjs/rendering/Renderer2D.js.map +1 -0
- package/dist/cjs/runtime3d/Runtime3D.js +381 -0
- package/dist/cjs/runtime3d/Runtime3D.js.map +1 -0
- package/dist/cjs/runtime3d/SceneEditor3D.js +316 -0
- package/dist/cjs/runtime3d/SceneEditor3D.js.map +1 -0
- package/dist/cjs/scene/SceneManager.js +186 -0
- package/dist/cjs/scene/SceneManager.js.map +1 -0
- package/dist/cjs/scripting/NodeGraph.js +573 -0
- package/dist/cjs/scripting/NodeGraph.js.map +1 -0
- package/dist/cjs/social/Social.js +91 -0
- package/dist/cjs/social/Social.js.map +1 -0
- package/dist/cjs/templates/ActionTemplates.js +229 -0
- package/dist/cjs/templates/ActionTemplates.js.map +1 -0
- package/dist/cjs/templates/PartyTemplates.js +221 -0
- package/dist/cjs/templates/PartyTemplates.js.map +1 -0
- package/dist/cjs/templates/PuzzleTemplates.js +283 -0
- package/dist/cjs/templates/PuzzleTemplates.js.map +1 -0
- package/dist/cjs/templates/RPGTemplates.js +209 -0
- package/dist/cjs/templates/RPGTemplates.js.map +1 -0
- package/dist/cjs/templates/SportsTemplates.js +272 -0
- package/dist/cjs/templates/SportsTemplates.js.map +1 -0
- package/dist/cjs/templates/StrategyTemplates.js +173 -0
- package/dist/cjs/templates/StrategyTemplates.js.map +1 -0
- package/dist/cjs/templates/WaveDefense.js +470 -0
- package/dist/cjs/templates/WaveDefense.js.map +1 -0
- package/dist/cjs/tilemap/Tilemap.js +208 -0
- package/dist/cjs/tilemap/Tilemap.js.map +1 -0
- package/dist/cjs/tutorials/TutorialBranching.js +392 -0
- package/dist/cjs/tutorials/TutorialBranching.js.map +1 -0
- package/dist/cjs/tutorials/TutorialEngine.js +903 -0
- package/dist/cjs/tutorials/TutorialEngine.js.map +1 -0
- package/dist/cjs/tutorials/TutorialOverlay.js +602 -0
- package/dist/cjs/tutorials/TutorialOverlay.js.map +1 -0
- package/dist/cjs/tutorials/content/Tutorials_T05_T08.js +816 -0
- package/dist/cjs/tutorials/content/Tutorials_T05_T08.js.map +1 -0
- package/dist/cjs/tutorials/content/Tutorials_T09_T11.js +741 -0
- package/dist/cjs/tutorials/content/Tutorials_T09_T11.js.map +1 -0
- package/dist/cjs/tutorials/content/Tutorials_T12_T15.js +786 -0
- package/dist/cjs/tutorials/content/Tutorials_T12_T15.js.map +1 -0
- package/dist/cjs/ui/GameUI.js +312 -0
- package/dist/cjs/ui/GameUI.js.map +1 -0
- package/dist/cjs/xr/ARVR.js +197 -0
- package/dist/cjs/xr/ARVR.js.map +1 -0
- package/dist/esm/accessibility/Accessibility.js +153 -0
- package/dist/esm/accessibility/Accessibility.js.map +1 -0
- package/dist/esm/ai/AI.js +302 -0
- package/dist/esm/ai/AI.js.map +1 -0
- package/dist/esm/animation/Animation.js +227 -0
- package/dist/esm/animation/Animation.js.map +1 -0
- package/dist/esm/audio/AudioAdvanced.js +243 -0
- package/dist/esm/audio/AudioAdvanced.js.map +1 -0
- package/dist/esm/audio/AudioManager.js +246 -0
- package/dist/esm/audio/AudioManager.js.map +1 -0
- package/dist/esm/core/EventBus.js +61 -0
- package/dist/esm/core/EventBus.js.map +1 -0
- package/dist/esm/core/GameClock.js +68 -0
- package/dist/esm/core/GameClock.js.map +1 -0
- package/dist/esm/core/GameConfig.js +80 -0
- package/dist/esm/core/GameConfig.js.map +1 -0
- package/dist/esm/core/GameLoop.js +91 -0
- package/dist/esm/core/GameLoop.js.map +1 -0
- package/dist/esm/core/ServiceLocator.js +70 -0
- package/dist/esm/core/ServiceLocator.js.map +1 -0
- package/dist/esm/core/Validation.js +108 -0
- package/dist/esm/core/Validation.js.map +1 -0
- package/dist/esm/core/math.js +114 -0
- package/dist/esm/core/math.js.map +1 -0
- package/dist/esm/devtools/DevTools.js +555 -0
- package/dist/esm/devtools/DevTools.js.map +1 -0
- package/dist/esm/devtools/DeveloperExperience.js +547 -0
- package/dist/esm/devtools/DeveloperExperience.js.map +1 -0
- package/dist/esm/docs/DocGenerator.js +353 -0
- package/dist/esm/docs/DocGenerator.js.map +1 -0
- package/dist/esm/ecs/World.js +276 -0
- package/dist/esm/ecs/World.js.map +1 -0
- package/dist/esm/editor/AdvancedEditor.js +141 -0
- package/dist/esm/editor/AdvancedEditor.js.map +1 -0
- package/dist/esm/editor/AssetManager.js +188 -0
- package/dist/esm/editor/AssetManager.js.map +1 -0
- package/dist/esm/editor/DebugTools.js +179 -0
- package/dist/esm/editor/DebugTools.js.map +1 -0
- package/dist/esm/editor/NiceGameEditor.js +355 -0
- package/dist/esm/editor/NiceGameEditor.js.map +1 -0
- package/dist/esm/editor/SceneEditor.js +209 -0
- package/dist/esm/editor/SceneEditor.js.map +1 -0
- package/dist/esm/engine/NiceGameEngine.js +170 -0
- package/dist/esm/engine/NiceGameEngine.js.map +1 -0
- package/dist/esm/enterprise/Enterprise.js +246 -0
- package/dist/esm/enterprise/Enterprise.js.map +1 -0
- package/dist/esm/i18n/I18n.js +622 -0
- package/dist/esm/i18n/I18n.js.map +1 -0
- package/dist/esm/i18n/useTranslation.js +95 -0
- package/dist/esm/i18n/useTranslation.js.map +1 -0
- package/dist/esm/index.js +71 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/input/GamepadNavigation.js +178 -0
- package/dist/esm/input/GamepadNavigation.js.map +1 -0
- package/dist/esm/input/InputManager.js +399 -0
- package/dist/esm/input/InputManager.js.map +1 -0
- package/dist/esm/input/useGamepads.js +83 -0
- package/dist/esm/input/useGamepads.js.map +1 -0
- package/dist/esm/kids/KidMode.js +663 -0
- package/dist/esm/kids/KidMode.js.map +1 -0
- package/dist/esm/kids/KidTools.js +529 -0
- package/dist/esm/kids/KidTools.js.map +1 -0
- package/dist/esm/monetization/Monetization.js +186 -0
- package/dist/esm/monetization/Monetization.js.map +1 -0
- package/dist/esm/multiplayer/LocalMultiplayer.js +284 -0
- package/dist/esm/multiplayer/LocalMultiplayer.js.map +1 -0
- package/dist/esm/multiplayer/MiniGameTypes.js +60 -0
- package/dist/esm/multiplayer/MiniGameTypes.js.map +1 -0
- package/dist/esm/network/MultiplayerTransport.js +106 -0
- package/dist/esm/network/MultiplayerTransport.js.map +1 -0
- package/dist/esm/network/Networking.js +561 -0
- package/dist/esm/network/Networking.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js +30 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js +49 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js +44 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js +16 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js +136 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js +159 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js +54 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js +9 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js +49 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js +573 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js +954 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js +147 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js +25 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js +27 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js +26 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js +122 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js +15 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js +186 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js +197 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js +106 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js +36 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js +22 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js +249 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js +158 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js +86 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/index.js +13 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/index.js.map +1 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js +4 -0
- package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -0
- package/dist/esm/pathfinding/Pathfinding.js +250 -0
- package/dist/esm/pathfinding/Pathfinding.js.map +1 -0
- package/dist/esm/performance/BenchmarkSuite.js +315 -0
- package/dist/esm/performance/BenchmarkSuite.js.map +1 -0
- package/dist/esm/performance/Performance.js +171 -0
- package/dist/esm/performance/Performance.js.map +1 -0
- package/dist/esm/performance/PerformanceAdvanced.js +620 -0
- package/dist/esm/performance/PerformanceAdvanced.js.map +1 -0
- package/dist/esm/physics/PhysicsAdvanced.js +417 -0
- package/dist/esm/physics/PhysicsAdvanced.js.map +1 -0
- package/dist/esm/physics/PhysicsEngine2D.js +442 -0
- package/dist/esm/physics/PhysicsEngine2D.js.map +1 -0
- package/dist/esm/plugins/PluginSDK.js +484 -0
- package/dist/esm/plugins/PluginSDK.js.map +1 -0
- package/dist/esm/plugins/PluginTestKit.js +359 -0
- package/dist/esm/plugins/PluginTestKit.js.map +1 -0
- package/dist/esm/procedural/Procedural.js +282 -0
- package/dist/esm/procedural/Procedural.js.map +1 -0
- package/dist/esm/procedural/WorldBuilding.js +225 -0
- package/dist/esm/procedural/WorldBuilding.js.map +1 -0
- package/dist/esm/release/MobileExport.js +142 -0
- package/dist/esm/release/MobileExport.js.map +1 -0
- package/dist/esm/release/Release.js +141 -0
- package/dist/esm/release/Release.js.map +1 -0
- package/dist/esm/rendering/Camera2D.js +127 -0
- package/dist/esm/rendering/Camera2D.js.map +1 -0
- package/dist/esm/rendering/Renderer2D.js +334 -0
- package/dist/esm/rendering/Renderer2D.js.map +1 -0
- package/dist/esm/runtime3d/Runtime3D.js +371 -0
- package/dist/esm/runtime3d/Runtime3D.js.map +1 -0
- package/dist/esm/runtime3d/SceneEditor3D.js +299 -0
- package/dist/esm/runtime3d/SceneEditor3D.js.map +1 -0
- package/dist/esm/scene/SceneManager.js +184 -0
- package/dist/esm/scene/SceneManager.js.map +1 -0
- package/dist/esm/scripting/NodeGraph.js +568 -0
- package/dist/esm/scripting/NodeGraph.js.map +1 -0
- package/dist/esm/social/Social.js +85 -0
- package/dist/esm/social/Social.js.map +1 -0
- package/dist/esm/templates/ActionTemplates.js +217 -0
- package/dist/esm/templates/ActionTemplates.js.map +1 -0
- package/dist/esm/templates/PartyTemplates.js +204 -0
- package/dist/esm/templates/PartyTemplates.js.map +1 -0
- package/dist/esm/templates/PuzzleTemplates.js +267 -0
- package/dist/esm/templates/PuzzleTemplates.js.map +1 -0
- package/dist/esm/templates/RPGTemplates.js +196 -0
- package/dist/esm/templates/RPGTemplates.js.map +1 -0
- package/dist/esm/templates/SportsTemplates.js +257 -0
- package/dist/esm/templates/SportsTemplates.js.map +1 -0
- package/dist/esm/templates/StrategyTemplates.js +157 -0
- package/dist/esm/templates/StrategyTemplates.js.map +1 -0
- package/dist/esm/templates/WaveDefense.js +467 -0
- package/dist/esm/templates/WaveDefense.js.map +1 -0
- package/dist/esm/tilemap/Tilemap.js +205 -0
- package/dist/esm/tilemap/Tilemap.js.map +1 -0
- package/dist/esm/tutorials/TutorialBranching.js +388 -0
- package/dist/esm/tutorials/TutorialBranching.js.map +1 -0
- package/dist/esm/tutorials/TutorialEngine.js +897 -0
- package/dist/esm/tutorials/TutorialEngine.js.map +1 -0
- package/dist/esm/tutorials/TutorialOverlay.js +600 -0
- package/dist/esm/tutorials/TutorialOverlay.js.map +1 -0
- package/dist/esm/tutorials/content/Tutorials_T05_T08.js +810 -0
- package/dist/esm/tutorials/content/Tutorials_T05_T08.js.map +1 -0
- package/dist/esm/tutorials/content/Tutorials_T09_T11.js +736 -0
- package/dist/esm/tutorials/content/Tutorials_T09_T11.js.map +1 -0
- package/dist/esm/tutorials/content/Tutorials_T12_T15.js +780 -0
- package/dist/esm/tutorials/content/Tutorials_T12_T15.js.map +1 -0
- package/dist/esm/ui/GameUI.js +310 -0
- package/dist/esm/ui/GameUI.js.map +1 -0
- package/dist/esm/xr/ARVR.js +182 -0
- package/dist/esm/xr/ARVR.js.map +1 -0
- package/dist/types/__tests__/setup.d.ts +1 -0
- package/dist/types/accessibility/Accessibility.d.ts +82 -0
- package/dist/types/accessibility/index.d.ts +1 -0
- package/dist/types/ai/AI.d.ts +140 -0
- package/dist/types/ai/index.d.ts +1 -0
- package/dist/types/animation/Animation.d.ts +90 -0
- package/dist/types/animation/index.d.ts +1 -0
- package/dist/types/audio/AudioAdvanced.d.ts +190 -0
- package/dist/types/audio/AudioManager.d.ts +55 -0
- package/dist/types/audio/index.d.ts +1 -0
- package/dist/types/community/Community.d.ts +112 -0
- package/dist/types/community/index.d.ts +1 -0
- package/dist/types/core/EventBus.d.ts +16 -0
- package/dist/types/core/GameClock.d.ts +29 -0
- package/dist/types/core/GameConfig.d.ts +20 -0
- package/dist/types/core/GameLoop.d.ts +32 -0
- package/dist/types/core/ServiceLocator.d.ts +36 -0
- package/dist/types/core/TypeSafety.d.ts +190 -0
- package/dist/types/core/Validation.d.ts +24 -0
- package/dist/types/core/index.d.ts +7 -0
- package/dist/types/core/math.d.ts +32 -0
- package/dist/types/core/types.d.ts +130 -0
- package/dist/types/devtools/AssetStore.d.ts +133 -0
- package/dist/types/devtools/DevTools.d.ts +217 -0
- package/dist/types/devtools/DeveloperExperience.d.ts +123 -0
- package/dist/types/devtools/index.d.ts +3 -0
- package/dist/types/docs/APIPlayground.d.ts +26 -0
- package/dist/types/docs/Cookbook.d.ts +18 -0
- package/dist/types/docs/DocGenerator.d.ts +83 -0
- package/dist/types/docs/Guides.d.ts +18 -0
- package/dist/types/docs/index.d.ts +4 -0
- package/dist/types/ecs/World.d.ts +219 -0
- package/dist/types/ecs/index.d.ts +1 -0
- package/dist/types/editor/AdvancedEditor.d.ts +267 -0
- package/dist/types/editor/AssetManager.d.ts +45 -0
- package/dist/types/editor/DebugTools.d.ts +74 -0
- package/dist/types/editor/NiceGameEditor.d.ts +115 -0
- package/dist/types/editor/SceneEditor.d.ts +37 -0
- package/dist/types/editor/index.d.ts +8 -0
- package/dist/types/engine/NiceGameEngine.d.ts +53 -0
- package/dist/types/engine/index.d.ts +2 -0
- package/dist/types/enterprise/Enterprise.d.ts +217 -0
- package/dist/types/enterprise/index.d.ts +1 -0
- package/dist/types/epic/index.d.ts +10 -0
- package/dist/types/i18n/I18n.d.ts +107 -0
- package/dist/types/i18n/index.d.ts +2 -0
- package/dist/types/i18n/useTranslation.d.ts +74 -0
- package/dist/types/index.d.ts +127 -0
- package/dist/types/input/GamepadNavigation.d.ts +34 -0
- package/dist/types/input/InputManager.d.ts +77 -0
- package/dist/types/input/index.d.ts +3 -0
- package/dist/types/input/useGamepads.d.ts +39 -0
- package/dist/types/kids/KidMode.d.ts +207 -0
- package/dist/types/kids/KidTools.d.ts +135 -0
- package/dist/types/kids/index.d.ts +2 -0
- package/dist/types/legendary/index.d.ts +57 -0
- package/dist/types/monetization/Monetization.d.ts +224 -0
- package/dist/types/monetization/index.d.ts +1 -0
- package/dist/types/multiplayer/LocalMultiplayer.d.ts +61 -0
- package/dist/types/multiplayer/MiniGameTypes.d.ts +70 -0
- package/dist/types/multiplayer/index.d.ts +3 -0
- package/dist/types/network/MultiplayerTransport.d.ts +71 -0
- package/dist/types/network/Networking.d.ts +199 -0
- package/dist/types/network/index.d.ts +2 -0
- package/dist/types/pathfinding/Pathfinding.d.ts +42 -0
- package/dist/types/pathfinding/index.d.ts +1 -0
- package/dist/types/performance/AssetCompression.d.ts +137 -0
- package/dist/types/performance/BenchmarkSuite.d.ts +99 -0
- package/dist/types/performance/Performance.d.ts +87 -0
- package/dist/types/performance/PerformanceAdvanced.d.ts +220 -0
- package/dist/types/performance/WASMModules.d.ts +65 -0
- package/dist/types/performance/WebGPUCompute.d.ts +164 -0
- package/dist/types/performance/index.d.ts +1 -0
- package/dist/types/physics/PhysicsAdvanced.d.ts +148 -0
- package/dist/types/physics/PhysicsEngine2D.d.ts +66 -0
- package/dist/types/physics/index.d.ts +1 -0
- package/dist/types/plugins/PluginSDK.d.ts +134 -0
- package/dist/types/plugins/PluginTestKit.d.ts +107 -0
- package/dist/types/plugins/index.d.ts +2 -0
- package/dist/types/procedural/Procedural.d.ts +90 -0
- package/dist/types/procedural/WorldBuilding.d.ts +200 -0
- package/dist/types/procedural/index.d.ts +2 -0
- package/dist/types/release/MobileExport.d.ts +218 -0
- package/dist/types/release/Release.d.ts +81 -0
- package/dist/types/release/index.d.ts +1 -0
- package/dist/types/rendering/Camera2D.d.ts +39 -0
- package/dist/types/rendering/Renderer2D.d.ts +41 -0
- package/dist/types/rendering/index.d.ts +2 -0
- package/dist/types/runtime3d/Runtime3D.d.ts +259 -0
- package/dist/types/runtime3d/SceneEditor3D.d.ts +186 -0
- package/dist/types/runtime3d/index.d.ts +2 -0
- package/dist/types/scene/SceneManager.d.ts +59 -0
- package/dist/types/scene/index.d.ts +2 -0
- package/dist/types/scripting/NodeGraph.d.ts +84 -0
- package/dist/types/scripting/index.d.ts +2 -0
- package/dist/types/social/Social.d.ts +245 -0
- package/dist/types/social/index.d.ts +1 -0
- package/dist/types/templates/ActionTemplates.d.ts +173 -0
- package/dist/types/templates/PartyTemplates.d.ts +195 -0
- package/dist/types/templates/PuzzleTemplates.d.ts +127 -0
- package/dist/types/templates/RPGTemplates.d.ts +210 -0
- package/dist/types/templates/SportsTemplates.d.ts +162 -0
- package/dist/types/templates/StrategyTemplates.d.ts +264 -0
- package/dist/types/templates/WaveDefense.d.ts +92 -0
- package/dist/types/templates/index.d.ts +2 -0
- package/dist/types/tilemap/Tilemap.d.ts +66 -0
- package/dist/types/tilemap/index.d.ts +1 -0
- package/dist/types/tutorials/TutorialBranching.d.ts +132 -0
- package/dist/types/tutorials/TutorialEditor.d.ts +43 -0
- package/dist/types/tutorials/TutorialEngine.d.ts +237 -0
- package/dist/types/tutorials/TutorialOverlay.d.ts +79 -0
- package/dist/types/tutorials/VoiceNarration.d.ts +75 -0
- package/dist/types/tutorials/content/Tutorials_T04.d.ts +3 -0
- package/dist/types/tutorials/content/Tutorials_T05_T08.d.ts +6 -0
- package/dist/types/tutorials/content/Tutorials_T09_T11.d.ts +5 -0
- package/dist/types/tutorials/content/Tutorials_T12_T15.d.ts +6 -0
- package/dist/types/tutorials/content/UITutorials.d.ts +14 -0
- package/dist/types/tutorials/content/index.d.ts +5 -0
- package/dist/types/tutorials/index.d.ts +6 -0
- package/dist/types/ui/GameUI.d.ts +97 -0
- package/dist/types/ui/index.d.ts +2 -0
- package/dist/types/xr/ARVR.d.ts +252 -0
- package/dist/types/xr/index.d.ts +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonHubProtocol.js","sources":["../../../../../../../../node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js"],"sourcesContent":["// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nconst JSON_HUB_PROTOCOL_NAME = \"json\";\r\n/** Implements the JSON Hub Protocol. */\r\nexport class JsonHubProtocol {\r\n constructor() {\r\n /** @inheritDoc */\r\n this.name = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n this.version = 2;\r\n /** @inheritDoc */\r\n this.transferFormat = TransferFormat.Text;\r\n }\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n parseMessages(input, logger) {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n if (!input) {\r\n return [];\r\n }\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n // Parse the messages\r\n const messages = TextMessageFormat.parse(input);\r\n const hubMessages = [];\r\n for (const message of messages) {\r\n const parsedMessage = JSON.parse(message);\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this._isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this._isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this._isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n case MessageType.Ack:\r\n this._isAckMessage(parsedMessage);\r\n break;\r\n case MessageType.Sequence:\r\n this._isSequenceMessage(parsedMessage);\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n return hubMessages;\r\n }\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n writeMessage(message) {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n }\r\n _isInvocationMessage(message) {\r\n this._assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n if (message.invocationId !== undefined) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n }\r\n _isStreamItemMessage(message) {\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n }\r\n _isCompletionMessage(message) {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n if (!message.result && message.error) {\r\n this._assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n this._assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n }\r\n _isAckMessage(message) {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Ack message.\");\r\n }\r\n }\r\n _isSequenceMessage(message) {\r\n if (typeof message.sequenceId !== 'number') {\r\n throw new Error(\"Invalid SequenceId for Sequence message.\");\r\n }\r\n }\r\n _assertNotEmptyString(value, errorMessage) {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=JsonHubProtocol.js.map"],"names":["TransferFormat","NullLogger","TextMessageFormat","MessageType","LogLevel"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Licensed to the .NET Foundation under one or more agreements.
|
|
4
|
+
// The .NET Foundation licenses this file to you under the MIT license.
|
|
5
|
+
/** A logger that does nothing when log messages are sent to it. */
|
|
6
|
+
class NullLogger {
|
|
7
|
+
constructor() { }
|
|
8
|
+
/** @inheritDoc */
|
|
9
|
+
// eslint-disable-next-line
|
|
10
|
+
log(_logLevel, _message) {
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */
|
|
14
|
+
NullLogger.instance = new NullLogger();
|
|
15
|
+
|
|
16
|
+
exports.NullLogger = NullLogger;
|
|
17
|
+
//# sourceMappingURL=Loggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Loggers.js","sources":["../../../../../../../../node_modules/@microsoft/signalr/dist/esm/Loggers.js"],"sourcesContent":["// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n/** A logger that does nothing when log messages are sent to it. */\r\nexport class NullLogger {\r\n constructor() { }\r\n /** @inheritDoc */\r\n // eslint-disable-next-line\r\n log(_logLevel, _message) {\r\n }\r\n}\r\n/** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\nNullLogger.instance = new NullLogger();\r\n//# sourceMappingURL=Loggers.js.map"],"names":[],"mappings":";;AAAA;AACA;AACA;AACO,MAAM,UAAU,CAAC;AACxB,IAAI,WAAW,GAAG,EAAE,CAAC;AACrB;AACA;AACA,IAAI,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE;AAC7B,IAAI,CAAC;AACL,CAAC;AACD;AACA,UAAU,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE;;;;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var AbortController = require('./AbortController.js');
|
|
4
|
+
var Errors = require('./Errors.js');
|
|
5
|
+
var ILogger = require('./ILogger.js');
|
|
6
|
+
var ITransport = require('./ITransport.js');
|
|
7
|
+
var Utils = require('./Utils.js');
|
|
8
|
+
|
|
9
|
+
// Licensed to the .NET Foundation under one or more agreements.
|
|
10
|
+
// The .NET Foundation licenses this file to you under the MIT license.
|
|
11
|
+
// Not exported from 'index', this type is internal.
|
|
12
|
+
/** @private */
|
|
13
|
+
class LongPollingTransport {
|
|
14
|
+
// This is an internal type, not exported from 'index' so this is really just internal.
|
|
15
|
+
get pollAborted() {
|
|
16
|
+
return this._pollAbort.aborted;
|
|
17
|
+
}
|
|
18
|
+
constructor(httpClient, logger, options) {
|
|
19
|
+
this._httpClient = httpClient;
|
|
20
|
+
this._logger = logger;
|
|
21
|
+
this._pollAbort = new AbortController.AbortController();
|
|
22
|
+
this._options = options;
|
|
23
|
+
this._running = false;
|
|
24
|
+
this.onreceive = null;
|
|
25
|
+
this.onclose = null;
|
|
26
|
+
}
|
|
27
|
+
async connect(url, transferFormat) {
|
|
28
|
+
Utils.Arg.isRequired(url, "url");
|
|
29
|
+
Utils.Arg.isRequired(transferFormat, "transferFormat");
|
|
30
|
+
Utils.Arg.isIn(transferFormat, ITransport.TransferFormat, "transferFormat");
|
|
31
|
+
this._url = url;
|
|
32
|
+
this._logger.log(ILogger.LogLevel.Trace, "(LongPolling transport) Connecting.");
|
|
33
|
+
// Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)
|
|
34
|
+
if (transferFormat === ITransport.TransferFormat.Binary &&
|
|
35
|
+
(typeof XMLHttpRequest !== "undefined" && typeof new XMLHttpRequest().responseType !== "string")) {
|
|
36
|
+
throw new Error("Binary protocols over XmlHttpRequest not implementing advanced features are not supported.");
|
|
37
|
+
}
|
|
38
|
+
const [name, value] = Utils.getUserAgentHeader();
|
|
39
|
+
const headers = { [name]: value, ...this._options.headers };
|
|
40
|
+
const pollOptions = {
|
|
41
|
+
abortSignal: this._pollAbort.signal,
|
|
42
|
+
headers,
|
|
43
|
+
timeout: 100000,
|
|
44
|
+
withCredentials: this._options.withCredentials,
|
|
45
|
+
};
|
|
46
|
+
if (transferFormat === ITransport.TransferFormat.Binary) {
|
|
47
|
+
pollOptions.responseType = "arraybuffer";
|
|
48
|
+
}
|
|
49
|
+
// Make initial long polling request
|
|
50
|
+
// Server uses first long polling request to finish initializing connection and it returns without data
|
|
51
|
+
const pollUrl = `${url}&_=${Date.now()}`;
|
|
52
|
+
this._logger.log(ILogger.LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);
|
|
53
|
+
const response = await this._httpClient.get(pollUrl, pollOptions);
|
|
54
|
+
if (response.statusCode !== 200) {
|
|
55
|
+
this._logger.log(ILogger.LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);
|
|
56
|
+
// Mark running as false so that the poll immediately ends and runs the close logic
|
|
57
|
+
this._closeError = new Errors.HttpError(response.statusText || "", response.statusCode);
|
|
58
|
+
this._running = false;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this._running = true;
|
|
62
|
+
}
|
|
63
|
+
this._receiving = this._poll(this._url, pollOptions);
|
|
64
|
+
}
|
|
65
|
+
async _poll(url, pollOptions) {
|
|
66
|
+
try {
|
|
67
|
+
while (this._running) {
|
|
68
|
+
try {
|
|
69
|
+
const pollUrl = `${url}&_=${Date.now()}`;
|
|
70
|
+
this._logger.log(ILogger.LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);
|
|
71
|
+
const response = await this._httpClient.get(pollUrl, pollOptions);
|
|
72
|
+
if (response.statusCode === 204) {
|
|
73
|
+
this._logger.log(ILogger.LogLevel.Information, "(LongPolling transport) Poll terminated by server.");
|
|
74
|
+
this._running = false;
|
|
75
|
+
}
|
|
76
|
+
else if (response.statusCode !== 200) {
|
|
77
|
+
this._logger.log(ILogger.LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);
|
|
78
|
+
// Unexpected status code
|
|
79
|
+
this._closeError = new Errors.HttpError(response.statusText || "", response.statusCode);
|
|
80
|
+
this._running = false;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Process the response
|
|
84
|
+
if (response.content) {
|
|
85
|
+
this._logger.log(ILogger.LogLevel.Trace, `(LongPolling transport) data received. ${Utils.getDataDetail(response.content, this._options.logMessageContent)}.`);
|
|
86
|
+
if (this.onreceive) {
|
|
87
|
+
this.onreceive(response.content);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// This is another way timeout manifest.
|
|
92
|
+
this._logger.log(ILogger.LogLevel.Trace, "(LongPolling transport) Poll timed out, reissuing.");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
if (!this._running) {
|
|
98
|
+
// Log but disregard errors that occur after stopping
|
|
99
|
+
this._logger.log(ILogger.LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${e.message}`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
if (e instanceof Errors.TimeoutError) {
|
|
103
|
+
// Ignore timeouts and reissue the poll.
|
|
104
|
+
this._logger.log(ILogger.LogLevel.Trace, "(LongPolling transport) Poll timed out, reissuing.");
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Close the connection with the error as the result.
|
|
108
|
+
this._closeError = e;
|
|
109
|
+
this._running = false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
this._logger.log(ILogger.LogLevel.Trace, "(LongPolling transport) Polling complete.");
|
|
117
|
+
// We will reach here with pollAborted==false when the server returned a response causing the transport to stop.
|
|
118
|
+
// If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.
|
|
119
|
+
if (!this.pollAborted) {
|
|
120
|
+
this._raiseOnClose();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async send(data) {
|
|
125
|
+
if (!this._running) {
|
|
126
|
+
return Promise.reject(new Error("Cannot send until the transport is connected"));
|
|
127
|
+
}
|
|
128
|
+
return Utils.sendMessage(this._logger, "LongPolling", this._httpClient, this._url, data, this._options);
|
|
129
|
+
}
|
|
130
|
+
async stop() {
|
|
131
|
+
this._logger.log(ILogger.LogLevel.Trace, "(LongPolling transport) Stopping polling.");
|
|
132
|
+
// Tell receiving loop to stop, abort any current request, and then wait for it to finish
|
|
133
|
+
this._running = false;
|
|
134
|
+
this._pollAbort.abort();
|
|
135
|
+
try {
|
|
136
|
+
await this._receiving;
|
|
137
|
+
// Send DELETE to clean up long polling on the server
|
|
138
|
+
this._logger.log(ILogger.LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this._url}.`);
|
|
139
|
+
const headers = {};
|
|
140
|
+
const [name, value] = Utils.getUserAgentHeader();
|
|
141
|
+
headers[name] = value;
|
|
142
|
+
const deleteOptions = {
|
|
143
|
+
headers: { ...headers, ...this._options.headers },
|
|
144
|
+
timeout: this._options.timeout,
|
|
145
|
+
withCredentials: this._options.withCredentials,
|
|
146
|
+
};
|
|
147
|
+
let error;
|
|
148
|
+
try {
|
|
149
|
+
await this._httpClient.delete(this._url, deleteOptions);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
error = err;
|
|
153
|
+
}
|
|
154
|
+
if (error) {
|
|
155
|
+
if (error instanceof Errors.HttpError) {
|
|
156
|
+
if (error.statusCode === 404) {
|
|
157
|
+
this._logger.log(ILogger.LogLevel.Trace, "(LongPolling transport) A 404 response was returned from sending a DELETE request.");
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this._logger.log(ILogger.LogLevel.Trace, `(LongPolling transport) Error sending a DELETE request: ${error}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this._logger.log(ILogger.LogLevel.Trace, "(LongPolling transport) DELETE request accepted.");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
this._logger.log(ILogger.LogLevel.Trace, "(LongPolling transport) Stop finished.");
|
|
170
|
+
// Raise close event here instead of in polling
|
|
171
|
+
// It needs to happen after the DELETE request is sent
|
|
172
|
+
this._raiseOnClose();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
_raiseOnClose() {
|
|
176
|
+
if (this.onclose) {
|
|
177
|
+
let logMessage = "(LongPolling transport) Firing onclose event.";
|
|
178
|
+
if (this._closeError) {
|
|
179
|
+
logMessage += " Error: " + this._closeError;
|
|
180
|
+
}
|
|
181
|
+
this._logger.log(ILogger.LogLevel.Trace, logMessage);
|
|
182
|
+
this.onclose(this._closeError);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
exports.LongPollingTransport = LongPollingTransport;
|
|
188
|
+
//# sourceMappingURL=LongPollingTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LongPollingTransport.js","sources":["../../../../../../../../node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js"],"sourcesContent":["// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nexport class LongPollingTransport {\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n get pollAborted() {\r\n return this._pollAbort.aborted;\r\n }\r\n constructor(httpClient, logger, options) {\r\n this._httpClient = httpClient;\r\n this._logger = logger;\r\n this._pollAbort = new AbortController();\r\n this._options = options;\r\n this._running = false;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._url = url;\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n const [name, value] = getUserAgentHeader();\r\n const headers = { [name]: value, ...this._options.headers };\r\n const pollOptions = {\r\n abortSignal: this._pollAbort.signal,\r\n headers,\r\n timeout: 100000,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n // Make initial long polling request\r\n // Server uses first long polling request to finish initializing connection and it returns without data\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n }\r\n else {\r\n this._running = true;\r\n }\r\n this._receiving = this._poll(this._url, pollOptions);\r\n }\r\n async _poll(url, pollOptions) {\r\n try {\r\n while (this._running) {\r\n try {\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this._httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode === 204) {\r\n this._logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n this._running = false;\r\n }\r\n else if (response.statusCode !== 200) {\r\n this._logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n // Unexpected status code\r\n this._closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this._running = false;\r\n }\r\n else {\r\n // Process the response\r\n if (response.content) {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) data received. ${getDataDetail(response.content, this._options.logMessageContent)}.`);\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n }\r\n else {\r\n // This is another way timeout manifest.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n }\r\n catch (e) {\r\n if (!this._running) {\r\n // Log but disregard errors that occur after stopping\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${e.message}`);\r\n }\r\n else {\r\n if (e instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n else {\r\n // Close the connection with the error as the result.\r\n this._closeError = e;\r\n this._running = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this._raiseOnClose();\r\n }\r\n }\r\n }\r\n async send(data) {\r\n if (!this._running) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"LongPolling\", this._httpClient, this._url, data, this._options);\r\n }\r\n async stop() {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this._running = false;\r\n this._pollAbort.abort();\r\n try {\r\n await this._receiving;\r\n // Send DELETE to clean up long polling on the server\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this._url}.`);\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n const deleteOptions = {\r\n headers: { ...headers, ...this._options.headers },\r\n timeout: this._options.timeout,\r\n withCredentials: this._options.withCredentials,\r\n };\r\n let error;\r\n try {\r\n await this._httpClient.delete(this._url, deleteOptions);\r\n }\r\n catch (err) {\r\n error = err;\r\n }\r\n if (error) {\r\n if (error instanceof HttpError) {\r\n if (error.statusCode === 404) {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) A 404 response was returned from sending a DELETE request.\");\r\n }\r\n else {\r\n this._logger.log(LogLevel.Trace, `(LongPolling transport) Error sending a DELETE request: ${error}`);\r\n }\r\n }\r\n }\r\n else {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request accepted.\");\r\n }\r\n }\r\n finally {\r\n this._logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this._raiseOnClose();\r\n }\r\n }\r\n _raiseOnClose() {\r\n if (this.onclose) {\r\n let logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this._closeError) {\r\n logMessage += \" Error: \" + this._closeError;\r\n }\r\n this._logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this._closeError);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=LongPollingTransport.js.map"],"names":["AbortController","Arg","TransferFormat","LogLevel","getUserAgentHeader","HttpError","getDataDetail","TimeoutError","sendMessage"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var IHubProtocol = require('./IHubProtocol.js');
|
|
4
|
+
var Utils = require('./Utils.js');
|
|
5
|
+
|
|
6
|
+
// Licensed to the .NET Foundation under one or more agreements.
|
|
7
|
+
// The .NET Foundation licenses this file to you under the MIT license.
|
|
8
|
+
/** @private */
|
|
9
|
+
class MessageBuffer {
|
|
10
|
+
constructor(protocol, connection, bufferSize) {
|
|
11
|
+
this._bufferSize = 100000;
|
|
12
|
+
this._messages = [];
|
|
13
|
+
this._totalMessageCount = 0;
|
|
14
|
+
this._waitForSequenceMessage = false;
|
|
15
|
+
// Message IDs start at 1 and always increment by 1
|
|
16
|
+
this._nextReceivingSequenceId = 1;
|
|
17
|
+
this._latestReceivedSequenceId = 0;
|
|
18
|
+
this._bufferedByteCount = 0;
|
|
19
|
+
this._reconnectInProgress = false;
|
|
20
|
+
this._protocol = protocol;
|
|
21
|
+
this._connection = connection;
|
|
22
|
+
this._bufferSize = bufferSize;
|
|
23
|
+
}
|
|
24
|
+
async _send(message) {
|
|
25
|
+
const serializedMessage = this._protocol.writeMessage(message);
|
|
26
|
+
let backpressurePromise = Promise.resolve();
|
|
27
|
+
// Only count invocation messages. Acks, pings, etc. don't need to be resent on reconnect
|
|
28
|
+
if (this._isInvocationMessage(message)) {
|
|
29
|
+
this._totalMessageCount++;
|
|
30
|
+
let backpressurePromiseResolver = () => { };
|
|
31
|
+
let backpressurePromiseRejector = () => { };
|
|
32
|
+
if (Utils.isArrayBuffer(serializedMessage)) {
|
|
33
|
+
this._bufferedByteCount += serializedMessage.byteLength;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this._bufferedByteCount += serializedMessage.length;
|
|
37
|
+
}
|
|
38
|
+
if (this._bufferedByteCount >= this._bufferSize) {
|
|
39
|
+
backpressurePromise = new Promise((resolve, reject) => {
|
|
40
|
+
backpressurePromiseResolver = resolve;
|
|
41
|
+
backpressurePromiseRejector = reject;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
this._messages.push(new BufferedItem(serializedMessage, this._totalMessageCount, backpressurePromiseResolver, backpressurePromiseRejector));
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
// If this is set it means we are reconnecting or resending
|
|
48
|
+
// We don't want to send on a disconnected connection
|
|
49
|
+
// And we don't want to send if resend is running since that would mean sending
|
|
50
|
+
// this message twice
|
|
51
|
+
if (!this._reconnectInProgress) {
|
|
52
|
+
await this._connection.send(serializedMessage);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
this._disconnected();
|
|
57
|
+
}
|
|
58
|
+
await backpressurePromise;
|
|
59
|
+
}
|
|
60
|
+
_ack(ackMessage) {
|
|
61
|
+
let newestAckedMessage = -1;
|
|
62
|
+
// Find index of newest message being acked
|
|
63
|
+
for (let index = 0; index < this._messages.length; index++) {
|
|
64
|
+
const element = this._messages[index];
|
|
65
|
+
if (element._id <= ackMessage.sequenceId) {
|
|
66
|
+
newestAckedMessage = index;
|
|
67
|
+
if (Utils.isArrayBuffer(element._message)) {
|
|
68
|
+
this._bufferedByteCount -= element._message.byteLength;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this._bufferedByteCount -= element._message.length;
|
|
72
|
+
}
|
|
73
|
+
// resolve items that have already been sent and acked
|
|
74
|
+
element._resolver();
|
|
75
|
+
}
|
|
76
|
+
else if (this._bufferedByteCount < this._bufferSize) {
|
|
77
|
+
// resolve items that now fall under the buffer limit but haven't been acked
|
|
78
|
+
element._resolver();
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (newestAckedMessage !== -1) {
|
|
85
|
+
// We're removing everything including the message pointed to, so add 1
|
|
86
|
+
this._messages = this._messages.slice(newestAckedMessage + 1);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
_shouldProcessMessage(message) {
|
|
90
|
+
if (this._waitForSequenceMessage) {
|
|
91
|
+
if (message.type !== IHubProtocol.MessageType.Sequence) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this._waitForSequenceMessage = false;
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// No special processing for acks, pings, etc.
|
|
100
|
+
if (!this._isInvocationMessage(message)) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
const currentId = this._nextReceivingSequenceId;
|
|
104
|
+
this._nextReceivingSequenceId++;
|
|
105
|
+
if (currentId <= this._latestReceivedSequenceId) {
|
|
106
|
+
if (currentId === this._latestReceivedSequenceId) {
|
|
107
|
+
// Should only hit this if we just reconnected and the server is sending
|
|
108
|
+
// Messages it has buffered, which would mean it hasn't seen an Ack for these messages
|
|
109
|
+
this._ackTimer();
|
|
110
|
+
}
|
|
111
|
+
// Ignore, this is a duplicate message
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
this._latestReceivedSequenceId = currentId;
|
|
115
|
+
// Only start the timer for sending an Ack message when we have a message to ack. This also conveniently solves
|
|
116
|
+
// timer throttling by not having a recursive timer, and by starting the timer via a network call (recv)
|
|
117
|
+
this._ackTimer();
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
_resetSequence(message) {
|
|
121
|
+
if (message.sequenceId > this._nextReceivingSequenceId) {
|
|
122
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
123
|
+
this._connection.stop(new Error("Sequence ID greater than amount of messages we've received."));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
this._nextReceivingSequenceId = message.sequenceId;
|
|
127
|
+
}
|
|
128
|
+
_disconnected() {
|
|
129
|
+
this._reconnectInProgress = true;
|
|
130
|
+
this._waitForSequenceMessage = true;
|
|
131
|
+
}
|
|
132
|
+
async _resend() {
|
|
133
|
+
const sequenceId = this._messages.length !== 0
|
|
134
|
+
? this._messages[0]._id
|
|
135
|
+
: this._totalMessageCount + 1;
|
|
136
|
+
await this._connection.send(this._protocol.writeMessage({ type: IHubProtocol.MessageType.Sequence, sequenceId }));
|
|
137
|
+
// Get a local variable to the _messages, just in case messages are acked while resending
|
|
138
|
+
// Which would slice the _messages array (which creates a new copy)
|
|
139
|
+
const messages = this._messages;
|
|
140
|
+
for (const element of messages) {
|
|
141
|
+
await this._connection.send(element._message);
|
|
142
|
+
}
|
|
143
|
+
this._reconnectInProgress = false;
|
|
144
|
+
}
|
|
145
|
+
_dispose(error) {
|
|
146
|
+
error !== null && error !== void 0 ? error : (error = new Error("Unable to reconnect to server."));
|
|
147
|
+
// Unblock backpressure if any
|
|
148
|
+
for (const element of this._messages) {
|
|
149
|
+
element._rejector(error);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
_isInvocationMessage(message) {
|
|
153
|
+
// There is no way to check if something implements an interface.
|
|
154
|
+
// So we individually check the messages in a switch statement.
|
|
155
|
+
// To make sure we don't miss any message types we rely on the compiler
|
|
156
|
+
// seeing the function returns a value and it will do the
|
|
157
|
+
// exhaustive check for us on the switch statement, since we don't use 'case default'
|
|
158
|
+
switch (message.type) {
|
|
159
|
+
case IHubProtocol.MessageType.Invocation:
|
|
160
|
+
case IHubProtocol.MessageType.StreamItem:
|
|
161
|
+
case IHubProtocol.MessageType.Completion:
|
|
162
|
+
case IHubProtocol.MessageType.StreamInvocation:
|
|
163
|
+
case IHubProtocol.MessageType.CancelInvocation:
|
|
164
|
+
return true;
|
|
165
|
+
case IHubProtocol.MessageType.Close:
|
|
166
|
+
case IHubProtocol.MessageType.Sequence:
|
|
167
|
+
case IHubProtocol.MessageType.Ping:
|
|
168
|
+
case IHubProtocol.MessageType.Ack:
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
_ackTimer() {
|
|
173
|
+
if (this._ackTimerHandle === undefined) {
|
|
174
|
+
this._ackTimerHandle = setTimeout(async () => {
|
|
175
|
+
try {
|
|
176
|
+
if (!this._reconnectInProgress) {
|
|
177
|
+
await this._connection.send(this._protocol.writeMessage({ type: IHubProtocol.MessageType.Ack, sequenceId: this._latestReceivedSequenceId }));
|
|
178
|
+
}
|
|
179
|
+
// Ignore errors, that means the connection is closed and we don't care about the Ack message anymore.
|
|
180
|
+
}
|
|
181
|
+
catch { }
|
|
182
|
+
clearTimeout(this._ackTimerHandle);
|
|
183
|
+
this._ackTimerHandle = undefined;
|
|
184
|
+
// 1 second delay so we don't spam Ack messages if there are many messages being received at once.
|
|
185
|
+
}, 1000);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
class BufferedItem {
|
|
190
|
+
constructor(message, id, resolver, rejector) {
|
|
191
|
+
this._message = message;
|
|
192
|
+
this._id = id;
|
|
193
|
+
this._resolver = resolver;
|
|
194
|
+
this._rejector = rejector;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
exports.MessageBuffer = MessageBuffer;
|
|
199
|
+
//# sourceMappingURL=MessageBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBuffer.js","sources":["../../../../../../../../node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js"],"sourcesContent":["// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { MessageType } from \"./IHubProtocol\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n/** @private */\r\nexport class MessageBuffer {\r\n constructor(protocol, connection, bufferSize) {\r\n this._bufferSize = 100000;\r\n this._messages = [];\r\n this._totalMessageCount = 0;\r\n this._waitForSequenceMessage = false;\r\n // Message IDs start at 1 and always increment by 1\r\n this._nextReceivingSequenceId = 1;\r\n this._latestReceivedSequenceId = 0;\r\n this._bufferedByteCount = 0;\r\n this._reconnectInProgress = false;\r\n this._protocol = protocol;\r\n this._connection = connection;\r\n this._bufferSize = bufferSize;\r\n }\r\n async _send(message) {\r\n const serializedMessage = this._protocol.writeMessage(message);\r\n let backpressurePromise = Promise.resolve();\r\n // Only count invocation messages. Acks, pings, etc. don't need to be resent on reconnect\r\n if (this._isInvocationMessage(message)) {\r\n this._totalMessageCount++;\r\n let backpressurePromiseResolver = () => { };\r\n let backpressurePromiseRejector = () => { };\r\n if (isArrayBuffer(serializedMessage)) {\r\n this._bufferedByteCount += serializedMessage.byteLength;\r\n }\r\n else {\r\n this._bufferedByteCount += serializedMessage.length;\r\n }\r\n if (this._bufferedByteCount >= this._bufferSize) {\r\n backpressurePromise = new Promise((resolve, reject) => {\r\n backpressurePromiseResolver = resolve;\r\n backpressurePromiseRejector = reject;\r\n });\r\n }\r\n this._messages.push(new BufferedItem(serializedMessage, this._totalMessageCount, backpressurePromiseResolver, backpressurePromiseRejector));\r\n }\r\n try {\r\n // If this is set it means we are reconnecting or resending\r\n // We don't want to send on a disconnected connection\r\n // And we don't want to send if resend is running since that would mean sending\r\n // this message twice\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(serializedMessage);\r\n }\r\n }\r\n catch {\r\n this._disconnected();\r\n }\r\n await backpressurePromise;\r\n }\r\n _ack(ackMessage) {\r\n let newestAckedMessage = -1;\r\n // Find index of newest message being acked\r\n for (let index = 0; index < this._messages.length; index++) {\r\n const element = this._messages[index];\r\n if (element._id <= ackMessage.sequenceId) {\r\n newestAckedMessage = index;\r\n if (isArrayBuffer(element._message)) {\r\n this._bufferedByteCount -= element._message.byteLength;\r\n }\r\n else {\r\n this._bufferedByteCount -= element._message.length;\r\n }\r\n // resolve items that have already been sent and acked\r\n element._resolver();\r\n }\r\n else if (this._bufferedByteCount < this._bufferSize) {\r\n // resolve items that now fall under the buffer limit but haven't been acked\r\n element._resolver();\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n if (newestAckedMessage !== -1) {\r\n // We're removing everything including the message pointed to, so add 1\r\n this._messages = this._messages.slice(newestAckedMessage + 1);\r\n }\r\n }\r\n _shouldProcessMessage(message) {\r\n if (this._waitForSequenceMessage) {\r\n if (message.type !== MessageType.Sequence) {\r\n return false;\r\n }\r\n else {\r\n this._waitForSequenceMessage = false;\r\n return true;\r\n }\r\n }\r\n // No special processing for acks, pings, etc.\r\n if (!this._isInvocationMessage(message)) {\r\n return true;\r\n }\r\n const currentId = this._nextReceivingSequenceId;\r\n this._nextReceivingSequenceId++;\r\n if (currentId <= this._latestReceivedSequenceId) {\r\n if (currentId === this._latestReceivedSequenceId) {\r\n // Should only hit this if we just reconnected and the server is sending\r\n // Messages it has buffered, which would mean it hasn't seen an Ack for these messages\r\n this._ackTimer();\r\n }\r\n // Ignore, this is a duplicate message\r\n return false;\r\n }\r\n this._latestReceivedSequenceId = currentId;\r\n // Only start the timer for sending an Ack message when we have a message to ack. This also conveniently solves\r\n // timer throttling by not having a recursive timer, and by starting the timer via a network call (recv)\r\n this._ackTimer();\r\n return true;\r\n }\r\n _resetSequence(message) {\r\n if (message.sequenceId > this._nextReceivingSequenceId) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._connection.stop(new Error(\"Sequence ID greater than amount of messages we've received.\"));\r\n return;\r\n }\r\n this._nextReceivingSequenceId = message.sequenceId;\r\n }\r\n _disconnected() {\r\n this._reconnectInProgress = true;\r\n this._waitForSequenceMessage = true;\r\n }\r\n async _resend() {\r\n const sequenceId = this._messages.length !== 0\r\n ? this._messages[0]._id\r\n : this._totalMessageCount + 1;\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Sequence, sequenceId }));\r\n // Get a local variable to the _messages, just in case messages are acked while resending\r\n // Which would slice the _messages array (which creates a new copy)\r\n const messages = this._messages;\r\n for (const element of messages) {\r\n await this._connection.send(element._message);\r\n }\r\n this._reconnectInProgress = false;\r\n }\r\n _dispose(error) {\r\n error !== null && error !== void 0 ? error : (error = new Error(\"Unable to reconnect to server.\"));\r\n // Unblock backpressure if any\r\n for (const element of this._messages) {\r\n element._rejector(error);\r\n }\r\n }\r\n _isInvocationMessage(message) {\r\n // There is no way to check if something implements an interface.\r\n // So we individually check the messages in a switch statement.\r\n // To make sure we don't miss any message types we rely on the compiler\r\n // seeing the function returns a value and it will do the\r\n // exhaustive check for us on the switch statement, since we don't use 'case default'\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n case MessageType.StreamItem:\r\n case MessageType.Completion:\r\n case MessageType.StreamInvocation:\r\n case MessageType.CancelInvocation:\r\n return true;\r\n case MessageType.Close:\r\n case MessageType.Sequence:\r\n case MessageType.Ping:\r\n case MessageType.Ack:\r\n return false;\r\n }\r\n }\r\n _ackTimer() {\r\n if (this._ackTimerHandle === undefined) {\r\n this._ackTimerHandle = setTimeout(async () => {\r\n try {\r\n if (!this._reconnectInProgress) {\r\n await this._connection.send(this._protocol.writeMessage({ type: MessageType.Ack, sequenceId: this._latestReceivedSequenceId }));\r\n }\r\n // Ignore errors, that means the connection is closed and we don't care about the Ack message anymore.\r\n }\r\n catch { }\r\n clearTimeout(this._ackTimerHandle);\r\n this._ackTimerHandle = undefined;\r\n // 1 second delay so we don't spam Ack messages if there are many messages being received at once.\r\n }, 1000);\r\n }\r\n }\r\n}\r\nclass BufferedItem {\r\n constructor(message, id, resolver, rejector) {\r\n this._message = message;\r\n this._id = id;\r\n this._resolver = resolver;\r\n this._rejector = rejector;\r\n }\r\n}\r\n//# sourceMappingURL=MessageBuffer.js.map"],"names":["isArrayBuffer","MessageType"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var ILogger = require('./ILogger.js');
|
|
4
|
+
var ITransport = require('./ITransport.js');
|
|
5
|
+
var Utils = require('./Utils.js');
|
|
6
|
+
|
|
7
|
+
// Licensed to the .NET Foundation under one or more agreements.
|
|
8
|
+
// The .NET Foundation licenses this file to you under the MIT license.
|
|
9
|
+
/** @private */
|
|
10
|
+
class ServerSentEventsTransport {
|
|
11
|
+
constructor(httpClient, accessToken, logger, options) {
|
|
12
|
+
this._httpClient = httpClient;
|
|
13
|
+
this._accessToken = accessToken;
|
|
14
|
+
this._logger = logger;
|
|
15
|
+
this._options = options;
|
|
16
|
+
this.onreceive = null;
|
|
17
|
+
this.onclose = null;
|
|
18
|
+
}
|
|
19
|
+
async connect(url, transferFormat) {
|
|
20
|
+
Utils.Arg.isRequired(url, "url");
|
|
21
|
+
Utils.Arg.isRequired(transferFormat, "transferFormat");
|
|
22
|
+
Utils.Arg.isIn(transferFormat, ITransport.TransferFormat, "transferFormat");
|
|
23
|
+
this._logger.log(ILogger.LogLevel.Trace, "(SSE transport) Connecting.");
|
|
24
|
+
// set url before accessTokenFactory because this._url is only for send and we set the auth header instead of the query string for send
|
|
25
|
+
this._url = url;
|
|
26
|
+
if (this._accessToken) {
|
|
27
|
+
url += (url.indexOf("?") < 0 ? "?" : "&") + `access_token=${encodeURIComponent(this._accessToken)}`;
|
|
28
|
+
}
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
let opened = false;
|
|
31
|
+
if (transferFormat !== ITransport.TransferFormat.Text) {
|
|
32
|
+
reject(new Error("The Server-Sent Events transport only supports the 'Text' transfer format"));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
let eventSource;
|
|
36
|
+
if (Utils.Platform.isBrowser || Utils.Platform.isWebWorker) {
|
|
37
|
+
eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials });
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Non-browser passes cookies via the dictionary
|
|
41
|
+
const cookies = this._httpClient.getCookieString(url);
|
|
42
|
+
const headers = {};
|
|
43
|
+
headers.Cookie = cookies;
|
|
44
|
+
const [name, value] = Utils.getUserAgentHeader();
|
|
45
|
+
headers[name] = value;
|
|
46
|
+
eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials, headers: { ...headers, ...this._options.headers } });
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
eventSource.onmessage = (e) => {
|
|
50
|
+
if (this.onreceive) {
|
|
51
|
+
try {
|
|
52
|
+
this._logger.log(ILogger.LogLevel.Trace, `(SSE transport) data received. ${Utils.getDataDetail(e.data, this._options.logMessageContent)}.`);
|
|
53
|
+
this.onreceive(e.data);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
this._close(error);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
// @ts-ignore: not using event on purpose
|
|
62
|
+
eventSource.onerror = (e) => {
|
|
63
|
+
// EventSource doesn't give any useful information about server side closes.
|
|
64
|
+
if (opened) {
|
|
65
|
+
this._close();
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
reject(new Error("EventSource failed to connect. The connection could not be found on the server,"
|
|
69
|
+
+ " either the connection ID is not present on the server, or a proxy is refusing/buffering the connection."
|
|
70
|
+
+ " If you have multiple servers check that sticky sessions are enabled."));
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
eventSource.onopen = () => {
|
|
74
|
+
this._logger.log(ILogger.LogLevel.Information, `SSE connected to ${this._url}`);
|
|
75
|
+
this._eventSource = eventSource;
|
|
76
|
+
opened = true;
|
|
77
|
+
resolve();
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
reject(e);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async send(data) {
|
|
87
|
+
if (!this._eventSource) {
|
|
88
|
+
return Promise.reject(new Error("Cannot send until the transport is connected"));
|
|
89
|
+
}
|
|
90
|
+
return Utils.sendMessage(this._logger, "SSE", this._httpClient, this._url, data, this._options);
|
|
91
|
+
}
|
|
92
|
+
stop() {
|
|
93
|
+
this._close();
|
|
94
|
+
return Promise.resolve();
|
|
95
|
+
}
|
|
96
|
+
_close(e) {
|
|
97
|
+
if (this._eventSource) {
|
|
98
|
+
this._eventSource.close();
|
|
99
|
+
this._eventSource = undefined;
|
|
100
|
+
if (this.onclose) {
|
|
101
|
+
this.onclose(e);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
exports.ServerSentEventsTransport = ServerSentEventsTransport;
|
|
108
|
+
//# sourceMappingURL=ServerSentEventsTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerSentEventsTransport.js","sources":["../../../../../../../../node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js"],"sourcesContent":["// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\nimport { LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\n/** @private */\r\nexport class ServerSentEventsTransport {\r\n constructor(httpClient, accessToken, logger, options) {\r\n this._httpClient = httpClient;\r\n this._accessToken = accessToken;\r\n this._logger = logger;\r\n this._options = options;\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n async connect(url, transferFormat) {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this._logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n // set url before accessTokenFactory because this._url is only for send and we set the auth header instead of the query string for send\r\n this._url = url;\r\n if (this._accessToken) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(this._accessToken)}`;\r\n }\r\n return new Promise((resolve, reject) => {\r\n let opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n let eventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials });\r\n }\r\n else {\r\n // Non-browser passes cookies via the dictionary\r\n const cookies = this._httpClient.getCookieString(url);\r\n const headers = {};\r\n headers.Cookie = cookies;\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n eventSource = new this._options.EventSource(url, { withCredentials: this._options.withCredentials, headers: { ...headers, ...this._options.headers } });\r\n }\r\n try {\r\n eventSource.onmessage = (e) => {\r\n if (this.onreceive) {\r\n try {\r\n this._logger.log(LogLevel.Trace, `(SSE transport) data received. ${getDataDetail(e.data, this._options.logMessageContent)}.`);\r\n this.onreceive(e.data);\r\n }\r\n catch (error) {\r\n this._close(error);\r\n return;\r\n }\r\n }\r\n };\r\n // @ts-ignore: not using event on purpose\r\n eventSource.onerror = (e) => {\r\n // EventSource doesn't give any useful information about server side closes.\r\n if (opened) {\r\n this._close();\r\n }\r\n else {\r\n reject(new Error(\"EventSource failed to connect. The connection could not be found on the server,\"\r\n + \" either the connection ID is not present on the server, or a proxy is refusing/buffering the connection.\"\r\n + \" If you have multiple servers check that sticky sessions are enabled.\"));\r\n }\r\n };\r\n eventSource.onopen = () => {\r\n this._logger.log(LogLevel.Information, `SSE connected to ${this._url}`);\r\n this._eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n }\r\n catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n });\r\n }\r\n async send(data) {\r\n if (!this._eventSource) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this._logger, \"SSE\", this._httpClient, this._url, data, this._options);\r\n }\r\n stop() {\r\n this._close();\r\n return Promise.resolve();\r\n }\r\n _close(e) {\r\n if (this._eventSource) {\r\n this._eventSource.close();\r\n this._eventSource = undefined;\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=ServerSentEventsTransport.js.map"],"names":["Arg","TransferFormat","LogLevel","Platform","getUserAgentHeader","getDataDetail","sendMessage"],"mappings":"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","x_google_ignoreList":[0]}
|